Contoh Program Game Puzzle C++

Contoh Program Game Puzzle C++

Berikut adalah contoh program game puzzle lengkap menggunakan bahasa pemrograman C++

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

C++
#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++

Leave a Reply

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