Como fazer um Jogo da Velha em Kotlin
Android Kotlin

Como fazer um Jogo da Velha em Kotlin





Nesse tutorial vou descrever Como fazer um Jogo da Velha em Kotlin assim você pode programar e se divertir um pouco com a linguagem.

Vou fazer nesse primeiro tutorial como criar um jogo da velha simples, uma pessoa contra outra e no próximo vou integrar o computador e assim podendo  fazer jogadas.

Primeiramente vamos criar um novo projeto vazio(Empty) para fazer nossas mudanças necessárias e assim nosso joga da velha funcionar.

Se você tiver problemas com a criação do novo projeto então veja o tutorial Como criar um projeto no Android Studio.

Então vamos modificar a nossa activity_main para que ela tenha um LinearLayout vertical com mais 3 linear LinearLayout contendo 3 botões cada, assim tendo nossos 9 quadrantes do jogo da velha.

activity_main

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="Jogo da Velha"
        android:textSize="30sp"
        android:textColor="#000000"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/layGame"/>
    <LinearLayout
        android:id="@+id/layGame"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
            <Button
                android:id="@+id/btn1"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
            <Button
                android:id="@+id/btn2"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
            <Button
                android:id="@+id/btn3"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
            <Button
                android:id="@+id/btn4"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
            <Button
                android:id="@+id/btn5"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
            <Button
                android:id="@+id/btn6"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:gravity="center">
            <Button
                android:id="@+id/btn7"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
            <Button
                android:id="@+id/btn8"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
            <Button
                android:id="@+id/btn9"
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:textSize="35sp"/>
        </LinearLayout>
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintTop_toBottomOf="@+id/layGame"
        app:layout_constraintBottom_toBottomOf="parent">
        <TextView
            android:id="@+id/tvResult"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:textSize="22sp"/>
        <Button
            android:id="@+id/btnRestart"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Reiniciar"/>
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>




Logo após ter feito o layout do nosso jogo vamos então trabalhar com a MainActivity e programar para que o nosso jogo funcione.

Vamos deixar nosso código assim como o seguinte.

MainActivity

class MainActivity : AppCompatActivity() {
    var jogador: Int = 1
    private var btnList = ArrayList<Button>()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        btnList = arrayListOf<Button>(btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9)
        btnRestart.visibility = View.GONE
        for(x in 0..btnList.size-1) {
            btnList[x].setOnClickListener {
                joga(it as Button)
            }
        }
        btnRestart.setOnClickListener {
            restart()
        }
    }
    private fun joga(btn: Button){
        if(jogador % 2 != 0) {
            btn.text = "X"
        }
        else{
            btn.text = "O"
        }
        btn.isClickable = false
        checkGame()
        ++jogador
    }
    private fun restart(){
        for(x in 0..btnList.size-1){
            btnList[x].text = ""
            btnList[x].isClickable = true
        }
        tvResult.text = ""
        jogador = 1
        btnRestart.visibility = View.GONE
    }
    private fun checkGame(){
        if(jogador == 9){
            tvResult.text = "Empate"
            btnRestart.visibility = View.VISIBLE
        }
        val numb = listOf<Int>(0,3,6)
        for(x in numb){
            if (btnList[x].text != "" && btnList[x].text == btnList[x+1].text && btnList[x+1].text == btnList[x + 2].text) {
                ganhador()
            }
        }
        for(x in 0..2){
            if(btnList[x].text != "" && btnList[x].text == btnList[x+3].text && btnList[x+3].text == btnList[x+6].text){
                ganhador()
            }
        }
        if ((btnList[0].text != "" && btnList[0].text == btnList[4].text && btnList[4].text == btnList[8].text)
            || (btnList[2].text != "" && btnList[2].text == btnList[4].text && btnList[4].text == btnList[6].text)) {
            ganhador()
        }
    }
    private fun ganhador(){
        if(jogador % 2 != 0){
            tvResult.text = "Ganhador: X"
        }
        else{
            tvResult.text = "Ganhador: O"
        }
        endGame()
        btnRestart.visibility = View.VISIBLE
    }
    private fun endGame(){
        for(x in 0..btnList.size-1){
            btnList[x].isClickable = false
        }
    }
}

Logo depois de modificar a MainActivity é só compilar e executar para jogar.

Você também pode clonar nosso repositório com o seguinte comando.

[[email protected] ~]$ git clone https://github.com/uware-com-br/JogoDaVelha

Enfim espero poder te ajudado com mais este tutorial sobre Como fazer um Jogo da Velha em Kotlin.





Parte 2 ->

Rodrigo Leutz
Desenvolvedor Web e Android ( Kotlin e Java )
https://uware.com.br