Script Game GothelloGreen menggunakan
Strawberry Prolog
Tokoh-tokoh dalam game :
Bidak Api ( AI )
Bidak Pohon ( User )
Tampilan Window Game GothelloGreen
Alur Game :
Alur game
atau aturan main yang digunakan pada permainan GothelloGreen. Cara bermainnya pun
tidak jauh berbeda dengan Othello pada umumnya. Dan berikut adalah aturan
permainan tersebut:
1. Pada
awal permainan diletakkan enam
buah bidak berbentuk kotak,
yaitu tiga bidak bergambar Pohon sebagai user dan tiga bidak
bergambar Api
sebagai AI di tengah-tengah papan dengan susunan seperti di bawah ini.
Tampilan awal dengan 6 bidak
2. Letakkan
disisi bidak dengan cara mengapit bidak lawan yang ada di papan dimana pada
ujung dan pangkalnya harus ada bidak kepunyaan si pemain sebagai syarat untuk
membaliknya agar menjadi kepunyaan si pemain. Dilakukan secara horizontal, vertical
maupun diagonal.
Syarat peletakan bidak
3. Bidak
yang terjepit akan menjadi milik pemain yang menjepitnya.
4. Jika
pada semua kotak sudah terisi bidak kepunyaan pemain dan lawan diantara mereka
mempunyai bidak yang sama banyak maka permainan dinyatakan permainan seri.
5. Kondisi
pemain menang apabila bidak bergambar pohon
lebih banyak dari bidak bergambar api
kepunyaan komputer.
6. Kondisi
pemain kalah apabila bidak pohon
lebih sedikit dibandingkan bidak api kepunyaan
komputer.
7. Pemenang
adalah pemain yang memiliki bidak terbanyak pada papan permainan dan permainan
berakhir.
Script Game GothelloGreen menggunakan
Strawberry Prolog
Listing Program :
%=========================================================================%
% This game developed by Name :
Karyna Khaerani
% NPM :
54412038
% Class : 3IA12
% Fakultas :
Teknik Industri
% Jurusan :
Teknik Informatika
%
% Gunadarma University
%=========================================================================%
?-
%=========================
Background ====================================%
G_background1 is bitmap_image("pictures/backgroundsplashtimer.bmp",_),
G_background2 is bitmap_image("pictures/backgroundmenu.bmp",_),
%=========================================================================%
%=========================
Timer dan Splash Screen =======================%
window(G_pertama,_,window_pertama(_),"Window Timer
and Splash Screen",(100,200,800,400)).
window_pertama(init):-
G_batas := 1,
G_waktu is set_timer(_,1.0,fungsi_timer).
window_pertama(paint):-
draw_bitmap(0,0,G_background1,_,_).
fungsi_timer(end):-
G_batas := G_batas +1,
(G_batas = 2 -> close_window(G_pertama),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500)).
window_kedua(paint):-
draw_bitmap(0,0,G_background2,_,_).
%=========================================================================%
%===============================
Button Window Menu ==============================%
window_kedua(init):-
button(_,_,tombol_1(_),"Start",450,200,125,30),
button(_,_,tombol_2(_),"About",450,250,125,30),
button(_,_,tombol_3(_),"Exit",450,300,125,30).
%=================================================================================%
%==================================
Button Start =================================%
tombol_1(press):-
close_window(G_kedua),
beep("sound//simplesound"),
G_title is bitmap_image("pictures/game4.bmp",_),
set(sit([[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,w,b,w,n,n],[n,n,b,w,b,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n]])),
pen(3,rgb(0,255,0)),
window(G_ketiga,_,window_ketiga(_),"Window Game
GothelloGreen",100,50,1024,650).
window_ketiga(paint):-
draw_bitmap(0,0,G_title,_,_),
fail.
%=================================================================================%
%=================================
Deklarasi Menu Game ===========================%
window_ketiga(init):-
menu(pop_up,_,_,menu_game(_),"&Menu"),
menu(normal,_,_,menu_back(_),"&Back").
menu_game(init):-
menu(normal,_,_,menu_newgame(_),"&New
Game"),
menu(normal,_,_,menu_htp(_),"&How To
Play"),
menu(normal,_,_,menu_exit(_),"&Exit").
%=================================================================================%
%=================================
Button New Game ===============================%
menu_newgame(press):-
close_window(G_ketiga),
G_title is bitmap_image("pictures/game4.bmp",_),
set(sit([[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,w,b,w,n,n],[n,n,b,w,b,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n]])),
pen(3,rgb(0,255,0)),
window(G_ketiga,_,window_ketiga(_),"Window Game
GothelloGreen",100,50,1024,650).
window_ketiga(paint):-
draw_bitmap(0,0,G_title,_,_),
fail.
%=================================================================================%
%=============================
Button Back Menu ==================================%
menu_back(press):-
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
%=================================================================================%
%===========================
Button How To Play Menu =============================%
menu_htp(press):-
message("Rules", "Cara
Bermain:
1. Jepitlah bidak othello
lawan secara horizontal, vertikal atau diagonal.
2. Bidak othello yang
terjepit akan menjadi milik pemain yang menjepitnya.
3. Jika AI tidak dapat
meletakkan bidak, maka gilirannya akan digantikan oleh user.
4. Jika user tidak dapat
meletakkan bidak, maka permainan berakhir.
5. Pemain dengan jumlah
bidak othello terbanyak adalah pemenangnya.", i).
%=================================================================================%
%===========================
Button Exit Menu ====================================%
menu_exit(press):-
message("Pesan","Good Bye !!!",i),
beep("sound//exit"),
close_window(G_ketiga).
%=================================================================================%
%=============================
Garis Game ========================================%
window_ketiga(paint):-
brush(rgb(255,255,255)),
rect(50,50,400,400),
for(I,0,7),
X is I * 50 + 50,
line(X,50,X,400),
line(50,X,400,X),
fail.
%=================================================================================%
%===============================
Bidak AI ========================================%
window_ketiga(paint):-
brush("pictures//fire.bmp"),
sit(H),
for(J,0,7),
for(I,0,7),
take(H,Line,J),
take(Line,b,I),
X is I*50 + 50,
Y is J*50 + 50,
X1 is X + 50,
Y1 is Y + 50,
rect(X,Y,X1,Y1),
fail.
%=================================================================================%
%=================================
Bidak player ==================================%
window_ketiga(paint):-
brush("pictures//tree.bmp"),
sit(H),
for(J,0,7),
for(I,0,7),
take(H,Line,J),
take(Line,w,I),
X is I*50 + 50,
Y is J*50 + 50,
X1 is X + 50,
Y1 is Y + 50,
rect(X,Y,X1,Y1),
fail.
%=================================================================================%
%===========================
Kondisi WIN atau Lose ===============================%
window_ketiga(paint):-
brush(rgb(128,255,255)),
sit(H),
N1 is
count_successes(victory(w,H)),
N2 is
count_successes(victory(b,H)),
text_out(425, 525, "Tree :
"+print(N1)+" "),
text_out(50, 525, "Fire :
"+print(N2)+" "),
(N1>N2, N1+N2<49 ->
text_out(155,450, " Info : Yeeyy, You Win ")
else(N1>N2, N1+N2 =:=49 ->
ask1
else (N1=\= 2, N2=\= 2, N1=N2, N1+N2<49->
text_out(145,450, " Info : Heemmmm, Draw ")
else (N1 = N2, N1+N2 =:=49 ->
ask3
else (N1<N2, N1+N2<49 ->
text_out(150,450, " Info : Sorry, You Lose ")
else (N1 < N2, N1+N2=:=49 ->
ask2
)))))).
%=================================================================================%
%===================================
Pesan =======================================%
ask1:-
message("End
Game","Congratulations...",i),
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
ask2:-
message("You
Lose","On Fire",i),
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
ask3:-
message("End
Game","Fire and Tree Balance",i),
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
%=================================================================================%
window_ketiga(mouse_click(X,Y)):-
X1 is (X - 40) // 50,
Y1 is (Y - 40) // 50,
X1 >= 0,
X1 =< 6,
Y1 >= 0,
Y1 =< 6,
sit(Sit1),
insert(X1,Y1,w),
sit(Sit2),
not(Sit1=Sit2),
window_ketiga(paint),
wait(1),
take3(Sit2,n,X2,Y2),
insert(X2,Y2,b),
sit(Sit3),
not(Sit2=Sit3),
window_ketiga(paint).
insert(X,Y,Who):-%trace,
sit(Sit),
take2(Sit,n,X,Y),
opposit(Who,NewWho),
for(WayX,-1,1),
for(WayY,-1,1),
sit(Sit2),
neighbour(NewWho,X,Y,Sit2,WayX,WayY),
jump(NewWho,X,Y,Sit2,WayX,WayY,NewX,NewY),
replace3(Result,Sit2,Who,X,Y,NewX,NewY,WayX,WayY),
set(sit(Result)),
fail.
insert(X,Y,Who).
neighbour(Who,X,Y,Sit,WayX,WayY):-
X1 is X+ WayX,
Y1 is Y+ WayY,
take2(Sit,Who,X1,Y1).
jump(Who,X,Y,Sit,WayX,WayY,X2,Y2):-
X1 is X+ WayX,
Y1 is Y+ WayY,
opposit(Who,NewWho),
neighbour(NewWho,X1,Y1,Sit,WayX,WayY),
X2 is X1+ WayX,
Y2 is Y1+ WayY.
jump(Who,X,Y,Sit,WayX,WayY,NewX,NewY):-
X1 is X+ WayX,
Y1 is Y+ WayY,
neighbour(Who,X1,Y1,Sit,WayX,WayY),
jump(Who,X1,Y1,Sit,WayX,WayY,NewX,NewY).
take3(Sit,El,0,0):-
take2(Sit,El,0,0).
take3(Sit,El,0,6):-
take2(Sit,El,0,6).
take3(Sit,El,6,0):-
take2(Sit,El,6,0).
take3(Sit,El,6,6):-
take2(Sit,El,6,6).
take3(Sit,El,X,Y):-
take2(Sit,El,X,Y).
take2(Sit,El,X,Y):-
take(Sit,Row,Y),
take(Row,El,X).
replace2(Result,Sit,El,X,Y):-
take(Sit,Line,Y),
replace(NewLine,Line,El,X),
replace(Result,Sit,NewLine,Y).
replace3(Result,Result,Who,X,Y,X,Y,WayX,WayY).
replace3(Result,Sit,Who,X,Y,ToX,ToY,WayX,WayY):-
replace2(ResultP,Sit,Who,X,Y),
X1 is X + WayX,
Y1 is Y + WayY,
replace3(Result,ResultP,Who,X1,Y1,ToX,ToY,WayX,WayY).
replace([New,B,C,D,E,F,G],[_,B,C,D,E,F,G],New,0).
replace([A,New,C,D,E,F,G],[A,_,C,D,E,F,G],New,1).
replace([A,B,New,D,E,F,G],[A,B,_,D,E,F,G],New,2).
replace([A,B,C,New,E,F,G],[A,B,C,_,E,F,G],New,3).
replace([A,B,C,D,New,F,G],[A,B,C,D,_,F,G],New,4).
replace([A,B,C,D,E,New,G],[A,B,C,D,E,_,G],New,5).
replace([A,B,C,D,E,F,New],[A,B,C,D,E,F,_],New,6).
take([El,_,_,_,_,_,_],El,0).
take([_,El,_,_,_,_,_],El,1).
take([_,_,El,_,_,_,_],El,2).
take([_,_,_,El,_,_,_],El,3).
take([_,_,_,_,El,_,_],El,4).
take([_,_,_,_,_,El,_],El,5).
take([_,_,_,_,_,_,El],El,6).
victory(Who,[[Who,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,Who,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,Who,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,Who,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,Who,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,Who,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,Who],_,_,_,_,_,_]).
victory(Who,[_,[Who,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,Who,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,Who,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,Who,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,Who,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,Who,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,Who],_,_,_,_,_]).
victory(Who,[_,_,[Who,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,Who,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,Who,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,Who,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,Who,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,Who,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,Who],_,_,_,_]).
victory(Who,[_,_,_,[Who,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,Who,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,Who,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,Who,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,Who,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,Who,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,Who],_,_,_]).
victory(Who,[_,_,_,_,[Who,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,Who,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,Who,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,Who,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,Who,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,Who,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,Who],_,_]).
victory(Who,[_,_,_,_,_,[Who,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,Who,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,Who,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,Who,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,Who,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,Who,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,Who],_]).
victory(Who,[_,_,_,_,_,_,[Who,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,Who,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,Who,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,Who,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,Who,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,Who,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,Who]]).
opposit(b,w).
opposit(w,b).
%===================================
Button About ================================%
tombol_2(press):-
close_window(G_kedua),
beep("sound//simplesound"),
G_title is bitmap_image("pictures/about.bmp",_),
window(G_keempat,_,window_keempat(_),"Window
About",100,100,600,400).
window_keempat(paint):-
draw_bitmap(0,0,G_title,_,_),
fail.
window_keempat(init):-
menu(normal,_,_,menu_back(_),"&Back").
menu_back(press):-
close_window(G_keempat),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
fail.
%=================================================================================%
%================================
Button Exit ====================================%
tombol_3(press):-
beep("sound//simplesound"),
message("Pesan","Good Bye !!!",i),
beep("sound//exit"),
close_window(G_kedua).
%=================================================================================%
Tidak ada komentar:
Posting Komentar