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 saya
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 Exit
Tampilan saat pemain memilih submenu Help
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,100,0)),
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_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,100,0)),
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) :-
not( yes_no("Information","Are you sure want to exit?", ?)).
%-----------------------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->
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(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.
0 komentar:
Posting Komentar