상세 컨텐츠

본문 제목

[안드로이드 코틀린] 숫자 맞추기 게임 Up&Down 만드는 방법

안드로이드

by aries574 2022. 9. 1. 16:40

본문


이번 시간에는 랜덤한 숫자를 발생시켜 숫자 맞추는 게임을 만들어 보겠습니다. 


목차

1. 실행 화면
2. 메인 화면 activity_main.xml
3. 메인 코드 MainActivity.kt


1. 실행 화면

 


2. 메인 화면 activity_main.xml

- 설명 -

 1. 기회 횟수를 보여주는 TextView

 2. 결과를 보여주는 TextView

 3. 숫자를 입력하는 EditText

 4. 게임 시작 Button

 5. 정답 제출 Button

 6. 게임 초기화 Button

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/rootView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <!-- 기회 횟수 -->
    <TextView
        android:id="@+id/lifeCountText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@android:color/darker_gray"
        android:textColor="@android:color/white"
        android:textSize="30sp"
        android:textStyle="bold" />

    <!-- 결과 -->
    <TextView
        android:id="@+id/resultText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@android:color/holo_green_light"
        android:textColor="@android:color/white"
        android:textSize="30sp"
        android:textStyle="bold" />

    <!-- 숫자 입력 -->
    <EditText
        android:id="@+id/requestText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:hint="숫자를 입력하세요 1 ~ 100"
        android:inputType="number"
        android:maxLength="3"
        android:textSize="25sp" />

    <!-- 버튼 레이아웃 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/startBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@android:color/holo_green_light"
            android:text="시작"
            android:textColor="@android:color/white"
            android:textSize="25sp"/>

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/answerBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@android:color/holo_green_light"
            android:text="정답"
            android:textColor="@android:color/white"
            android:textSize="25sp"/>

        <androidx.appcompat.widget.AppCompatButton
            android:id="@+id/resetBtn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@android:color/holo_green_light"
            android:text="초기화"
            android:textColor="@android:color/white"
            android:textSize="25sp"/>
    </LinearLayout>
</LinearLayout>

 


3. 메인 코드 MainActivity.kt

 - 설명 -

 1. min

  입력값이 랜덤값보다 작으면 넣는다.

 2. max

   입력값이 랜덤값보다 크면 넣는다. 

 3. lifeCount

   기회 횟수

 4. viewMode(mode: String)

   버튼 활성화 설정과 색상 설정 함수

 5. createRandomNumber()

   랜덤 숫자 생성 함수

 6. reset()

   값 초기화 함수

 7. numberCheck(mInputNumber: String)

   랜덤값과 입력값 비교 함수

class MainActivity : AppCompatActivity() {

    lateinit var requestText: EditText
    lateinit var lifeCountText: TextView
    lateinit var resultText: TextView
    lateinit var startBtn: Button
    lateinit var answerBtn: Button
    lateinit var resetBtn: Button

    // 랜덤값
    private var randomNumber = 0

    //최저값
    var min = 0

    //최고값
    var max = 100

    //기회 횟수
    var lifeCount = 10

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //입력 텍스트
        requestText = findViewById(R.id.requestText)
        //기회 횟수
        lifeCountText = findViewById(R.id.lifeCountText)
        //결과 텍스트
        resultText = findViewById(R.id.resultText)
        //시작 버튼
        startBtn = findViewById(R.id.startBtn)
        //정답 버튼
        answerBtn = findViewById(R.id.answerBtn)
        //초기화 버튼
        resetBtn = findViewById(R.id.resetBtn)

        //화면 설정
        viewMode("end")

        //기회 횟수 보여주기
        showLifeCount(lifeCount)

        //시작 버튼 이벤트
        startBtn.setOnClickListener {

            viewMode("start")

            toastMessage("게임 시작")

            //랜덤 숫자 생성
            createRandomNumber()
        }

        //정답 버튼 이벤트
        answerBtn.setOnClickListener {

            var inputNumber: String = requestText.text.toString()

            //입력값 체크
            if(inputNumber == ""){
                toastMessage("값을 입력해주세요")

            }else{ //값이 있으면
                //숫자 비교
                numberCheck(inputNumber)
            }
        }

