본문 바로가기
Java

[Android] 숫자 찾기 게임

by 엘딘 2022. 4. 6.

동적버튼 기능을 활용한 숫자찾기 게임(찾을시 BINGO출력!)

https://d-footprint.tistory.com/49

 

activity_main
<Spinner
        android:layout_width="145dp"
        android:layout_height="52dp"
        android:id="@+id/spinner"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginLeft="36dp"
        android:layout_marginStart="36dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="40dp"/>

<Button
        android:text="count"
        android:layout_width="131dp"
        android:layout_height="52dp"
        android:id="@+id/count"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="36dp"
        android:layout_marginRight="36dp"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="40dp"/>

<LinearLayout
        android:id="@+id/linerLayout"
        android:layout_width="319dp"
        android:layout_height="400dp"
        android:orientation="vertical"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/reset"
        android:layout_marginTop="44dp">
</LinearLayout>

<Button
        android:text="reset"
        android:layout_width="316dp"
        android:layout_height="53dp" android:id="@+id/reset"
        app:layout_constraintTop_toBottomOf="@+id/spinner"
        android:layout_marginTop="28dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.492"/>

 

item_spinner

spinner item 생성

<?xml version="1.0" encoding="utf-8"?>
<TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tvItemSpinner"
        android:layout_width="match_parent"
        android:layout_height="45dp"
        android:paddingTop="10dp"
        android:paddingStart="30dp"
        android:textColor="@android:color/black"
        android:textSize="15sp"
        android:paddingLeft="30dp"/>

 

 

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

        // 스피너 설정
        setupSpinner()

        // count 버튼(spinner에서 선택한 숫자만큼 숫자버튼 생성)
        val countBtn = findViewById<Button>(R.id.count)
        countBtn.setOnClickListener{
            val spinner = findViewById<Spinner>(R.id.spinner)
            println("------------->" + spinner.selectedItem.toString())
            setBlockLayout(spinner.selectedItem.toString().toInt())
        }

        // reset 버튼
        val resetBtn = findViewById<Button>(R.id.reset)
        resetBtn.setOnClickListener{
            val linerLayout = findViewById<LinearLayout>(R.id.linerLayout)
            linerLayout.removeAllViews()
            setupSpinner()
        }
    }

    fun setBlockLayout(count : Int){
        val linerLayout = findViewById<LinearLayout>(R.id.linerLayout)
        linerLayout.removeAllViews()

        val randomNumber:Int = (1..count).random()
        println("randomNumber:$randomNumber")
        var childLayout:LinearLayout? = null

        for(i in 0 until count){

            // 버튼을 3개씩 배치하기 위해서
            if(i % 3 == 0) {
                childLayout = LinearLayout(this)
                childLayout.orientation = LinearLayout.HORIZONTAL
                val layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,  100)
                childLayout.layoutParams = layoutParams
                childLayout.setBackgroundColor(Color.parseColor("#ffffff"))
            }

            // 동적버튼(버튼 개수에 따른 나열)
            val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,  LinearLayout.LayoutParams.MATCH_PARENT)
            btnParams.weight = 1.0f
            btnParams.setMargins(10, 10, 10, 10)
            val normalBtn = Button(this).apply {
                //width = getDPI(100)
                //height = getDPI(100)
                text = (i + 1).toString()
                setBackgroundColor(Color.parseColor("#ff0000"))
                setTextColor(Color.parseColor("#ffffff"))
                textSize = 24.0f
                layoutParams = btnParams
                id = i
                setOnClickListener {
                    println("${id+1}번의 아이디를 가진 버튼입니다.")

                    val btn = findViewById<Button>(id)
                    btn.isEnabled = false
                    if(randomNumber === (id + 1)){
                        btn.text = "Bingo!"
                        setTextColor(Color.parseColor("#0000ff"))
                        setBackgroundColor(Color.parseColor("#ffff00"))

                        AlertDialog.Builder(this@MainActivity)
                            .setTitle("축하합니다 짝짝짝")
                            .setMessage("${id + 1} 번입니다")
                            .setCancelable(false)
                            .setNeutralButton("닫기", DialogInterface.OnClickListener { dialog, which ->
                            }).show()
                    }
                    else{
                        btn.text = "safe"
                        background = ContextCompat.getDrawable(this.context, R.drawable.dummy_image_ok)
                    }
                }
            }
            normalBtn.background = ContextCompat.getDrawable(this, R.drawable.dummy_image)
            childLayout?.addView(normalBtn)

            if(i % 3 == 2 || i == (count - 1)) {
                // LinearLayout에 버튼 추가하기
                linerLayout.addView(childLayout)
            }
        }
    }

    // spinner에 배열의 값을 설정하는 함수
    private fun setupSpinner() {
        var countArr = arrayOf(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
        println(countArr.contentToString())
        // 어뎁터에 배열과 xml을 적용시킨다
        val adapter = ArrayAdapter(this, R.layout.item_spinner, countArr)

        // 마지막으로 실제 spinner에 적용
        val spinner = findViewById<Spinner>(R.id.spinner)
        spinner.adapter = adapter
    }

}

'Java' 카테고리의 다른 글

[Java] Casting  (0) 2022.04.10
[Java] Break  (0) 2022.04.08
[Java] ArrayList  (0) 2022.04.07
[Java] 배열  (0) 2022.02.11
[Java] 첫번째  (0) 2022.02.03

댓글