Game Tic-Tac-Toe dengan C++

Game Tic-Tac-Toe dengan C++

Berikut adalah contoh implementasi game Tic-Tac-Toe menggunakan bahasa C++. Program ini mendukung dua pemain yang bermain secara bergantian di terminal.

Kode Lengkap

#include <iostream>
#include <vector>
using namespace std;

// Inisialisasi papan permainan
vector<vector<char>> papan = {
    {'1', '2', '3'},
    {'4', '5', '6'},
    {'7', '8', '9'}
};

// Menampilkan papan permainan
void tampilkanPapan() {
    cout << "\n";
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << " " << papan[i][j];
            if (j < 2) cout << " |";
        }
        cout << "\n";
        if (i < 2) cout << "---+---+---\n";
    }
    cout << "\n";
}

// Mengecek apakah ada pemenang
bool cekPemenang(char simbol) {
    // Cek baris
    for (int i = 0; i < 3; i++) {
        if (papan[i][0] == simbol && papan[i][1] == simbol && papan[i][2] == simbol)
            return true;
    }

    // Cek kolom
    for (int i = 0; i < 3; i++) {
        if (papan[0][i] == simbol && papan[1][i] == simbol && papan[2][i] == simbol)
            return true;
    }

    // Cek diagonal
    if ((papan[0][0] == simbol && papan[1][1] == simbol && papan[2][2] == simbol) ||
        (papan[0][2] == simbol && papan[1][1] == simbol && papan[2][0] == simbol)) {
        return true;
    }

    return false;
}

// Mengecek apakah papan penuh
bool papanPenuh() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (papan[i][j] != 'X' && papan[i][j] != 'O') {
                return false;
            }
        }
    }
    return true;
}

// Memproses giliran pemain
bool prosesGiliran(char simbol) {
    int pilihan;
    cout << "Pemain " << simbol << ", masukkan nomor posisi: ";
    cin >> pilihan;

    // Cek validitas input
    if (pilihan < 1 || pilihan > 9) {
        cout << "Posisi tidak valid! Coba lagi.\n";
        return false;
    }

    // Tentukan posisi di papan
    int baris = (pilihan - 1) / 3;
    int kolom = (pilihan - 1) % 3;

    // Cek apakah posisi sudah diisi
    if (papan[baris][kolom] == 'X' || papan[baris][kolom] == 'O') {
        cout << "Posisi sudah diisi! Coba lagi.\n";
        return false;
    }

    // Tandai posisi dengan simbol pemain
    papan[baris][kolom] = simbol;
    return true;
}

// Program utama
int main() {
    char simbolSaatIni = 'X'; // Pemain pertama selalu 'X'
    bool permainanBerjalan = true;

    cout << "Selamat datang di Tic-Tac-Toe!\n";
    tampilkanPapan();

    while (permainanBerjalan) {
        if (prosesGiliran(simbolSaatIni)) {
            tampilkanPapan();

            // Cek apakah pemain saat ini menang
            if (cekPemenang(simbolSaatIni)) {
                cout << "Pemain " << simbolSaatIni << " menang! Selamat!\n";
                permainanBerjalan = false;
            } else if (papanPenuh()) {
                // Jika papan penuh dan tidak ada pemenang, seri
                cout << "Permainan berakhir seri!\n";
                permainanBerjalan = false;
            } else {
                // Ganti giliran pemain
                simbolSaatIni = (simbolSaatIni == 'X') ? 'O' : 'X';
            }
        }
    }

    return 0;
}

Penjelasan

  1. Struktur Papan
    Papan permainan disimpan dalam vector 2D berisi angka 1-9 yang menunjukkan posisi awal.
  2. Fungsi tampilkanPapan()
    Menampilkan papan dalam format grid yang mudah dibaca pemain.
  3. Fungsi cekPemenang()
    Mengecek apakah ada baris, kolom, atau diagonal yang memiliki simbol yang sama.
  4. Fungsi papanPenuh()
    Mengecek apakah semua kotak pada papan telah diisi.
  5. Fungsi prosesGiliran()
    Memastikan input pemain valid dan memperbarui papan dengan simbol pemain (X atau O).
  6. Program Utama
    Program berjalan dalam loop hingga ada pemenang atau papan penuh. Pemain bergantian memasukkan input.

Contoh Output

Selamat datang di Tic-Tac-Toe!

 1 | 2 | 3
---+---+---
 4 | 5 | 6
---+---+---
 7 | 8 | 9

Pemain X, masukkan nomor posisi: 1

 X | 2 | 3
---+---+---
 4 | 5 | 6
---+---+---
 7 | 8 | 9

Pemain O, masukkan nomor posisi: 5

 X | 2 | 3
---+---+---
 4 | O | 6
---+---+---
 7 | 8 | 9

... (Berlanjut hingga ada pemenang atau seri)

Fitur Tambahan (Opsional)

  1. AI Lawan: Tambahkan algoritma untuk bermain melawan komputer.
  2. Validasi Input yang Lebih Baik: Tangani input yang bukan angka.
  3. Skor Pemain: Tambahkan fitur untuk mencatat skor jika permainan diulang.

Jika ingin mengembangkan lebih lanjut atau ada pertanyaan, silakan beri tahu! 😊

Leave a Reply

Your email address will not be published. Required fields are marked *