Wednesday, 12 July 2017

GAME TICTACTOE 3X3


TIC TAC TOE 3X3
M Naufal Rifki
Jurusan Teknik Informatika, Fakultas Teknologi Industri
Universitas Gunadarma
Pendahuluan
Apa itu game? Mungkin kata yang satu ini adalah kata yang hampir seluruh manusia di bumi tahu apa itu game. Meskipun berbeda suku maupun bangsa tapi jika berbicara soal game mereka pasti tahu bahwa game adalah sebuah permainan.

Game tidak pernah mengenal umur dan status kemasyarakat, semua kalangan boleh menikmati game, tua-muda, kaya-miskin, maupun pria-wanita semua boleh menikmati game. Dan memang game ini selalu bisa menghibur semua kalangan, dan selain menghibur game ini juga mampu memberikan dampak negatif yaitu kecanduan sehingga membuat orang yang memainkannya malas untuk melakukan aktivitas lainnya.

Kini di zaman modern sudah banyak sekali medianya. Ada smartphone, tab, tablet, game portable dan game machine lainnya . adapun jenis-jenis game diantaranya :
1.      Arcade games, yaitu sering disebut ding-dong di Indonesia, biasanya berada di daerah / tempat khusus dan memiliki box atau mesin yang memang khusus di design untuk jenis video games, kebanyakan para gamers merasa “masuk” dan “menikmati” sebuah arti permainan itu sendiri, didukung dengan perangkat, seperti pistol, kursi khusus, sensor gerakan, sensor injakkan dan stir mobil (beserta transmisinya tentunya).

2.      PC Games , yaitu video game yang dimainkan menggunakan Personal Computers..

3.      Console games, yaitu video games yang dimainkan menggunakan console tertentu, seperti Playstation 2, Playstation 3, dan Nintendo Wii..

4.      Handheld games, yaitu yang dimainkan di console khusus video game yang dapat dibawa kemana-mana, contoh Nintendo DS dan Sony PSP..

5.      Mobile games, yaitu yang dapat dimainkan atau khusus untuk mobile phone atau PDA.

Pembahasan
Prolog adalah bahasa pemrograman logika atau di sebut juga sebagai bahasa non-procedural. Namanya diambil dari bahasa Perancis programmation en logique(pemrograman logika). Bahasa ini diciptakan oleh Alain Colmerauer dan Robert Kowalskisekitar tahun 1972 dalam upaya untuk menciptakan suatu bahasa pemrograman yang memungkinkan pernyataan logika alih-alih rangkaian perintah untuk dijalankankomputer.
·         TIC TAC TOE 3X3
Tic Tac Toe merupakan satu permainan grid 3×3 yang dimainkan oleh dua orang pemain yang bermain dengan hanya menggunakan “X” atau “O” sebagai modal untuk mendapatkan satu barisan “X” atau “O” yang selari bagi menamatkan permainan tersebut. Permainan yang menyeronokkan ini berjaya menarik perhatian pelbagai lapisan masyarakat untuk memainkannya sehingga ia menjadi satu permainan yang terkenal diseluruh dunia. Malahan,kepopularan permainan ini menjadikan ia bukan sahaja dipanggil dengan nama Tic Tac Toe,malah dengan pelbagai nama lain seperti tit-tat-toe, Naughts and crosses, Exy-Ozys, Xsie-Osies, serta X’s and O’s.
Berkenaan sejarah Tic Tac Toe pula,kelihatannya permainan ini mempunyai sejarah yang agak kurang jelas. Mengikut dari sumber buku  Tic Tac Toe: And Other Three-In-A Row Games from Ancient Egypt to the Modern Computer yang ditulis oleh  Claudia Zaslavsky’s,beliau menyatakan didalam buku tersebut yang permainan Tic Tac Toe ini berasal dari kerajaan Mesir Kuno.Walaubagaimanapun,dari sumber yang lain pula, PKE dapati yang sejarah Tic Tac Toe ini seperti mempunyai kaitan dengan sejarah penemuan penggunaan XOXO didalam penulisan sekitar tahun 1901.
Jadi di sini PKE ingin memperkenalkan kepada anda aplikasi  Tic Tac Toe yang tersukar didalam dunia dengan rekod setakat ini tanpa seorang manusia pun yang mampu memenanginya. Anda berlawan dengan komputer dan anda pasti tidak akan menang (Kerana permainan tidak pernah habis). Anda diberi pilihan sama ada ingin memilih “X” mahupun “O”. Tidak ada tempo masa permainan .

