andRie's Blog

December 5, 2009

MEMBUAT GAMES TIC TAC TOE DENGAN BAHASA C

Filed under: tugas — andriedwicn @ 11:07 am

MEMBUAT GAMES TIC TAC TOE

DENGAN BAHASA C

Nama          : Andrie Dwi Cahyo Nugroho

NPM           : 30108226

Kelas          : 2DB08

UNIVERSITAS GUNADARMA

DEPOK

  1. PENDAHULUAN

Untuk melengkapi salah satu tugas mata kuliah Teknik Pemprograman Terstruktur 1 maka saya memilih membuat program Tic Tac Toe. Pembuatan program itu menggunakan bahasa c, dikarenakan mata kuliah Teknik Pemprograman Terstruktur 1  mempelajari tentang bahasa c.

Program ini berisikan sebuah permainan X O X, yang dimainkan oleh 2 pemain, dimana salah satunya sebagai X dan yang satu lagi sebagai O. Cara permainan game ini cukup sederhana, yaitu kita hanya mengisi kolom yang sudah disediakan. Kolom tersebut berbentuk 3×3 yaitu 3 kolom dan 3 baris.

Bila kita ingin mengisi kolom tersebut kita hanya perlu mengisikan angka 1-3 pada baris kolom ataupun baris, dan huruf X atau O tersebut akan muncul pada table Tic Tac Toe.

Permain akan dikatakan menang bila telah membentuk X atau O yang sejajar entah itu horizontal, vertical ataupun diagonal. Bila pemain telah menang maka kita dapat memilih akan memulai dari awal ataupun akan berakhir. Bila memilih mulai permainan baru maka akan muncul tampilan awal, dan bila tidak maka permainan akan berakhir.

  1. ANALISA DAN PEMBAHASAN

FUNGSI-FUNGSI

Fungsi-fungsi yang terdapat dalam program tersebut yaitu :

#include<stdio.h>

Fungsi ini memiliki arti akan mengambil fungsi-fungsi yang terdapat pada library standar IO, diantaranya clrscr(), printf(), scanf().

#include<conio.h>

Fungsi ini memiliki pengaruh dalam tampilan layer, seperti clrscr(), textcolor(), textbackground().

Fungsi ini memiliki jenis yang hampir sama dengan fungsi stdio.h tetapi lebih berorientasi pada layer hal itu terlihat jelas pada clrscr(), bila kita menghapus fungsi ini pada program maka program akan mengalami kesalahan terutama dalam pendeklarasian clrscr() tersebut.

/* */

Fungsi ini memiliki arti sebagai penulisan komentar tentang program atau perintah-perintah. Komentar tidak mempengaruhi program karena komentar tidak dijalankan seperti perintah (statement). Melainkan bersifat opsional, bila tidak kita tulispun tidak akan mempengaruhi program tersebut. . Komentar dengan tanda ini hanya berlaku pada 1 baris saja. Komentar bersifat untuk mempermudah orang mengetahui fungsi dari suatu program atau suatu algoritma. Cara lain untuk memberikan komentar adalah dengan memberikan tanda garis miring 2 kali

clrscr()

Fungsi ini digunakan untuk membersihkan layar teks pada saat itu dan mengembalikan kursor ke pojok kiri atas.

printf()

Fungsi ini terdapat  dalam library stdio.h yang digunakan untuk menampilkan ke layar baik tipe string maupun placeholders. Sehingga kata-kata yang kita masukkan akan tercetak pada layer, pada saat kita mengoperasikannya. Pencetakan kata-kata tersebut diapit oleh (“ ”).

scanf()

Fungsi ini digunakan untuk menyimpan data yang tipenya diwakili oleh sebuah placeholder dalam format string ke alamat memori variabel yang telah ditentukan. Ataupun fungsi ini ditujukan untuk menyimpan sementara data yang dimasukkan dan akan ditampilkan kembali sesuai dengan program yang telah ditentukan.

gets()

Fungsi ini terdapat dalam tampilan layar conio.h, yang berguna untuk membaca string dari keyboard sampai ketemu new-line dan disimpan pada buffer. Dan kemydian new-line di replace dengan null character kemudian mengembalikan nilai null jika ada error dan mengembalikan argument-nya (buffer) jika sukses.

getch()

Fungsi ini terdapat dalam tampilan layar conio.h, yang berguna untuk mengembalikan satu karakter dari buffer keyboard serta karakter tidak ditampilkan di layar monitor (no echo). Fungsi getch() tidak menunggu sampai ENTER dan cocok untuk membuat password.

return

Return merupakan suatu perintah yang memberikan nilai kepada fungsinya dan setiap fungsi harus mempunyai nilai kembaliannya (return value).

continue

