Basit Bir Android Tic-Tac-Toe Oyunu Geliştirme


Android Studio'da Java dilinde basit bir XOX (Tic-Tac-Toe) oyunu yapabiliriz. İşte adım adım bir rehber:

1. Yeni Proje Oluşturma


Android Studio'yu açın.

"Start a new Android Studio project" seçeneğini tıklayın.

"Empty Activity" şablonunu seçin ve "Next" butonuna tıklayın.

Projenize bir isim verin (örneğin, "XOXGame").

Dil olarak "Java" seçili olduğundan emin olun.

"Finish" butonuna tıklayarak projeyi oluşturun.

2. Arayüz Tasarımı (XML)


res/layout/activity_main.xml dosyasını açın ve aşağıdaki kodu ekleyerek basit bir XOX oyun tahtası oluşturun:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvStatus"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="X'in Sırası"
        android:textSize="24sp"
        android:layout_marginBottom="16dp"/>

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:rowCount="3"
        android:columnCount="3">

        <!-- Butonlar burada dinamik olarak oluşturulacak -->

    </GridLayout>

    <Button
        android:id="@+id/btnReset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Yeniden Başlat"
        android:layout_marginTop="16dp"/>

</LinearLayout>


3. Java Kodları


MainActivity.java dosyasını açın ve aşağıdaki kodu ekleyin:


package com.example.xoxgame;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    private boolean isXTurn = true; // X'in sırası mı?
    private String[][] board = new String[3][3]; // Oyun tahtası
    private TextView tvStatus;
    private GridLayout gridLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tvStatus = findViewById(R.id.tvStatus);
        gridLayout = findViewById(R.id.gridLayout);
        Button btnReset = findViewById(R.id.btnReset);

        // Oyun tahtasını başlat
        initializeBoard();

        // Yeniden başlat butonu
        btnReset.setOnClickListener(v -> resetGame());
    }

    private void initializeBoard() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                Button button = new Button(this);
                button.setLayoutParams(new GridLayout.LayoutParams());
                button.setWidth(200);
                button.setHeight(200);
                button.setTextSize(24);
                button.setOnClickListener(this::onCellClick);
                gridLayout.addView(button);
                board[i][j] = "";
            }
        }
    }

    private void onCellClick(View view) {
        Button button = (Button) view;
        int row = -1, col = -1;

        // Tıklanan butonun pozisyonunu bul
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (gridLayout.getChildAt(i * 3 + j) == button) {
                    row = i;
                    col = j;
                    break;
                }
            }
        }

        if (row == -1 || col == -1 || !board[row][col].isEmpty()) {
            return; // Geçersiz hamle veya hücre dolu
        }

        // Hücreyi işaretle
        board[row][col] = isXTurn ? "X" : "O";
        button.setText(board[row][col]);

        // Kazanan var mı kontrol et
        if (checkForWin()) {
            tvStatus.setText((isXTurn ? "X" : "O") + " Kazandı!");
            disableAllButtons();
            return;
        }

        // Berabere mi kontrol et
        if (isBoardFull()) {
            tvStatus.setText("Berabere!");
            return;
        }

        // Sırayı değiştir
        isXTurn = !isXTurn;
        tvStatus.setText((isXTurn ? "X" : "O") + "'in Sırası");
    }

    private boolean checkForWin() {
        // Satırları kontrol et
        for (int i = 0; i < 3; i++) {
            if (board[i][0].equals(board[i][1]) && board[i][0].equals(board[i][2]) && !board[i][0].isEmpty()) {
                return true;
            }
        }

        // Sütunları kontrol et
        for (int j = 0; j < 3; j++) {
            if (board[0][j].equals(board[1][j]) && board[0][j].equals(board[2][j]) && !board[0][j].isEmpty()) {
                return true;
            }
        }

        // Çaprazları kontrol et
        if (board[0][0].equals(board[1][1]) && board[0][0].equals(board[2][2]) && !board[0][0].isEmpty()) {
            return true;
        }
        if (board[0][2].equals(board[1][1]) && board[0][2].equals(board[2][0]) && !board[0][2].isEmpty()) {
            return true;
        }

        return false;
    }

    private boolean isBoardFull() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (board[i][j].isEmpty()) {
                    return false;
                }
            }
        }
        return true;
    }

    private void disableAllButtons() {
        for (int i = 0; i < gridLayout.getChildCount(); i++) {
            gridLayout.getChildAt(i).setEnabled(false);
        }
    }

    private void resetGame() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                board[i][j] = "";
                Button button = (Button) gridLayout.getChildAt(i * 3 + j);
                button.setText("");
                button.setEnabled(true);
            }
        }
        isXTurn = true;
        tvStatus.setText("X'in Sırası");
    }
}


4. Uygulamayı Çalıştırma


Android Studio'da "Run" butonuna tıklayın.


Bir emülatör seçin veya fiziksel bir cihaz bağlayın.


Uygulama çalıştığında, XOX oyununu oynamaya başlayabilirsiniz.
Açıklamalar

GridLayout kullanarak 3x3'lük bir oyun tahtası oluşturduk.


Her hücreye tıklandığında, sırasıyla "X" veya "O" işaretleri yerleştirilir.


Kazanan veya berabere durumunda oyun sona erer ve butonlar devre dışı bırakılır.


"Yeniden Başlat" butonu ile oyun sıfırlanır.

Bu basit XOX oyunu, Android Studio'da Java kullanarak nasıl bir oyun yapabileceğinizi gösterir. Daha gelişmiş özellikler ekleyerek oyunu zenginleştirebilirsiniz. 

İyi kodlamalar! 🚀