·         INITIAL STATE
Initial State Yang digunakan sebagai acuan untuk membuat program Tic Tac Toe. Tic Tac Toe adalah pembuatan papan permainanya. Di sini saya menggunakan papan 3 dimensi yang berukuran 3x3x3. Game Tic-Tac-Toe merupakan Permainan Mental yang dimainkan seorang pemain bermain melawan AI komputer. Pada game ini akan menampilkan 27 spot yang tersusun dari tiga baris dan tiga kolom. Dalam permainan ini menggunakan dua buah warna yaitu warna Kuning yang akan digunakan oleh pemain dan warna Hijau yang digunakan oleh Komputer. Game ini akan mengasah otak pemainnya. Pemain dipaksa untuk menerapkan strategi yang tepat untuk memenangkan game ini. Permainan ini hanya dapat dimainkan oleh satu pemain, sedangkan Komputer bertindak sebagai lawan.

TAMPILAN AWAL PERMAINAN



·         RULES
  Aturan main (Rule) yang digunakan pada games tic tac toe ini adalah sebagai berikut:
1.      User memulai permainannya terlebih dahulu, dan user menentukan letak dari warna yang akan dimainkan. User diberi kebebasan untuk meletakkan warna di mana saja selama berada di papan permainan.
2.     Komputer diberi pembelajaran untuk menghalangi jalan user untuk mencapai Goal (Tujuan).
3.     Komputer juga diberi pembelajaran untuk memenangkan games ini (membentuk suatu garis lurus berdasarkan simbolnya) .

·         GOALS
Goal untuk menyelesaikan games Tic Tac Toe ini adalah membuat sebuah deretan tiga warna yang dapat dibentuk secara vertical, horizontal, diagonal.


 


Tampilan ketika memenangkan game







·         Listing Program

?-
  set(position([[[f,f,f],[f,f,f],[f,f,f]], [[f,f,f],[f,f,f],[f,f,f]], [[f,f,f],[f,f,f],[f,f,f]]])),
  pen(2,rgb(0,0,0)),
  window( title("Tic-Tac-Toe 3x3x3"), size(248,268)).


win_func(paint):-
  position(Pos),
  N1 is count_successes(victory(x,Pos)),
  N2 is count_successes(victory(o,Pos)),
  S is "You: "+print(N1)+",       The computer: "+print(N2),
  text_out(S, pos(0, 0)),
  for(X,0,2),
  for(Y,0,2),
  for(Z,2,0,step(-1)),
  member3(Pos,P,X,Y,Z),
  colour(P),
  X1 is 30+60*X+10*Z,
  Y1 is 30+60*Y+10*Z,
  X2 is X1+35,
  Y2 is Y1+35,
  ellipse(X1,Y1,X2,Y2),
  fail.
win_func(paint).

win_func(mouse_click(X,Y)):-
  X>30,
  Y>30,
  X<210,
  Y<210,
  X1 is (X- 30)//60,
  Y1 is (Y- 30)//60,
  position(Pos),
  findZ(X,Y,Z1,X1,Y1),
  member3(Pos,f,X1,Y1,Z1),
  [X1,Y1,Z1]\=[1,1,1],
  !,
  move(Pos2,Pos,x,X1,Y1,Z1),
  set(position(Pos2)),
  win_func(paint),
  Succ is -100,
  (N is count_successes(member3(Pos2,f,_,_,_)), N>8 ->
    think(Pos2, Succ, 1)
  else                                           
    think(Pos2, Succ, 2)
  ),                                       
  win_func(paint),
  !, fail.
win_func(mouse_click(X,Y)):-
  beep.
     
colour(f):-
  brush(rgb(255,255,255)).
colour(x):-
  brush(rgb(255,0,0)).
colour(o):-
  brush(rgb(0,0,255)).
my_member([El,_,_],El,0).
my_member([_,El,_],El,1).
my_member([_,_,El],El,2).

member2(Pos,El,X,Y):-
     my_member(Pos,Row,Y),
     my_member(Row,El,X).

member3(Pos,El,X,Y,Z):-
     my_member(Pos,Page,Z),
     my_member(Page,Row,Y),
     my_member(Row,El,X).

