상세 컨텐츠

본문 제목

[안드로이드 코틀린] 같은 그림 찾기 게임 만드는 방법 part3 - 클릭&뒤집기

안드로이드

by aries574 2022. 8. 9. 15:33

본문


이번 시간에는 같은 그림 찾기 part3 클릭하면 랜덤한 이미지를 보여주는 방법을 알아보겠습니다.

이전 포스팅은 아래 링크를 들어가시면 됩니다.

2022.08.08 - [안드로이드] - [안드로이드 코틀린] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기

 

[안드로이드 코틀린] 같은 그림 찾기 게임 만드는 방법 part2 - 이미지 섞기& 보여주기

이번 시간에는 같은 그림 찾기 part2 이미지 섞기와 섞은 이미지를 보여주는 방법을 알아보겠습니다. 화면 구성은 아래 링크를 들어가시면 됩니다. 2022.04.02 - [안드로이드] - [안드로이드] 같은 그

aries574.tistory.com


목차

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


1. 실행 화면

 

 

2. 메인 코드 MainActivity.kt

- 설명 -

1. buttons[index]?.setImageResource(R.drawable.question)

  처음에는 기본 이미지로 보여준다.

2. if(card.isFaceUp)

  카드 뒤집힘 유무체크해서 다시 뒤집는 거 방지

3. cards[positin].isFaceUp = !card.isFaceUp

  이미지 클릭 후 반대의 값을 넣는다.

4. buttons[position]?.setImageResource(card.imageId)

  뒤집었다면 랜덤 이미지를 보여준다. 

class MainActivity : AppCompatActivity(), View.OnClickListener{

    //버튼 리스트
    private val buttons: Array<ImageButton?> = arrayOfNulls<ImageButton>(8)

    //이미지 리스트
    private lateinit var imageList: ArrayList<Int>

    //카드 리스트
    private lateinit var cards: ArrayList<MemoryCard>

    //결과 텍스트
    private lateinit var resultText: TextView

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

        //초기화
        resultText = findViewById(R.id.result_text)
        val resetBtn: Button = findViewById(R.id.reset_btn)
        resetBtn.setOnClickListener {
            //셋팅
            init()
        }

        //셋팅
        init()

    }//onCreate

    //셋팅 함수
    private fun init(){

        //이미지 리스트 초기화
        imageList = ArrayList()

        //카드 리스트 초기화
        cards = ArrayList()

        //리스트에 데이터 등록
        imageList.add(R.drawable.dog)
        imageList.add(R.drawable.pig)
        imageList.add(R.drawable.rabbit)
        imageList.add(R.drawable.cat)
        imageList.add(R.drawable.dog)
        imageList.add(R.drawable.pig)
        imageList.add(R.drawable.rabbit)
        imageList.add(R.drawable.cat)

        //순서 섞기
        imageList.shuffle()

        for((index, item) in buttons.withIndex()){

            //버튼 아이디
            val buttonID = "imageBtn${index}"

            //리소스 아이디
            val resource: Int = resources.getIdentifier(buttonID, "id", packageName)

            //버튼 초기화
            buttons[index] = findViewById(resource)

            //각 버튼에 클릭 이벤트 적용
            buttons[index]?.setOnClickListener(this)

            //카드 리스트에 데이터 담기
            cards.add(MemoryCard(imageList[index], false, false))

            //버튼에 기본 이미지 변경
            buttons[index]?.setImageResource(R.drawable.question)
        }
    }

    //클릭 이벤트
    override fun onClick(view: View?) {

        //view id 가져오기
        val id: Int? = view?.id

        //위치 변수
        var position: Int = 0

        when(id){
            R.id.imageBtn0 -> position = 0
            R.id.imageBtn1 -> position = 1
            R.id.imageBtn2 -> position = 2
            R.id.imageBtn3 -> position = 3
            R.id.imageBtn4 -> position = 4
            R.id.imageBtn5 -> position = 5
            R.id.imageBtn6 -> position = 6
            R.id.imageBtn7 -> position = 7
        }

        //업데이트 모델
        updateModel(position)

        //업데이트 뷰
        updateView(position)
    }

    private fun updateModel(positin: Int){

        var card: MemoryCard = cards[positin]

        //나중에 카드 비교 할 때 뒤집고 다시 클릭하는거 방지
        if(card.isFaceUp){
            Toast.makeText(this, "이미 뒤집었음", Toast.LENGTH_SHORT).show()
            return
        }

        //반대의 값을 넣는다 앞면 -> 뒷면, 뒷면 -> 앞면
        cards[positin].isFaceUp = !card.isFaceUp
    }

    private fun updateView(position: Int){

        var card: MemoryCard = cards[position]

        //뒤집었다면 랜덤 이미지로 보여준다.
        if(card.isFaceUp){
            buttons[position]?.setImageResource(card.imageId)
        }else{
            //기본 이미지
            buttons[position]?.setImageResource(R.drawable.question)
        }
    }
}

 

반응형

관련글 더보기

댓글 영역