이번 시간에는 랜덤한 숫자를 발생시켜 숫자 맞추는 게임을 만들어 보겠습니다.
- 설명 -
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>
- 설명 -
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 - 화면 구성
2022.08.26 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰 TextView 클릭 시 효과(ripple) 주는 방법
2022.08.23 - [안드로이드] - [안드로이드 코틀린] 옵션메뉴(OptionMenu), 서브메뉴(Sub Menu) 만드는 방법
[안드로이드 코틀린] 애니메이션 적용해서 주사위 던지는 방법 (0) | 2022.09.05 |
---|---|
[안드로이드 코틀린] SeekBar RGB 글씨 색상 조절 만드는 방법 (0) | 2022.09.02 |
[안드로이드 코틀린] 야구 게임 만드는 방법 part3 - 기능 구현 (0) | 2022.08.31 |
[안드로이드 코틀린] 야구 게임 만드는 방법 part2 - 랜덤 숫자 생성 (0) | 2022.08.30 |
[안드로이드 코틀린] 야구 게임 만드는 방법 part1 - 화면 구성 (0) | 2022.08.29 |
댓글 영역