Sedangkan statemen continue digunakan untuk melanjutkan proses pengulangan. Statemen continue menyebabkan proses perulangan kembali ke awal mulainya perulangan dengan mengabaikan statemen-statemen berikutnya setelah statemen continue. Statemen continue dapat digunakan untuk perulangan for, while maupun perulangan do-while.

fflush(stdin)

Jika terdapat beberapa proses input (memasukkan data) sekaligus, maka sebaiknya ditambahkan fungsi fflush(stdin); setelah fungsi scanf(). Fungsi fflush(stdin) berfungsi menghapus buffer di dalam alat I/O.

switch(ch)

Switch (ch) atau switch (choice) digunakan untuk membuat sebuah ekspresi untuk menentukan statement yang akan dijalankan.

break

Statemen break digunakan untuk menghentikan sebuah pengulangan dan program akan langsung meloncat ke statemen yang berada di bawah blok pengulangan. Biasanya ini dilakukan karena alasan efisiensi program, yaitu untuk menghindari proses pengulangan yang sebenarnya sudah tidak diperlukan lagi.

while()

While adalah sebuah perintah sebagaimana halnya if dan else. while bukanlah fungsi pustaka, karenanya while tidak menggunakan file header. Seperti if, while adalah pernyataan berganda dan tanda kurung muncul di dekat ekspresi relasional. Ekspresi relasional dapat berisi satu atau beberapa operator relasional. Jika anda menggunakan lebih dari satu operator relasional di dalam ekspresi […]

delay()

Merupakan waktu jeda yang digunakan pada program, untuk memberikan waktu jeda dalam memasuki perintah selanjutnya. Delay terdapat  dalam library stdio.h, dimana extention h untuk menunjukkan header atau kepala program.

void main()

Pada program bahasa C, main() merupakan fungsi yang istimewa, karena fungsi main harus selalu ada dalam program, sebab fungsi inilah yang menjadi titik awal dan titik akhir eksekusi program. Tetapi bila fungsi itu ditambahkan menjadi void main maka akan menghasilkan fungsi yang tidak mengembalikan nilai tersebut. Karena void berarti tidak mengembalikan nilai.

{ }

Tanda { di awal fungsi menyatakan awal tubuh fungsi dan sekaligus awal program, sedangkan tanda } di akhir tubuh fungsi menyatakan akhir dari tubuh fungsi sekaligus akhir eksekusi program.

for

Struktur perulangan for biasa digunakan untuk mengulang suatu proses yang telah diketahui jumlah perulangannya. Dari segi penulisannya, struktur perulangan for tampaknya lebih efisien karena susunannya lebih simpel dan sederhana.

if

Struktur if dibentuk dari pernyataan if dan sering digunakan untuk menyeleksi suatu kondisi tunggal. Bila proses yang diseleksi terpenuhi atau bernilai benar, maka pernyataan yang ada di dalam blok if akan diproses dan dikerjakan.

if else

Dalam struktur kondisi if…..else minimal terdapat dua pernyataan. Jika kondisi yang diperiksa bernilai benar atau terpenuhi maka pernyataan pertama yang dilaksanakan dan jika kondisi yang diperiksa bernilai salah maka pernyataan yang kedua yang dilaksanakan.

if else if else

Pada struktur kondisi ini akan mengeksekusi kondisi pertama, jika salah maka akan masuk proses seleksi kondisi kedua, dan bila semua kondisi tidak terpenuhi, maka program akan menjalankan statement default.

void Board()

void PlayerX()

void Player0()

void Player_win()

void check()

Pada struktur badan program ini berarti tidak akan mengembalikan nilai dari Board, PlayerX, Player0, Player_win, dan check.

Int

Menetukan bahwa variabel yang digunakan merupakan variabel integer.

char

Menentukan bahwa variabel yang digunakan merypakan variabel karakter.

\n

Menunjukkan bahwa akan membuat garis baru.

\t

Menunjukkan bahwa akan membuat tabulasi horizontal.

&&

Merupakan penggunaan logika AND  yang membandingkan logika hasil dari operator-operator hubungan.

&

Menghasilkan alamat memori operand (operator pointer)

%d

Membaca nilai decimal integer

%c

Membaca sebuah karekter

%s

Membaca nilai string

case

Merupakan suatu keputusan yang bila tidak ada perulangan yang terpenuhi maka keputusan ini yang akan tercetak.

pos_for_X[i][j]

pos_for_O[i][j]

Menunjukkan pososi X ataupun O pada baris [i] dan kolom [j].

do

Suatu perintah penugasan untuk melakukan suatu perintah.

III.  KESIMPULAN

KEKURANGAN