findZ(X,Y,0,X1,Y1):-
     (X- 47- 60*X1)**2 + (Y- 47- 60*Y1)**2<289,!.
findZ(X,Y,1,X1,Y1):-
     (X- 57- 60*X1)**2 + (Y- 57- 60*Y1)**2<289,!.
findZ(X,Y,2,X1,Y1):-
     (X- 67- 60*X1)**2 + (Y- 67- 60*Y1)**2<289.

think(Pos, Succ, _):-
  member3(Pos,f,1,1,1),
  move(Pos2,Pos,o,1,1,1),
  set(position(Pos2)).
think(Pos, Succ, _):-
  not(member3(Pos,f,_,_,_)),
  N1 is count_successes(victory(x,Pos)),
  N2 is count_successes(victory(o,Pos)),
  (N1>N2->
    message("Congratulations", "You are the winner.", !)
  else  (N1=N2->
    message("OK", "This game is equal.", i)
  else
    message("Sorry", "You lost this time.", s)
  )).
think(Pos, Succ, Deep):-
  move(Pos2,Pos,o),
  Succ2 is 100,
  min_max(Succ2, Pos2, Deep),
  Succ2>Succ,
  Succ:=Succ2,
  set(position(Pos2)),
  fail.
think(_, _, _).

min_max(Succ,Pos,Deep):-
  Deep1 is Deep - 1,
  move(Pos2,Pos,x),
  Succ2 is -100,
  max_min(Succ2, Pos2, Deep1),
  Succ2<Succ,
  Succ:=Succ2,
  fail.
min_max(_,_,_).

max_min(Succ,Pos,0):-
  N1 is count_successes(victory(x,Pos)),
  N2 is count_successes(victory(o,Pos)),
  Succ := N2 - N1, !.
max_min(Succ,Pos,Deep):-
  not(member3(Pos,f,_,_,_)),
  N1 is count_successes(victory(x,Pos)),
  N2 is count_successes(victory(o,Pos)),
  Succ := N2 - N1, !.
max_min(Succ,Pos,Deep):-
  move(Pos2,Pos,o),
  Succ2 is 100,
  min_max(Succ2, Pos2, Deep),
  Succ2>Succ,
  Succ:=Succ2,
  fail.
max_min(_,_,_).

replace([El,A,B],[_,A,B],El,0).
replace([A,El,B],[A,_,B],El,1).
replace([A,B,El],[A,B,_],El,2).

move(Pos2,Pos,P,X,Y,Z):-
     my_member(Pos,Page,Z),
     my_member(Page,Row,Y),
     replace(Row2, Row,P,X),
     replace(Page2, Page,Row2,Y),
     replace(Pos2, Pos,Page2,Z).
move(Pos2,Pos,W):-
      member3(Pos,f,X,Y,Z),
      move(Pos2,Pos,W,X,Y,Z).

victory(Who,[[[Who,Who,Who],_,_],_,_]).
victory(Who,[[_,[Who,Who,Who],_],_,_]).
victory(Who,[[_,_,[Who,Who,Who]],_,_]).
victory(Who,[[[Who,_,_],[Who,_,_],[Who,_,_]],_,_]).
victory(Who,[[[_,Who,_],[_,Who,_],[_,Who,_]],_,_]).
victory(Who,[[[_,_,Who],[_,_,Who],[_,_,Who]],_,_]).
victory(Who,[[[Who,_,_],[_,Who,_],[_,_,Who]],_,_]).
victory(Who,[[[_,_,Who],[_,Who,_],[Who,_,_]],_,_]).
victory(Who,[_,[[Who,Who,Who],_,_],_]).
victory(Who,[_,[_,[Who,Who,Who],_],_]).
victory(Who,[_,[_,_,[Who,Who,Who]],_]).
victory(Who,[_,[[Who,_,_],[Who,_,_],[Who,_,_]],_]).
victory(Who,[_,[[_,Who,_],[_,Who,_],[_,Who,_]],_]).
victory(Who,[_,[[_,_,Who],[_,_,Who],[_,_,Who]],_]).
victory(Who,[_,[[Who,_,_],[_,Who,_],[_,_,Who]],_]).
victory(Who,[_,[[_,_,Who],[_,Who,_],[Who,_,_]],_]).
victory(Who,[_,_,[[Who,Who,Who],_,_]]).
victory(Who,[_,_,[_,[Who,Who,Who],_]]).
victory(Who,[_,_,[_,_,[Who,Who,Who]]]).
victory(Who,[_,_,[[Who,_,_],[Who,_,_],[Who,_,_]]]).
victory(Who,[_,_,[[_,Who,_],[_,Who,_],[_,Who,_]]]).
victory(Who,[_,_,[[_,_,Who],[_,_,Who],[_,_,Who]]]).
victory(Who,[_,_,[[Who,_,_],[_,Who,_],[_,_,Who]]]).
victory(Who,[_,_,[[_,_,Who],[_,Who,_],[Who,_,_]]]).

