1.
Tentang Game Tick-Tack-Toe 3x3x3
Pada kesempatan kali ini
saya akan akan menjelaskan beberapa hal yang berkaitan dengan permainan
Tick-Tack-Toe. Saya melakukan pengembangan game Tick-Tack-Toe 3x3x3 menggunakan
software ”Strawberry Prolog”. Game Tick-Tack-Toe yang saya kembangkan berbasis
tiga dimensi. Game ini adalah sebuah game yang berbasis AI (Artificial
Intelligent) atau Kecerdasan Buatan. Kecerdasan buatan
yang terdapat pada game ini adalah pada komputer yang akan bertindak sebagai
lawan. Komputer akan bermain layaknya seorang manusia. Komputer akan selalu
berusaha mengalahkan pemain dengan cara menutup langkah pemain untuk membentuk suatu garis. Komputer dapat
menyusun strateginya sendiri agar menjadi seorang pemenang.
Sebelum saya membahas tatacara
permainan pada Game Tick-Tack-Toe saya akan membahas secara singkat tentang awal
mulanya Game Tick-Tack-Toe. Game Tick-Tack-Toe sangat dikenal diseluruh penjuru
dunia. Di Indonesia sendiri game ini lebih dikenal dengan permainan catur jawa.
Tick-Tack-Toe sendiri berasal dari kekaisaran romawi sekitar abad sebelum
masehi.Permainan ini dimainkan oleh dua orang pemain dengan menggunakan tiga
bidak. Pemain harus membentuk satu barisan dengan bidak- bidak yang dimiliki
pada lembar kertas papirus. Namun, menurut Claudia Zaslavsky
dalam buku Tic Tac Toe: And Other Three-In-A Row Games from Ancient Egypt to
the Modern Computer, Tic-Tac-Toe berasa Mesir kuno. Namun bagaimana permainan
ini mulai disebut dengan nama Tic Tac Toe? Pada tahun 1884, anak-anak bermain
di sebuah batu tulis dimana mereka menutup mata sambil mencoretkan batu dengan
dua simbol "X" dan "O" membentuk satu barisan namun
disertai suara Tic dan Tac dari anak-anak. Pada tahun 1952, Tic Tac Toe mulai diminati
karena untuk pertama kalinya masuk ke dunia video game OXO (or Noughts and
Crosses) untuk komputer EDSAC. Pemain bisa memainkan Tic-Tac-Toe dengan melawan
komputer bahkan dapat multiplay melawan manusia. Pada tahun 1975, Tic Tac Toe
juga digunakan oleh siswa MIT untuk menunjukkan kekuatan komputasi dari elemen
Tinkertoy yang saat ini dipamerkan di Museum of Science, Boston.
2.
Bahasa Pemrograman untuk
Tick-Tack-Toe
Game Tick-Tack-Toe 3x3x3
menggunakan bahasa pemrograman Prolog. Software yang
digunakan adalah Strawberry Prolog sebagai program editor. Karena bahasa ini mudah
untuk membuat dan mengeditnya sesuai dengan versi kita. Selain itu, kita dapat
dengan mudah mengimplementasikan AI secara sederhana dan merupakan aplikasi
“light edition” yang artinya program ini
dapat langsung dijalankan tanpa harus diinstal terlebih dahulu.
3. Bentuk Permainan
Pada permainan Tick-Tack-Toe 3x3x3
yang saya kembangkan menggunakan papan yang terdapat 27 object yang terdiri
dari 3 kolom dan 3 baris. Dimana setiap object memiliki tiga lapisan (tiga
dimensi). Pada permainan ini terdapat dua object yang berperan, yaitu pemain
dengan komputer atau AI. Dengan ketentuan warna pada masing-masing object.
Pemain menggunakan warna merah muda, sedangkan komputer atau AI menggunakan
warna hijau.
Game
Tick-Tack-Toe ini akan mengasah pikiran pemainnya. Karena pemain dipaksa untuk
menerapkan strategi bila ingin memenangkan permainan. Game ini hanya dimainkan
oleh satu orang pemain dan yang menjadi lawannya adalah komputer. Pada saat
game ini dimainkan oleh seorang pemain (user), game akan berfikir bagaimana
caranya untuk mengalahkan pemain (user).
Tampilan awal memulai permainan Tick-Tack-Toe 3x3x3
4.
Aturan Permainan (Rule)
Pada setiap permainan memiliki beberapa aturan,
begitu juga dengan permainan Tick-Tack-Toe 3x3x3. Beberapa aturan yang terdapat
pada permainan ini yaitu:
- Pemain (User) memulai permainan terlebih dahulu, dan diberi kebebasan untuk memilih letak object pada papan permainan, dengan cara meng-klik object dimanapun sesuai yang di inginkan.
- Komputer akan memulai permainan setelah pemain (user) memulai permainan terlebih dahulu
- Komputer diberi pembelajaran untuk menghalangi jalan pemain untuk mencapai Goal (Tujuan) dengan cara menghalangi jalan milik pemain agar tidak memilih object tersebut
- Komputer diberi pembelajaran untuk memenangkan permainan ini
- Pemain (user) maupun komputer (yang berperan sebagai lawan) harus menyusun warna yang sama membentuk satu garis lurus secara vertikal, horizontal, ataupun diagonal untuk memenangkan permainan ini
5.
Tujuan(Goal)
Untuk mencapai Goal(Tujuan) pada game
Tick-Tack-Toe 3x3x3 adalah menyusun warna yang sama membentuk garis lurus yang
terdiri dari 3 object secara vertikal, horizontal, ataupun diagonal. Kemudian
pada saat pemain memiliki poin yang lebih banyak dari komputer atau AI maka
pemain telah memenangkan permainan.
Tampilan pada saat pemain dalam kondisi menang
6.
Algoritma
Pada
Game Tick-Tack-Toe ini menggunakan prinsip Algoritma Minimax. Permainan
Tick-Tack-Toe ini memiliki sedikit kemungkinan solusi. Sehingga pemain tidak
bisa memprediksi untuk setiap kombinasi langkah dari setiap kondisi dan posisi.
Untuk memainkan permainan ini pemain membutuhkan strategi untuk memenangkan
permainan.
7.
Output
Tampilan pada ada saat pemain dalam kondisi seri
Tampilan pada saat pemain dalam kondisi kalah
yang berarti komputer atau AI berada pada posisi menang
Tampilan saat pemain memilih submenu Help
Tampilan saat Pemain memilih submenu Exit
Tampilan saat pemain memilih submenu About maka
akan muncul file dengan format .txt
8.
Listing Program
%============================================================%
% This
program is developed by Vibri Ariyaningrum
%
% from University of
Gunadarma %
%---------------------LISTINGAN
MENU-------------------------%
?-
G_image is bitmap_image("coba.bmp",_),
set(pos([[[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(5,rgb(0,0,100)),
window(_,_,win_func(_),"Tick-Tack-Toe 3x3x3",200,200,248,268).
win_func(init) :-
%background
%window_brush(_, rgb(200,200,200)),
menu( normal, _, _, menu_new(_), "&New Game"),
menu( normal, _, _, menu_help(_), "&Help"),
menu( normal, _, _, menu_exit(_), "&Exit"),
menu( normal, _, _, menu_about(_), "&About").
menu_new(press) :-
set(pos([[[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(5,rgb(0,0,100)),
set(lose_flag(false)),
brush(system_color(window)),
update_window(_).
menu_help(press) :-
message("Help","Arrange with The Same Color", i).
check_func(press) :-
set_check_box_value(_,1-get_check_box_value(_)).
menu_exit(press) :-
close_window(_).
win_func(close) :-
beep("ok.wav"),
not( yes_no("Information","Are you sure want to exit?",?)).
menu_about(press) :-
shell_execute("DataDiri.txt").
%-----------------------LISTINGAN
GAME-----------------------%
win_func(paint):-
draw_bitmap(0,0,G_image,_,_),
pos(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(0, 0, S),
for(X,0,2),
for(Y,0,2),
for(Z,2,0,-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,
pos(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(pos(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,255)).
colour(o):-
brush(rgb(0,255,255)).
member([El,_,_],El,0).
member([_,El,_],El,1).
member([_,_,El],El,2).
member2(Pos,El,X,Y):-
member(Pos,Row,Y),
member(Row,El,X).
member3(Pos,El,X,Y,Z):-
member(Pos,Page,Z),
member(Page,Row,Y),
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(pos(Pos2)).
think(Pos, Succ, _):-
chronometer(T),
not(member3(Pos,f,_,_,_)),
N1 is count_successes(victory(x,Pos)),
N2 is count_successes(victory(o,Pos)),
(N1>N2->
beep("good_one_sir.wav"),
message("Congratulations", "You are the winner!!!!!!", !)
else (N1=N2->
message("OK", "This game is Draw.", 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(pos(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(_,_,_).
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):-
member(Pos,Page,Z),
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],_,_]].
9.
Daftar Pustaka
- http://cherinblog.blogspot.com/2012/05/algorithms-game-pada-permainan-tic-tac.html
- http://eckohoppus.wordpress.com/2010/11/29/manual-book-tik-tak-tu/
- http://techno-nugraha.blogspot.com/2012/05/analisis-game-tic-tac-toe.html
10.
Glosarium
v
AI (Artificial Intelligence) atau kecerdasan buatan
Merupakan salah satu bagian ilmu komputer yang membuat
agar mesin(komputer) dapat melakukan perkerjaan yang seperti dan sebaik yang
dilakukan oleh manusia.
v Algoritma
Minimax
Adalah Sebuah procedure pencarian yang melihat kedepan,
memperhatikan apa yang akan terjadi, kemudian yang akan digunakan untuk memilih
langkah berikutnya.
Tidak ada komentar:
Posting Komentar