Dalam program ini terdapat kekurangan yaitu pada saat kita memasukkan angka pada pilihan huruf ataupun memasukkan huruf pada pilihan angka maka program akan berhenti, karena bila kita masukkan semua pilihan akan membuat program semakin sulit untuk dipahami karena ada banyak kemungkinan yang terjadi entah itu huruf besar ataupun kecil serta angka satuan hingga puluhan, sehingga hanya dapat menampilkan yang ada pada pilihan itu saja.

Selain itu pada program ini terlihat begitu sederhana karena tidak ada fariasi warna baik itu pada tulisan ataupun tampilan lainnya.

KELEBIHAN

Kelebihan dalam program ini, bila kita salah memasukkan angka, maka program tidak akan eror ataupun berhenti melainkan akan menanyakan ulang, apakah kita akan main lagi atau tidak. Pertanyaan ini akan muncul pada saat kita salah mengetikkan angka pada awal mulai kita memilih.

Selain itu bila kita salah dalam mengetikkan angka dalam pengisian kolom serta baris maka akan timbul kata-kata yang menunjukkan bahwa angka yang kita masukkan adalah salah, maka program akan mengulang pada saat sebelum angka itu dimasukkan.

Kelebihan lain yang dapat saya katakana yaitu kita tidak hanya dapat membuat garis yang sejajar atau menurun melainkan dapat juga membentuk garis yang diagonal sama seperti permainan aslinya.

LAMPIRAN

LISTING PROGRAM

#include<stdio.h>

#include<conio.h>

void Board();

void PlayerX();

void PlayerO();

void Player_win();

void check();

int win=0,wrong_X=0,wrong_O=0,chk=0;

char name_X[30];

char name_O[30];

int pos_for_X[3][3];

int pos_for_O[3][3];

int pos_marked[3][3];

void main()

{

int i,ch,j;

char ans;

/*    clrscr();

printf(“\n\t\t\t\tTIC TAC TOE”);

printf(“\n\t\t\t\t”);

for(i=1;i<=11;i++)

{

delay(10000);

printf(“*”);

}*/

do

{

clrscr();

printf(“\n\t\t\t\tTIC TAC TOE”);

printf(“\n\t\t\t\t”);

for(i=1;i<=11;i++)

{

printf(“*”);

}

printf(“\n1.Mulai Permainan”);

printf(“\n2.Keluar Permainan”);

printf(“\nMasukkan pilihan Anda(1-2) : “);

scanf(“%d”,&ch);

switch(ch)

{

case 1:

chk=0;

win=0;

for(i=1;i<=3;i++)

{

for(j=1;j<=3;j++)

{

pos_for_X[i][j]=0;

pos_for_O[i][j]=0;

pos_marked[i][j]=0;

}

}

printf(“\n\n”);

clrscr();

printf(“\nMasukkan Nama Pemain untuk\’X\’: “);

fflush(stdin);

gets(name_X);

printf(“\nMasukkan Nama Pemain untuk\’O\’: “);

fflush(stdin);

gets(name_O);

Board();

for(;;)

{

if(win==1)

break;

check();

if(chk==9)

{

printf(“\n\t\t\tMATCH DRAWS!!”);

printf(“\nPress any key….”);

break;

}

else

chk=0;

printf(“\nTURN FOR %s:”,name_X);

PlayerX();

do

{

if(wrong_X!=1)

break;

wrong_X=0;

printf(“\nTURN FOR %s:”,name_X);

PlayerX();

}while(wrong_X==1);

check();

if(chk==9)

{

printf(“\n\t\t\tMATCH DRAWS”);

printf(“\nPress any key….”);

break;

}

else

chk=0;

printf(“\nTURN FOR %s:”,name_O);

PlayerO();

do

{

if(wrong_O!=1)

break;

wrong_O=0;

printf(“\nTURN FOR %s:”,name_O);

PlayerO();

}while(wrong_O==1);

}

Board();

if(win!=1)

{

printf(“\n\t\t\tMATCH DRAWS!!”);

printf(“\nPress any key…….”);

}

getch();

break;

case 2:

printf(“\n\n\n\t\t\tTerima Kasih Sudah Bermain Game ini.”);

printf(“\n\t\t\t###############################”);

getch();

break;

}

printf(“\nMau bermain lagi(Y/N) ? “);

fflush(stdin);

scanf(“%c”,&ans);

}while(ans==’y’ || ans==’Y’);

}

void Board()

{

int i,j;

clrscr();

printf(“\n\t\t\t\tTIC TAC TOE BOARD”);

printf(“\n\t\t\t\t*****************”);

printf(“\n\n\n”);

printf(“\n\t\t\t    1\t      2\t        3”);

for(i=1;i<=3;i++)

{

printf(“\n \t\t\t _____________________________”);

printf(“\n \t\t\tº\t  º\t   º\t     º”);

printf(“\n\t\t%d\t”,i);

for(j=1;j<=3;j++)

{

if(pos_for_X[i][j]==1)

{

printf(”    X”);

printf(”     “);

}

else if(pos_for_O[i][j]==1)

{

printf(”    O”);

printf(”     “);

}

else

{

printf(”          “);

continue;

}

}

printf(“\n\t\t\tº\t  º\t   º\t     º”);

}

printf(“\n\t\t\t——————————“);

Player_win();

}

void PlayerX()

{

int row,col;

if(win==1)

return;

printf(“\nMasukkan Baris no. : “);

fflush(stdin);

scanf(“%d”,&row);

printf(“Masukkan Kolom no. : “);

fflush(stdin);

scanf(“%d”,&col);

if(pos_marked[row][col]==1 || row<1 || row>3 || col<1 || col>3)

{

printf(“\nWRONG POSITION!! Press any key…..”);

wrong_X=1;

getch();

Board();

}

else

{

pos_for_X[row][col]=1;

pos_marked[row][col]=1;

Board();

}

}

void PlayerO()

{

int row,col;

if(win==1)

return;

printf(“\nMasukkan Baris no. : “);

scanf(“%d”,&row);

printf(“Masukkan Kolom no. : “);

scanf(“%d”,&col);

if(pos_marked[row][col]==1 || row<1 || row>3 || col<1 || col>3)

{

printf(“\nWRONG POSITION!! Press any key….”);

wrong_O=1;

getch();

Board();

}

else

{

pos_for_O[row][col]=1;

pos_marked[row][col]=1;

Board();

}

}

void Player_win()

{

int i;

for(i=1;i<=3;i++)

{

if(pos_for_X[i][1]==1 && pos_for_X[i][2]==1 && pos_for_X[i][3]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_X);

printf(“\nPress any key…………”);

return;

}

}

for(i=1;i<=3;i++)

{

if(pos_for_X[1][i]==1 && pos_for_X[2][i]==1 && pos_for_X[3][i]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_X);

printf(“\nPress any key…………”);

return;

}

}

