Berikut adalah contoh program game puzzle lengkap menggunakan bahasa pemrograman C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
// Fungsi untuk mencetak papan permainan
void cetakPapan(char papan[3][3]) {
cout << "-------------" << endl;
for (int i = 0; i < 3; i++) {
cout << "| ";
for (int j = 0; j < 3; j++) {
cout << papan[i][j] << " | ";
}
cout << endl;
cout << "-------------" << endl;
}
}
// Fungsi untuk mengisi papan permainan dengan karakter kosong
void inisialisasiPapan(char papan[3][3]) {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
papan[i][j] = ' ';
}
}
}
// Fungsi untuk memeriksa apakah ada pemenang
bool cekPemenang(char papan[3][3], 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 j = 0; j < 3; j++) {
if (papan[0][j] == simbol && papan[1][j] == simbol && papan[2][j] == simbol) {
return true;
}
}
// Cek diagonal
if (papan[0][0] == simbol && papan[1][1] == simbol && papan[2][2] == simbol) {
return true;
}
if (papan[0][2] == simbol && papan[1][1] == simbol && papan[2][0] == simbol) {
return true;
}
return false;
}
// Fungsi untuk melakukan langkah pemain
void langkahPemain(char papan[3][3]) {
int baris, kolom;
cout << "Masukkan baris (0-2): ";
cin >> baris;
cout << "Masukkan kolom (0-2): ";
cin >> kolom;
// Validasi langkah pemain
while (papan[baris][kolom] != ' ') {
cout << "Langkah tidak valid. Masukkan baris (0-2): ";
cin >> baris;
cout << "Masukkan kolom (0-2): ";
cin >> kolom;
}
papan[baris][kolom] = 'X';
}
// Fungsi untuk melakukan langkah komputer
void langkahKomputer(char papan[3][3]) {
int baris, kolom;
// Generate langkah komputer secara acak
do {
baris = rand() % 3;
kolom = rand() % 3;
} while (papan[baris][kolom] != ' ');
papan[baris][kolom] = 'O';
}
// Fungsi utama
int main() {
char papan[3][3];
char giliran = 'X';
bool selesai = false;
// Inisialisasi papan permainan
inisialisasiPapan(papan);
// Loop permainan
while (!selesai) {
cetakPapan(papan);
if (giliran == 'X') {
langkahPemain(papan);
} else {
langkahKomputer(papan);
}
// Cek apakah ada pemenang
if (cekPemenang(papan, giliran)) {
cetakPapan(papan);
cout << "Pemain " << giliran << " menang!" << endl;
selesai = true;
} else {
// Cek apakah permainan seri
bool seri = true;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (papan[i][j] == ' ') {
seri = false;
break;
}
}
if (!seri) {
break;
}
}
if (seri) {
cetakPapan(papan);
cout << "Permainan seri!" << endl;
selesai = true;
}
}
// Ganti giliran
if (giliran == 'X') {
giliran = 'O';
} else {
giliran = 'X';
}
}
return 0;
}
C++Program di atas adalah contoh program game puzzle lengkap menggunakan bahasa pemrograman C++. Program ini mengimplementasikan permainan puzzle Tic-Tac-Toe antara pemain dan komputer. Pemain menggunakan simbol ‘X’ dan komputer menggunakan simbol ‘O’. Papan permainan berukuran 3×3 dan pemain harus mencoba menempatkan simbol mereka secara berurutan di baris, kolom, atau diagonal untuk memenangkan permainan.
Program ini menggunakan beberapa fungsi untuk mengatur logika permainan, seperti fungsi cetakPapan
untuk mencetak papan permainan, fungsi inisialisasiPapan
untuk mengisi papan permainan dengan karakter kosong, fungsi cekPemenang
untuk memeriksa apakah ada pemenang, fungsi langkahPemain
untuk melakukan langkah pemain, dan fungsi langkahKomputer
untuk melakukan langkah komputer.
Program ini juga menggunakan loop permainan yang berjalan sampai ada pemenang atau permainan seri. Setiap langkah pemain atau komputer akan dicetak papan permainan dan dilakukan pengecekan apakah ada pemenang atau permainan seri. Jika ada pemenang, program akan mencetak pesan pemenang dan menghentikan permainan. Jika permainan seri, program akan mencetak pesan permainan seri dan menghentikan permainan.
Program ini menggunakan library <iostream>
untuk input/output, <cstdlib>
untuk fungsi rand()
, dan <ctime>
untuk menginisialisasi seed untuk fungsi rand()
.
Silakan mencoba menjalankan program ini dan bermain game puzzle Tic-Tac-Toe melawan komputer!
Contoh lain
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#define atas 1
#define kiri 2
#define bawah 3
#define kanan 4
#define keyUp 0x048
#define keyDown 0x050
#define keyLeft 0x04b
#define keyRight 0x04d
#define true 1
#define false 0
#define easy 10
#define medium 20
#define hard 30
#define caption " ----------------\n// GAME PUZZLE //\n----------------\n"
#define fieldSize 4
char field[fieldSize][fieldSize];
char field2[fieldSize][fieldSize];
unsigned int seed;
int x, y;
int acak (int i);
void initField (int movement);
void move (int arah);
void generateOutput ();
int cekUrut ();
int
acak (int i)
{
int a;
seed += 5;
srand (seed);
a = (rand () % i) + 1;
return (a);
}
void
initField (int movement)
{
int arah, arahOld = -1, nPindah = movement, xOld, yOld;
int c = 1, i, j;
char temp;
srand (time (NULL));
seed = rand ();
x = y = (fieldSize - 1);
for (i = 0; i <= (fieldSize - 1); i++)
{
for (j = 0; j <= (fieldSize - 1); j++)
{
field[i][j] = field2[i][j] = c;
c++;
}
}
field[fieldSize - 1][fieldSize - 1] = field2[fieldSize - 1][fieldSize - 1] =
' ';
c = 0;
while (c != nPindah)
{
xOld = x;
yOld = y;
arah = acak (4);
if (arah != 0)
{
if (c != 0)
{
if ((arah + 2) % 4 == arahOld)
{
continue;
}
}
switch (arah)
{
case atas:
if (y > 0)
y--;
else
continue;
break;
case kiri:
if (x > 0)
x--;
else
continue;
break;
case kanan:
if (x < fieldSize - 1)
x++;
else
continue;
break;
case bawah:
if (y < fieldSize - 1)
y++;
else
continue;
break;
default:
break;
}
if (x >= 0 && y >= 0 && x <= (fieldSize - 1)
&& y <= (fieldSize - 1))
{
temp = field[y][x];
field[y][x] = field[yOld][xOld];
field[yOld][xOld] = temp;
c++;
arahOld = arah % 4;
}
else
{
x = xOld;
y = yOld;
}
}
}
}
void
move (int arah)
{
int xOld, yOld;
char temp;
xOld = x;
yOld = y;
switch (arah)
{
case atas:
if (y > 0)
y--;
break;
case kiri:
if (x > 0)
x--;
break;
case kanan:
if (x < (fieldSize - 1))
x++;
break;
case bawah:
if (y < (fieldSize - 1))
y++;
break;
default:
break;
}
if (x >= 0 && y >= 0 && x <= (fieldSize - 1) && y <= (fieldSize - 1))
{
temp = field[y][x];
field[y][x] = field[yOld][xOld];
field[yOld][xOld] = temp;
}
else
{
x = xOld;
y = yOld;
}
generateOutput ();
}
void
generateOutput ()
{
int i, j, k;
clrscr ();
puts (caption);
puts ("Tekan ESC untuk keluar / reset permainan...");
for (k = 1; k <= fieldSize; k++)
printf ("+----");
puts ("+");
for (i = 0; i <= (fieldSize - 1); i++)
{
for (j = 0; j <= (fieldSize - 1); j++)
{
if (i == y && j == x)
{
printf ("| %c ", field[i][j]);
}
else
{
printf ("| %2i ", field[i][j]);
}
}
puts ("|");
for (k = 1; k <= fieldSize; k++)
printf ("+----");
puts ("+");
}
}
int
cekUrut ()
{
int c, d;
int match = true;
for (c = 0; c <= (fieldSize - 1); c++)
{
for (d = 0; d <= (fieldSize - 1); d++)
{
if (field[c][d] != field2[c][d])
{
if (match == true)
{
match = false;
}
}
}
}
return (match);
}
main ()
{
int i, j, k, level;
char key;
system ("cls");
puts (caption);
puts ("Mainkan puzzle dan menyusunnya menjadi urutan yang benar...");
puts ("Geser kotak kosong sehingga menjadi berurutan sbg berikut : \n");
initField (0);
for (k = 1; k <= fieldSize; k++)
printf ("+----");
puts ("+");
for (i = 0; i <= (fieldSize - 1); i++)
{
for (j = 0; j <= (fieldSize - 1); j++)
{
if (i == y && j == x)
{
printf ("| %c ", field2[i][j]);
}
else
{
printf ("| %2i ", field2[i][j]);
}
}
puts ("|");
for (k = 1; k <= fieldSize; k++)
printf ("+----");
puts ("+");
}
puts ("Gunakan tombol panah untuk menggeser kotak kosong...\n");
puts ("Tekan sembarang tombol untuk melanjutkan...");
getch ();
for (;;)
{
system ("cls");
puts ("Level : ");
puts ("\t1. Easy");
puts ("\t2. Medium");
puts ("\t3. Hard");
printf ("Pilih Level yang akan dimainkan : ");
scanf ("%i", &level);
switch (level)
{
case 1:
initField (easy);
break;
case 2:
initField (medium);
break;
case 3:
initField (hard);
break;
default:
puts ("Level salah!!");
getch ();
continue;
}
system ("cls");
generateOutput ();
while ((key = getch ()) != 27)
{
switch (key)
{
case keyUp:
move (atas);
break;
case keyDown:
move (bawah);
break;
case keyLeft:
move (kiri);
break;
case keyRight:
move (kanan);
break;
}
if (cekUrut () == true)
{
puts ("\nANDA MENANG!!!");
break;
}
}
if (key == 27)
{
printf
("Apakah anda ingin keluar ?\n['y' utk keluar / 't' utk reset] : ");
if (toupper (getchar ()) == 'Y')
break;
else
continue;
}
else
{
printf ("Apakah anda ingin main lagi ? [y/t] : ");
if (toupper (getchar ()) == 'T')
{
puts ("\nTerima Kasih Telah Mencoba!!!");
getch ();
break;
}
else
continue;
}
}
}
C++