victory(Who,[[[Who,_,_],_,_],[[Who,_,_],_,_],[[Who,_,_],_,_]]).
victory(Who,[[[_,Who,_],_,_],[[_,Who,_],_,_],[[_,Who,_],_,_]]).
victory(Who,[[[_,_,Who],_,_],[[_,_,Who],_,_],[[_,_,Who],_,_]]).
victory(Who,[[_,[Who,_,_],_],[_,[Who,_,_],_],[_,[Who,_,_],_]]).
victory(Who,[[_,[_,Who,_],_],[_,[_,Who,_],_],[_,[_,Who,_],_]]).
victory(Who,[[_,[_,_,Who],_],[_,[_,_,Who],_],[_,[_,_,Who],_]]).
victory(Who,[[_,_,[Who,_,_]],[_,_,[Who,_,_]],[_,_,[Who,_,_]]]).
victory(Who,[[_,_,[_,Who,_]],[_,_,[_,Who,_]],[_,_,[_,Who,_]]]).
victory(Who,[[_,_,[_,_,Who]],[_,_,[_,_,Who]],[_,_,[_,_,Who]]]).

victory(Who,[[[Who,_,_],_,_],[[_,Who,_],_,_],[[_,_,Who],_,_]]).
victory(Who,[[_,[Who,_,_],_],[_,[_,Who,_],_],[_,[_,_,Who],_]]).
victory(Who,[[_,_,[Who,_,_]],[_,_,[_,Who,_]],[_,_,[_,_,Who]]]).
victory(Who,[[[_,_,Who],_,_],[[_,Who,_],_,_],[[Who,_,_],_,_]]).
victory(Who,[[_,[_,_,Who],_],[_,[_,Who,_],_],[_,[Who,_,_],_]]).
victory(Who,[[_,_,[_,_,Who]],[_,_,[_,Who,_]],[_,_,[Who,_,_]]]).

victory(Who,[[[Who,_,_],_,_],[_,[Who,_,_],_],[_,_,[Who,_,_]]]).
victory(Who,[[[_,Who,_],_,_],[_,[_,Who,_],_],[_,_,[_,Who,_]]]).
victory(Who,[[[_,_,Who],_,_],[_,[_,_,Who],_],[_,_,[_,_,Who]]]).
victory(Who,[[_,_,[Who,_,_]],[_,[Who,_,_],_],[[Who,_,_],_,_]]).
victory(Who,[[_,_,[_,Who,_]],[_,[_,Who,_],_],[[_,Who,_],_,_]]).
victory(Who,[[_,_,[_,_,Who]],[_,[_,_,Who],_],[[_,_,Who],_,_]]).

victory(Who,[[[Who,_,_],_,_],[_,[_,Who,_],_],[_,_,[_,_,Who]]]).
victory(Who,[[_,_,[_,_,Who]],[_,[_,Who,_],_],[[Who,_,_],_,_]]).
victory(Who,[[[_,_,Who],_,_],[_,[_,Who,_],_],[_,_,[Who,_,_]]]).
victory(Who,[[_,_,[Who,_,_]],[_,[_,Who,_],_],[[_,_,Who],_,_]]).


PENUTUP
Strawberry Prolog  adalah dialek dari Prolog bahasa pemrograman . Sintaks nya sangat dekat dengan ISO-Prolog tapi itu memiliki banyak ekstensi yang bukan bagian dari standar.
AI (Artificial Intelegent)
biasa disebut dengan Kecerdasan Buatan adalah kecerdasan yang diciptakan dan dimasukkan ke dalam suatu mesin, dalam hal ini adalah computer agar dapat melakukan pekerjaan seperti yang dapat dilakukan oleh manusia .






No comments:

Post a Comment