if(pos_for_X[1][1]==1 && pos_for_X[2][2]==1 && pos_for_X[3][3]==1)

{

win=1;

printf(“\n\nRESULTL: %s wins!!”,name_X);

printf(“\nPress any key……”);

return;

}

else if(pos_for_X[1][3]==1 && pos_for_X[2][2]==1 &&

pos_for_X[3][1]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_X);

printf(“\nPress any key…..”);

return;

}

for(i=1;i<=3;i++)

{

if(pos_for_O[i][1]==1 && pos_for_O[i][2]==1 && pos_for_O[i][3]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_O);

printf(“\nPress any key…..”);

return;

}

}

for(i=1;i<=3;i++)

{

if(pos_for_O[1][i]==1 && pos_for_O[2][i]==1 && pos_for_O[3][i]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_O);

printf(“\nPress any key…..”);

return;

}

}

if(pos_for_O[1][1]==1 && pos_for_O[2][2]==1 && pos_for_O[3][3]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_O);

printf(“\nPress any key…..”);

return;

}

else if(pos_for_O[1][3]==1 && pos_for_O[2][2]==1 &&

pos_for_O[3][1]==1)

{

win=1;

printf(“\n\nRESULT: %s wins!!”,name_O);

printf(“\nPress any key…..”);

return;

}

}

void check()

{

int i,j;

for(i=1;i<=3;i++)

{

for(j=1;j<=3;j++)

{

if(pos_marked[i][j]==1)

chk++;

else

continue;

}

}

}

5 Comments »

  1. Cukup Menarik, walaupun sederhana..

    Comment by Dedy Ashardi — December 29, 2009 @ 7:46 am

  2. ketika saya compile di Visual C ada 102 error

    Comment by bahar — April 13, 2010 @ 12:14 pm

    • wah masak mas..
      sudah saya coba ternyata jalan ko…

      Comment by andriedwicn — April 23, 2010 @ 8:46 am

  3. programnya eror pas bagian
    }while(ans==’y’ || ans==’Y’);
    katax
    [Error] C:\Program Files\C-Free Standard\temp\Untitled6.c:244: unterminated character constant
    tolong…

    Comment by hajar — July 23, 2010 @ 1:28 pm

  4. oke deh…
    klau memang masih ada yg salah akan saya coba kirim ke email..
    tapi saya mohon minta kirimin alamatnya yah…
    trimakasie telah mengunjungi blog saya yg sangat sederhana dan kurang menarik ini…
    heheheh…
    kiranya ilmunya dapat bermanfaat…

    Comment by andriedwicn — January 6, 2011 @ 12:33 pm


RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: