이번 시간에는 마지막으로 기능 구현을 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.08.30 - [안드로이드] - [안드로이드 코틀린] 야구 게임 만드는 방법 part2 - 랜덤 숫자 생성
- 설명 -
1. viewMode(mode: String)
- 화면 구조 함수
- 버튼 활성화 설정 및 색상 변경
2. reset()
- 기회 횟수, 답변, 결과 목록 초기화
3. showResult(inputNumber: String)
- 결과 보여주는 함수
- Strike 3개면 성공
- lifeCount 0이면 실패
- 그 외는 계속 진행
4. numberCheck()
- 입력 숫자
비교
함수
5. toastMessage(message: String)
- 알림 함수
class MainActivity : AppCompatActivity() {
lateinit var requestText: EditText //입력 텍스트
lateinit var responseText: TextView //정답 체크
lateinit var resultText: TextView //결과 모음
lateinit var lifeCountText: TextView // 기회 횟수
lateinit var startBtn: Button
lateinit var answerBtn: Button
lateinit var resetBtn: Button
//랜덤 숫자 배열
private val comNumbers: Array<Int?> = arrayOfNulls<Int>(3)
//사용자 입력 배열
private val userNumbers: Array<Int?> = arrayOfNulls<Int>(3)
//기회 횟수
private var lifeCount: Int = 10
//스트라이크(위치랑 숫자 둘 다 맞춤)
var strike: Int = 0
//볼(숫자만 맞춤)
var ball: Int = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//입력된 숫자가 보여지는 텍스트
requestText = findViewById(R.id.request_text)
//정답이 맞는지 보여주는 텍스트
responseText = findViewById(R.id.response_text)
//기회 횟수
lifeCountText = findViewById(R.id.life_count_text)
//결과 모음
resultText = findViewById(R.id.result_text)
//버튼
startBtn = findViewById(R.id.start_btn)
answerBtn = findViewById(R.id.answer_btn)
resetBtn = findViewById(R.id.reset_btn)
//쉬는 중
viewMode("end")
//시작 버튼
startBtn.setOnClickListener {
//랜덤 숫자 생성
randomNumber()
toastMessage("게임 시작")
viewMode("start")
}
//정답 버튼
answerBtn.setOnClickListener {
//숫자 비교
numberCheck()
}
//초기화 버튼
resetBtn.setOnClickListener {
toastMessage("초기화")
viewMode("end")
//초기화
reset()
}
}//onCreate
/**
* 랜덤 숫자 생성
*/
private fun randomNumber() {
//중복 방지 위한 HashSet
val set: HashSet<Int> = HashSet()
//set 담는 List
val list: ArrayList<Int> = ArrayList()
//숫자 3개 담을 때까지 반복
while (set.size < 3){
//랜덤 숫자 1 ~ 9 생성
val randomValue = Random.nextInt(8) + 1
//담기
set.add(randomValue)
}
//list 담기
list.addAll(set)
//순서 섞기
list.shuffle()
//배열에 숫자 담기
for((index, number: Int) in list.withIndex()){
comNumbers[index] = number
}
}
/**
* 숫자 비교
*/
private fun numberCheck(){
//기회 횟수 감소
--lifeCount
lifeCountText.text = "기회 $lifeCount 번"
//입력값
val inputNumber: String = requestText.text.toString()
//숫자 3개 입력 체크
if(inputNumber.length == 3){
//사용자가 입력한 숫자 배열에 담기
userNumbers[0] = inputNumber.substring(0,1).toInt()
userNumbers[1] = inputNumber.substring(1,2).toInt()
userNumbers[2] = inputNumber.substring(2,3).toInt()
//랜덤값과 입력값 비교
for(num: Int in 0..2){
for(num2: Int in 0..2){
//랜덤 숫자와 입력 숫자가 같다면
if(comNumbers[num] == userNumbers[num2]){
//위치까지 맞다면
if(num == num2){
strike++
}else{ //위치까진 아님
ball++
}
}
}//내부 For
}//외부 For
//1. 숫자 다 맞음
if(strike == 3){
toastMessage("성공")
//답변
responseText.text = "정답: ${comNumbers[0]}, ${comNumbers[1]}, ${comNumbers[2]}"
}
else if(lifeCount == 0){ //2. 기회 횟수 없음
toastMessage("실패")
//답변
responseText.text = "정답: ${comNumbers[0]}, ${comNumbers[1]}, ${comNumbers[2]}"
}
else{ //3. 계속 진행
responseText.text = "Strike: $strike , Ball: $ball"
//목록
showResult(inputNumber)
}
//초기화
requestText.setText("")
strike = 0
ball = 0
}else{ //숫자 3개 입력 안되었다면
toastMessage("숫자 3개를 입력해주세요.")
}
}
/**
* 결과 보여주기
* inputNumber: 입력값
*/
private fun showResult(inputNumber: String){
//결과
val result = "Strike: $strike, Ball: $ball"
//결과 목록에 추가
resultText.append("$inputNumber : $result \n")
}
/**
* 초기화
*/
private fun reset(){
lifeCount = 10
lifeCountText.text = "기회: $lifeCount 번"
responseText.text = "" //답변
resultText.text = "" //결과 목록
}
/**
* 화면 구조
* mode: 타입(start:시작, end: 쉬는중)
*/
private fun viewMode(mode: String){
//게임중
if(mode == "start"){
//활성화 설정
startBtn.isEnabled = false //시작버튼
answerBtn.isEnabled = true //정답 버튼
resetBtn.isEnabled = true //초기화 버튼
requestText.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 //시작버튼
answerBtn.isEnabled = false //정답 버튼
resetBtn.isEnabled = false //초기화 버튼
requestText.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))
}
}
/**
* 메시지 알림
* message: 메시지
*/
private fun toastMessage(message: String){
Toast.makeText(applicationContext, message, Toast.LENGTH_SHORT).show()
}
}
2022.08.26 - [안드로이드] - [안드로이드 코틀린] 텍스트뷰 TextView 클릭 시 효과(ripple)주는 방법
2022.08.24 - [안드로이드] - [안드로이드 코틀린 ] 컨텍스트메뉴(ContextMenu) 바탕화면 변경하는 방법
2022.08.18 - [안드로이드] - [안드로이드 코틀린] 내가 원하는 글씨체 폰트(Font) 적용하는 방법
[안드로이드 코틀린] SeekBar RGB 글씨 색상 조절 만드는 방법 (0) | 2022.09.02 |
---|---|
[안드로이드 코틀린] 숫자 맞추기 게임 Up&Down 만드는 방법 (0) | 2022.09.01 |
[안드로이드 코틀린] 야구 게임 만드는 방법 part2 - 랜덤 숫자 생성 (0) | 2022.08.30 |
[안드로이드 코틀린] 야구 게임 만드는 방법 part1 - 화면 구성 (0) | 2022.08.29 |
[안드로이드 코틀린] 텍스트뷰 TextView 클릭 시 효과(ripple)주는 방법 (0) | 2022.08.26 |
댓글 영역