        //초기화 버튼 이벤트
        resetBtn.setOnClickListener {

            //초기화
            reset()

            viewMode("end")
        }
    }//onCreae

    /**
     * 랜덤 숫자 생성
     */
    private fun createRandomNumber(){

        //랜덤 숫자 1 ~ 100 사이 생성
        randomNumber = Random.nextInt(100)+1
    }

    /**
     * 화면 구조
     * mode: start: 시작, end: 쉬는중
     */
    private fun viewMode(mode: String){

        if(mode == "start"){
            //활성화 설정
            startBtn.isEnabled = false
            requestText.isEnabled = true
            answerBtn.isEnabled = true
            resetBtn.isEnabled = true

            //색상 설정
            startBtn.setBackgroundColor(getColor(android.R.color.darker_gray))
            answerBtn.setBackgroundColor(getColor(android.R.color.holo_green_light))
            resetBtn.setBackgroundColor(getColor(android.R.color.holo_green_light))
        }
        else if(mode == "end"){
            //활성화 설정
            startBtn.isEnabled = true
            requestText.isEnabled = false
            answerBtn.isEnabled = false
            resetBtn.isEnabled = false

            //색상 설정
            startBtn.setBackgroundColor(getColor(android.R.color.holo_green_light))
            answerBtn.setBackgroundColor(getColor(android.R.color.darker_gray))
            resetBtn.setBackgroundColor(getColor(android.R.color.darker_gray))
        }
    }

    /**
     * 초기화
     */
    private fun reset(){
        min = 1
        max = 100
        lifeCount = 10

        //기회 횟수
        showLifeCount(lifeCount)

        //결과 텍스트
        resultText.text = ""
    }

    /**
     *기회 횟수보여주기
     * lifeCount: 횟수
     */
    private fun showLifeCount(lifeCount: Int){

        lifeCountText.text = "기회: $lifeCount 번"
    }

    /**
     * 숫자 비교
     * mInputNumber: 입력값
     */
    private fun numberCheck(mInputNumber: String){

        //기회 횟수 감소
        --lifeCount

        //변경된 기회 횟수 보여주기
        showLifeCount(lifeCount)

        var inputNumber = mInputNumber.toInt()

        //1. 입력값이 랜덤수보다 크면
        if(inputNumber > randomNumber){

            // 입력값을 최대값에 넣는다.
            max = inputNumber

            resultText.text = "$min ~ $max"
        }
        //2. 입력값이 랜덤수보다 작으면
        else if(inputNumber < randomNumber){

            //입력값을 최소값에 넣는다.
            min = inputNumber

            resultText.text = "$min ~ $max"
        }
        //3. 입력값이 랜덤수랑 같으면
        else if(inputNumber == randomNumber){

            toastMessage("정답입니다.")

            resultText.text = "정답: $inputNumber"
        }

        //기회 횟수가 없으면
        if(lifeCount == 0){
            toastMessage("게임 종료")

            reset()

            viewMode("end")
        }

        //입력 텍스트 초기화
        requestText.setText("")
    }

    /**
     * 메시지 알림
     *
     */
    private fun toastMessage(message: String){

        Toast.makeText(applicationContext, message, Toast.LENGTH_SHORT).show()
    }

}

2022.08.29 - [안드로이드] - [안드로이드 코틀린] 야구 게임 만드는 방법 part1 - 화면 구성

 

[안드로이드 코틀린] 야구 게임 만드는 방법 part1 - 화면 구성

이번 시간에는 야구 게임 화면 구성하는 방법을 알아보겠습니다. 야구 게임 규칙을 알려드리겠습니다. 1. 시작 버튼을 누르면 랜덤한 숫자 3개가 만들어집니다. 2. 사용자는 3개의 숫자를 입력하

aries574.tistory.com

2022.08.26 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰 TextView 클릭 시 효과(ripple) 주는 방법

 

[안드로이드 코틀린] 텍스트뷰 TextView 클릭 시 효과(ripple)주는 방법

이번 시간에는 클릭 시에 효과를 주는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 테마 themes.xml 3. 효과 drawable 4. 메인 화면 activity_main.xml 5. 메인 코드 MainActivity.kt 1. 실행 화..

aries574.tistory.com

2022.08.23 - [안드로이드] - [안드로이드 코틀린] 옵션메뉴(OptionMenu), 서브메뉴(Sub Menu) 만드는 방법

 

[안드로이드 코틀린] 옵션메뉴(OptionMenu), 서브메뉴(Sub Menu) 만드는 방법

이번 시간에는 점 3개 이미지로 익숙한 옵션 메뉴(OptionMenu)와 서브메뉴(Sub Menu) 만드는 방법을 알아보겠습니다. 목차 1. 실행 화면 2. 메뉴 Menu 3. 메인 코드 MainActivity.kt 1. 실행 화면 2. ..

aries574.tistory.com

 

반응형

관련글 더보기

댓글 영역