Cari Blog Ini

Sabtu, 28 Januari 2012

Game Tic Tac Toe Dengan C++

Game tic tac toe adalah game yang sering dimainkan oleh anak - anak bahkan sekarang telah di kembangkan menjadi game online. Berikut  adalah sebuah game tic tac toe yang saya dapat di google namun ada sedikit yang telah di edit agar lebih mudah di pahami. game ini menggunakan konsep struktur data dengan metode linked list. Ini sreenshootnya:
menyusul....


#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <stdlib.h>

struct tictact
{
int baris;
int kolom;
char hasil;
int jum;
tictact *prev;
tictact *next;
};

struct tictac1
{
int baris;
int kolom;
char nilai;
};

main()
{
char pemain1, pemain2;
char pilih;
int i = 0, j, k=0;
int maen, baris, kolom;
int vertikal[3] = {0,0,0}, horizontal[3] = {0,0,0};
static int vertikal1[3], horizontal1[3];
static int diagonal[3];
int menang;

struct tictact *awal, *tampung, *ujung, *data; //pointer bertype struct
struct tictac1 tc[9]={
{0,0,' '},{0,1,' '},{0,2,' '},
{1,0,' '},{1,1,' '},{1,2,' '},
{2,0,' '},{0,2,' '},{2,2,' '}
      };

        printf("+---+---+---+ \n");
printf("| 1 | 2 | 3 | \n");
printf("+---+---+---+ \n");
printf("| 4 | 5 | 6 | \n");
printf("+---+---+---+ \n");
printf("| 7 | 8 | 9 | \n");
printf("+---+---+---+ \n\n");
printf("Masukkan pilihan (x/o) = "); scanf("%c",&pilih);
if(pilih == 'x' || pilih=='X')
            {
pemain1 = 'X';
pemain2 = 'O';
}
    else if(pilih == 'o' || pilih=='O')
  {
pemain1 = 'O';
pemain2 = 'X';
}

         else if(pilih != 'x' || pilih != 'X' || pilih != 'o' || pilih != 'O')
      {
          return 0;
         }
  for(i=0;i<9;i++)
         {
          if(i%2 == 0)
            printf("Pemain 1 = ");
          else
                printf("Pemain 2 = "); scanf("%d", &maen);
                  maen -=1;
                  baris = maen/3;
                  kolom = maen%3;
            if(i==0)
                  {
                  awal = (struct tictact*)malloc(sizeof(struct tictact));
                      awal->baris = baris;
                  awal->kolom = kolom;
                        if(i%2==0)
                       {
tc[maen].nilai = pemain1;
awal->hasil=pemain1;
awal->jum=0;
                       }
                         else
                           {
tc[maen].nilai = pemain2;
awal->hasil=pemain2;
awal->jum=1;
}
awal->next = NULL;
awal->prev = NULL;
tampung = awal;
ujung = awal;
data = awal;
                  }

else

                  {
ujung = (struct tictact*)malloc(sizeof(struct tictact));
ujung->baris = baris;
ujung->kolom = kolom;
if(i%2==0)
                        {
tc[maen].nilai = pemain1;
ujung->hasil=pemain1;
ujung->jum=0;
}
else
                        {
        tc[maen].nilai = pemain2;
ujung->hasil=pemain2;
ujung->jum=1;
}
         ujung->next = NULL;
ujung->prev = tampung;
    tampung->next = ujung;
tampung = ujung;
      }


for(j=0;j<9;j++)
{
if(tc[j].nilai != ' ')
    {
    printf("| %c ", tc[j].nilai);
          }
            else
      printf("|   ", tc[i].nilai);
      if(j==2 || j==5 || j==8) printf("|\n");
    }
      tampung = awal;
      while(tampung!=NULL)
          {
          if(tampung->jum==0)
          {
          //Kondisi Ketika Horisontal sama X
if(tampung->kolom==0) vertikal[0]++;
else if(tampung->kolom==1) vertikal[1]++;
else if(tampung->kolom==2) vertikal[2]++;
}

//Kondisi Ketika Horisontal sama X
if((tampung->jum==0 && tampung->baris==0)) horizontal[0]++;
else if((tampung->jum==0 && tampung->baris==1)) horizontal[1]++;
else if((tampung->jum==0 && tampung->baris==2)) horizontal[2]++;

//Kondisi Ketika Vertikalnya sama O
if((tampung->jum==1 && tampung->kolom==0)) vertikal1[0]++;
else if((tampung->jum==1 && tampung->kolom==1)) vertikal1[1]++;
            else if((tampung->jum==1 && tampung->kolom==2)) vertikal1[2]++;

//Kondisi Ketika Horisontal sama O
if((tampung->hasil==1 && tampung->baris==0)) horizontal1[0]++;
else if((tampung->jum==1 && tampung->baris==1)) horizontal1[1]++;
else if((tampung->jum==1 && tampung->baris==2)) horizontal1[2]++;

if(tampung->jum==0)
            {
if((tampung->kolom==0) && (tampung->baris==0)) diagonal[1]++;
else if((tampung->kolom==1) && (tampung->baris==1)) diagonal[1]++;
else if((tampung->kolom==2) && (tampung->baris==2)) diagonal[1]++;
}
if(tampung->jum==0)
            {
  if((tampung->kolom==2) && (tampung->baris==0)) diagonal[2]++;
else if((tampung->kolom==1) && (tampung->baris==1)) diagonal[2]++;
else if((tampung->kolom==0) && (tampung->baris==2)) diagonal[2]++;
  }
tampung=tampung->next;
}

tampung=ujung;

for(k=0;k<3;k++)
            {

if(vertikal[k] == 3)
menang=1;
else vertikal[k] = 0;
if(vertikal1[k] == 3)
menang=1;
else vertikal1[k] = 0;
if(horizontal[k] == 3)
menang=1;
else horizontal[k] = 0;

            if(horizontal1[k] == 3)
menang=1;
else horizontal1[k] = 0;
if(diagonal[k] == 3)
menang=1;
else diagonal[k] = 0;
}
if(menang==1)
            {
if(i%1 == 0)
printf("\n\n Player1 MENANG\n\n");
else
               if(i%2 == 0)
                printf("\n\n Player2 MENANG\n\n");
            getche();
break;
}
}
}

sekian saja mohon maaf mungkin ada salah penulisannya.
selamat mencoba !!!

sukses.....