Kamis, 11 Juni 2015

Script Game GothelloGreen menggunakan Strawberry Prolog

Script Game GothelloGreen menggunakan Strawberry Prolog

Tokoh-tokoh dalam game :
Description: fire  Bidak Api ( AI )           
Description: tree  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