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 .


