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
- Struktur Papan
Papan permainan disimpan dalam vector 2D berisi angka 1-9 yang menunjukkan posisi awal. - Fungsi
tampilkanPapan()
Menampilkan papan dalam format grid yang mudah dibaca pemain. - Fungsi
cekPemenang()
Mengecek apakah ada baris, kolom, atau diagonal yang memiliki simbol yang sama. - Fungsi
papanPenuh()
Mengecek apakah semua kotak pada papan telah diisi. - Fungsi
prosesGiliran()
Memastikan input pemain valid dan memperbarui papan dengan simbol pemain (X atau O). - 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)
- AI Lawan: Tambahkan algoritma untuk bermain melawan komputer.
- Validasi Input yang Lebih Baik: Tangani input yang bukan angka.
- Skor Pemain: Tambahkan fitur untuk mencatat skor jika permainan diulang.
Jika ingin mengembangkan lebih lanjut atau ada pertanyaan, silakan beri tahu! 😊
Leave a Reply