brunch

You can make anything
by writing

C.S.Lewis

by 서준수 Feb 19. 2018

국가 수도 맞추기 앱 만들기 #03

코틀린으로 안드로이드 앱 개발하기

국가 수도 맞추기 앱 만들기 #03


GitHub : https://github.com/MyStoryG/CapitalQuiz


 지난번에는 prev_button, next_button 시에 updateQuestion()이 실행되도록 하였습니다.

updateQuestion()은 onCreate() 시에도 실행됩니다. updateQuestion() 내부에는 아래와 같이 세 개의 함수가 존재하며 각 함수의 역할은 다음과 같습니다.                    


showQuestion() : 문제와 국가 정보를 표기

setQuestionNumber() : 보기에 표시될 수도 정보 생성

setAnswerButtonText() : 생성된 수도 정보를 버튼에 표시 



showQuestion()은 제일 처음 시간에 살펴봤던 함수이므로 넘어가겠습니다.


 setQuestionNumber()는 list에 네 개의 수도 정보를 담는 역할을 합니다. 이때에 랜덤으로 네 개의 수도 정보를 담고 그 중 첫 번째를 문제의 국가 정보에 해당하는 수도 정보로 교체합니다. 즉, 정답을 하나 심는 과정입니다. 그리고 셔플 하여 섞어줍니다. 중복되지 않도록 중복처리도 했습니다.


여기서 list를 복습할 수 있습니다.


Java 


 private List<Integer> mAnswer = new ArrayList<Integer>();



코틀린


 private val mAnswer = mutableListOf<Int>() 



 updateQuestion()을 통해서 setQuestionNumber()가 호출될 때마다 add 되므로 mutableListOf를 사용하였습니다.                    


 mAnswer.clear()

 mAnswer.add(0, -1)

 mAnswer.add(1, -1)

 mAnswer.add(2, -1)

 mAnswer.add(3, -1) 



 이렇게 완성된 보기는 버튼에 다음과 같이 표시해줍니다.                    


    private fun setAnswerButtonText() {

        answer_one.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(0)].capital))

        answer_two.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(1)].capital))

        answer_three.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(2)].capital))

        answer_four.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(3)].capital))

    } 



 버튼을 눌렀을 때 표시된 정보와 문제의 국가 정보에 해당하는 수도가 일치하면 정답이라는 토스트 메시지를 보여줍니다. 틀리면 오답이라는 토스트 메시지를 보여줍니다. 다음과 같이 각 버튼에서 조건을 체크하여 어떤 토스트를 보여줄지 정합니다.

mCountryList.mQuestions[mCurrentIndex].capital는 정답이 되는 수도 정보이고 mCountryList.mQuestions[mAnswer.get(0)].capital는 첫번째 보기에 해당하는 수도 정보입니다.

mAnswer.get(1), mAnswer.get(2), mAnswer.get(3)은 각각 두 번째, 세 번째, 네 번째 보기에 해당하는 수도 정보가 되겠죠.                    


        answer_one.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(0)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        }


        answer_two.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(1)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        }


        answer_three.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(2)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        }


        answer_four.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(3)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        } 



 이렇게 보기 정보를 생성하고 보기 버튼을 눌렀을 때 정답인지 오답인지 표기하는 기능까지 추가되어 앱이 완성되었습니다.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari