Selasa, 06 Mei 2014

Game SpongesBob serta penjelasannya

Nama Kelompok :
Desty Putri A
Priskyla Vivi
Rocky D
Syara
Yerni



Daftar Isi


Daftar Isi                    ………………………………………………………….       1
Initial State                ………………………………………………………….       2
Rules                         ………………………………………………………….       3
Goal                            ………………………………………………………….       4-5
Konsep AI                 ………………………………………………………….       6
Listing Program        ................................................................................      7-14
Daftar Pustaka         ………………………………………………………….       15
Glosarium                  ………………………………………………………….       16











1
INITIAL STATE

Initial State yang digunakan untuk membuat program Tic Tac Toe atau SQUARE adalah pembuatan papan permainanya. Pada papan permainan tersebut menggunakan papan 2 dimensi yang berukuran 7 x 7. Game Tic-Tac-Toe merupakan permainan yang terdapat di strawberry prolog yang diatur kembali logika dalam prolog agar user dan AI komputer dapat bermain dengan baik yang diolah agar user dan AI komputer dapat meraih yang sesuai diinginkan. Game ini akan mengasah otak pemainnya untuk bisa mengalami kondisi yang diharapkan. Pemain dipaksa untuk menerapkan strategi yang tepat untuk memenangkan game ini. Permainan ini hanya dapat dimainkan oleh satu pemain, sedangkan Komputer bertindak sebagai lawan. Kondisi awal pada Game SQUARE adalah suatu papan yang terdiri dari tujuh kolom dan tujuh baris. Tujuan dari game ini adalah membentuk suatu garis baik itu horizontal, vertikal maupun diagonal untuk dapat dimainkan oleh user maupun AI komputer. Dimana objek yang dilambangkan dengan spongesbob dengan berbeda motif antara user dan AI komputer agar perlawanan terlihat jelas. Pada game ini, user mendapat giliran yang pertama.









2
RULES

Berikut ini adalah aturan dalam permainan SQUARE :
  1. Pada games ini papan terbentuk atas 7 kolom dan 7 baris (7x7).
  2. User dilambangkan dengan objek spongebob dan AI Computer dilambangkan dengan spongebob juga tetapi dengan motif yang berbeda.
  3. User bermain terlebih dahulu, dan memiliki kebebasan untuk menaruh objek di salah satu setiap kotak 7 x 7 tersebut.
  4. Setelah itu AI Computer mendapat giliran selanjutnya.
  5. AI Computer berusaha untuk menghalangi user membentuk garis horizontal, vertikal maupun diagonal tujuan untuk user tidak dapat meraih kemenangan . Begitupun sebaliknya, user juga akan menghalangi AI Computer membentuk garis horizontal, vertikal maupun diagonal dengan tujuan yang sama.
  6. Pemenangnya ditentukan berdasarkan pemain pertama yang dapat membentuk secara berhimpitan garis vertikal, horisontal atau diagonal.
  7. Jika tidak ada pemain yang dapat membentuk garis vertikal, horizontal, atau diagonal secara berhimpitan,  maka permainan berakhir seri (draw).
















3

GOALS

Goal atau tujuan permainan SQUARE ini agar meraih kemenangan. Pemain dikatakan menang apabila berhasil membentuk garis baik vetikal, horizontal maupun diagonal secara berhimpitan.
Akan tetapi, apabila tidak ada pemain yang berhasil mencapai goal, maka permainan berakhir seri. Maka dari itu, pemain berusaha untuk bisa bermain dengan logika agar bisa meraih kemenangan.
Contoh kondisi permainan SQUARE :

1.    Kondisi USER menang










4
2.    Kondisi AI komputer menang atau USER kalah


3.    Kondisi seri






5
KONSEP AI (Artificial Intelligence)

            Artificial Intelligence atau kecerdasan buatan digunakan dalam permainan ini, yaitu diletakkan pada komputer yang bertindak sebagai lawan dari user dimana AI komputer layaknya seperti perlawanan dengan manusia. Hal ini dikarenakan komputer selain berusaha membuat goal dan menghalangi jalannya user dalam membuat goal. Sehingga user berusaha untuk bisa menghalangi jalannya komputer hingga mencapai goal atau tujuan.
Permainan ini dimainkan dengan dua pemain dan menggunakan algoritma minimax. Algoritma minimax merupakan sebuah algoritma DFS(Depth First Search), dimana algoritma minimax dapat memutuskan langkah terbaik yang harus dilakukan computer. Keuntungan yang didapat dengan menggunakan algoritma minimax yaitu mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan keputusan yang terbaik karena algoritma minimax ini bekerja secara rekursif dengan mencari langkah yang akan membuat lawan mengalami kerugian minimum. Semua strategi lawan akan dihitung dengan algoritma yang sama dan seterusnya.Hal ini menyebabkan user mendapat keuntungan minimum dan komputer mendapat keuntungan maksimum, karena komputer akan selalu menghalangi setiap langkah user. Selain menghalangi, komputer juga memikirkan cara untuk menang dalam setiap analisis pergerakan yang harus dilakukan.
Pada permainan ini, tujuannya adalah membuat objek tersebut sejajar baik itu horizontal, vertical, atau diagonal secara berhimpit. Sehingga pada permainan tic tac toe ini digunakan nilai berupa menang, seri, dan kalah. Dari langkah-langkah inilah komputer akan menentukan simpul mana dari pohon permainan yang akan dipilih, tentunya simpul yang akan dipilih tersebut adalah simpul dengan tahap-tahp logika yang akan menuntun permainan ke hasil akhir yang menguntungkan bagi komputer maupun user. Hingga bisa memainkan dan mendapat hasil menang, seri dan kalah.





6
LISTING PROGRAM

%This game is developed by Desty Putri A.
%3IA16 - Gunadarma University

win_deep(0).  % semakin besar kedua nilai ini semakin pintar AI%
nolose_deep(0).

?-
%=========Deklarasi Gambar==========%
G_background is bitmap_image("images.bmp",_),
G_x is bitmap_image("spong.bmp",_),
G_o is bitmap_image("spong1.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,f],
            [f,f,f,f,f,f,f], [f,f,f,f,f,f,f], [f,f,f,f,f,f,f]])),
   set(lose_flag(false)),
   brush(system_color(window)),
   window( _, _, win_func(_), "SQUARE", 30, 90, 500, 520).
  
%=======Window Button Main==========%
win_func(init) :-
  menu(normal, _, _, menu_new(_), "&New Game"),
  menu(normal,_,_,menu_help(_),"Help"),
  menu(normal,_,_,about(_),"About"),
  menu(normal, _, _, menu_exit(_), "&Exit").

put_mark(Mark) :-
   pos(Current_Pos),
   member(Current_Pos, L, Y),
   member(L, Mark, X),
   X1 is 40 + 60*X, Y1 is 40 + 60*Y, X2 is X1 + 40, Y2 is Y1 +40,
   write_mark(Mark, X1, Y1, X2, Y2),
   fail.
put_mark(_).

write_mark(x, X1, Y1, X2, Y2) :-
  draw_bitmap(X1, Y1,G_o, _, _).
write_mark(o, X1, Y1, X2, Y2) :-
  draw_bitmap(X1, Y1,G_x, _, _).





7
%=======window papan permainan======%
win_func(paint) :-
      draw_bitmap(30,30,G_background,_,_),
pen(4, rgb(0, 0, 0)),   % black
   %line(30, 30, 510, 30),% garis horizonta
   line(30, 90, 450, 90),
   line(30, 150, 450, 150),
   line(30, 210, 450, 210),
   line(30, 270, 450, 270),
   line(30, 330, 450, 330),
   line(30, 390, 450, 390),
   line(30, 450, 450, 450),
   %line(30, 510, 450, 510),
  
   %line(30, 30, 30, 510),% garis vertikal
   line(90, 50, 90, 450),
   line(150, 50, 150, 450),
   line(210, 50, 210, 450),
   line(270, 50, 270, 450),
   line(330, 50, 330, 450),
   line(390, 50, 390, 450),
   %line(510, 30, 510, 450),


   pen(4, rgb(255, 0, 0)),   % red
   put_mark(x),
   pen(4, rgb(0, 0, 255)),   % blue
   put_mark(o),
   fail.

win_func(mouse_click(X, Y)) :-
  lose_flag(false),
  X>30, Y>30,
  X<510, Y<510,
  X1 is (X - 30)//60,
  Y1 is (Y - 30)//60,
  pos(Current_Pos),
  member(Current_Pos, L, Y1),
  member(L, f, X1),
  !,
  replace(L2, L, x, X1),
  replace(Current_Pos2, Current_Pos, L2, Y1),
  set(pos(Current_Pos2)),
  not(win_func(paint)),
  think(Current_Pos2).

win_func(mouse_click(X, Y)) :-
  beep.


8

think(Pos) :-
  victory(x, Pos), !,
  set(lose_flag(true)),
  message("You win","Congrats",!).
think(Pos) :-
  try_to_win(Pos), !.
think(Pos) :-
  retractall(last_good_move(_)), try_nolose(Pos).
think(_) :-
  last_good_move(Sit2), !,
  set(pos(Sit2)),
  not(win_func(paint)).
think(Pos) :-
  message("Nice", "Keep Spirit!!", n),
  move(o, Pos, Sit2),
  nolose(x, Sit2, 0), !, % Tries to make the lose farther
  set(pos(Sit2)),
  not(win_func(paint)).
think(Pos) :-
  move(o, Pos, Sit2),
  set(pos(Sit2)),
  not(win_func(paint)).

try_nolose(Pos) :-
  move(o, Pos, Sit2),
  nolose_deep(Deep),
  nolose(x, Sit2, Deep),
  set(last_good_move(Sit2)),
  random(3)=:=0, !, fail. % this makes the game more interesting

try_to_win(Pos) :-
  move(o, Pos, Sit2),
  is_it_win(Sit2).

is_it_win(Sit2) :-
  victory(o, Sit2),
  set(pos(Sit2)),
  not(win_func(paint)),
  set(lose_flag(true)),
  beep("suara ketawa.wav"),
  message("Sorry","You lose!",s).
is_it_win(Sit2) :-
  win_deep(Deep),
  win(x, Sit2, Deep),
  set(pos(Sit2)),
  not(win_func(paint)),
  message("Please","Give up",i).

9
member([Element, _, _, _, _, _, _], Element, 0).
member([_, Element, _, _, _, _, _], Element, 1).
member([_, _, Element, _, _, _, _], Element, 2).
member([_, _, _, Element, _, _, _], Element, 3).
member([_, _, _, _, Element, _, _], Element, 4).
member([_, _, _, _, _, Element, _], Element, 5).
member([_, _, _, _, _, _, Element], Element, 6).

replace([Element, A, B, C, D, E, F], [_, A, B, C, D, E, F], Element, 0).
replace([A, Element, B, C, D, E, F], [A, _, B, C, D, E, F], Element, 1).
replace([A, B, Element, C, D, E, F], [A, B, _, C, D, E, F], Element, 2).
replace([A, B, C, Element, D, E, F], [A, B, C, _, D, E, F], Element, 3).
replace([A, B, C, D, Element, E, F], [A, B, C, D, _, E, F], Element, 4).
replace([A, B, C, D, E, Element, F], [A, B, C, D, E, _, F], Element, 5).
replace([A, B, C, D, E, F, Element], [A, B, C, D, E, F, _], Element, 6).

%======kondisi menang horizontal======%
victory( Who, [[Who, Who, Who, Who, Who, Who, Who],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [Who, Who, Who, Who, Who, Who, Who],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [Who, Who, Who, Who, Who, Who, Who],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).





10
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [Who, Who, Who, Who, Who, Who, Who],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [Who, Who, Who, Who, Who, Who, Who],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [Who, Who, Who, Who, Who, Who, Who],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [Who, Who, Who, Who, Who, Who, Who]]).

%=========kondisi menang vertikal=======%
victory( Who, [[Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _]]).
victory( Who, [[_, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _]]).
victory( Who, [[_, _, Who, _, _, _, _],
               [_, _, Who, _, _, _, _],
               [_, _, Who, _, _, _, _],
               [_, _, Who, _, _, _, _],
               [_, _, Who, _, _, _, _],

11
               [_, _, Who, _, _, _, _],
               [_, _, Who, _, _, _, _]]).
victory( Who, [[_, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _]]).
victory( Who, [[_, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _]]).
victory( Who, [[_, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _]]).
victory( Who, [[_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who]]).


%=====kondisi menang diagonal 7 kotak====%
victory( Who, [[Who, _, _, _, _, _, _, _],
               [_, Who, _, _, _, _, _, _],
               [_, _, Who, _, _, _, _, _],
               [_, _, _, Who, _, _, _, _],
               [_, _, _, _, Who, _, _, _],
               [_, _, _, _, _, Who, _, _],
               [_, _, _, _, _, _, Who, _],
               [_, _, _, _, _, _, _, Who]]).
victory( Who, [[_, _, _, _, _, _, _, Who],
               [_, _, _, _, _, _, Who, _],
               [_, _, _, _, _, Who, _, _],
               [_, _, _, _, Who, _, _, _],
               [_, _, _, Who, _, _, _, _],
               [_, _, Who, _, _, _, _, _],
               [_, Who, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _, _]]).

12

%====kondisi menang diagonal 4 kotak ====%
victory( Who, [[_, _, _, Who, _, _, _],
               [_, _, Who, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, Who, _, _, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, Who],
               [_, _, _, _, _, Who, _],
               [_, _, _, _, Who, _, _],
               [_, _, _, Who, _, _, _]]).
victory( Who, [[_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [_, _, _, _, _, _, _],
               [Who, _, _, _, _, _, _],
               [_, Who, _, _, _, _, _],
               [_, _, Who, _, _, _, _],
               [_, _, _, Who, _, _, _]]).

win( o, Sit, Deep) :- move(o, Sit, Sit2), win(x, Sit2, Deep).
win( x, Sit, _) :- victory(o, Sit).
win( x, Sit, 0) :- !, fail.
win( x, Sit, Deep) :- Deep1 is Deep - 1, not(nowin( x, Sit, Deep1)).

nowin(x, Sit, _) :- not(move(Sit)). % the last move belongs to O
nowin(x, Sit, Deep) :- move(x, Sit, Sit2), nowin(o, Sit2, Deep).
nowin( o, Sit, _) :- victory(x, Sit).
nowin(o, Sit, Deep) :- not(win(o, Sit, Deep)).

lose( x, Sit, Deep) :- move(x, Sit, Sit2), lose(o, Sit2, Deep).
lose( o, Sit, _) :- victory(x, Sit).
lose( o, Sit, 0) :- !, fail.
lose( o, Sit, Deep) :- Deep1 is Deep - 1, not(nolose( o, Sit, Deep1)).
13
nolose(o, Sit, Deep) :- move(o, Sit, Sit2), nolose(x, Sit2, Deep).
nolose( x, Sit, _) :- victory(o, Sit).
nolose(x, Sit, _) :- not(move(Sit)). % the last move belongs to O
nolose(x, Sit, Deep) :- not(lose(x, Sit, Deep)).

move(P, Sit, Sit2) :-
  member(Sit, L, Y),
  member(L, f, X),
  replace(L2, L, P, X),
  replace(Sit2, Sit, L2, Y).

move(Sit) :-
  member(Sit, L, _),
  member(L, f, _).

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,f],
            [f,f,f,f,f,f,f], [f,f,f,f,f,f,f], [f,f,f,f,f,f,f]])),
  set(lose_flag(false)),
  update_window(_).

about(press):-
     message("About","Tic Tac Toe Spidey Trap by Desty Putri Arifin, 3IA16, 51411913",i).

menu_help(press):-
     message("Help","Tempatkan ikon Spong dengan cara meng-klik di salah satu kotak. Susun hingga membentuk sebuah garis terdiri dari 7 simbol secara vertikal, horizontal ataupun 4 simbol diagonal dikotak keempat.",i).

%===========Window Exit=============%
menu_exit(press) :-
  close_window(_).
    win_func(close):-  %----> isi menu keluar
    ask.
    ask:-
    yes_no( "Exit","i'm give up", ?),
    !,message("Yes", "try again!",!),
    end.
    ask:-
    message("No", "let's play again!", s).




14
DAFTAR PUSTAKA





























15
GLOSARIUM

-      Algoritma Minimax
            Algoritma minimax merupakan basis dari semua permainan berbasis AI seperti permainan tictactoe misalnya. Pada algoritma minimax, pengecekan akan seluruh kemungkinan yang ada sampai akhir permainan dilakukan. Pengecekan tersebut akan menghasilkan pohon permainan yang berisi semua kemungkinan tersebut. Keuntungan yang didapat dengan menggunakan algoritma minimax yaitu mampu menganalisis segala kemungkinan posisi permainan untuk menghasilkan keputusan yang terbaik karena algoritma minimax ini bekerja secara rekursif dengan mencari langkah yang akan membuat lawan mengalami kerugian minimum. Semua strategi lawan akan dihitung dengan algoritma yang sama dan seterusnya.
             Ini berarti, pada langkah pertama komputer akan menganalisis seluruh pohon permainan. Dan untuk setiap langkahnya, komputer akan memilih langkah yang paling membuat lawan mendapatkan keuntungan minimum, dan yang paling membuat komputer itu sendiri mendapatkan keuntungan maksimum. Dalam penentuan keputusan tersebut dibutuhkan suatu nilai yang merepresentasikan kerugian atau keuntungan yang akan diperoleh jika langkah tersebut dipilih. Untuk itulah disini digunakan tahap logika untuk mengevaluasi nilai sebagai nilai yang merepresentasikan hasil permainan yang akan terjadi jika langkah tersebut dipilih.
            Biasanya pada permainan tic tac toe ini digunakan nilai 1,0,-1 untuk mewakilkan hasil akhir permainan berupa menang, seri, dan kalah. Dari langkah-langkah inilah komputer akan menentukan simpul mana dari pohon permainan yang akan dipilih, tentunya simpul yang akan dipilih tersebut adalah simpul dengan tahap-tahp logika yang akan menuntun permainan ke hasil akhir yang menguntungkan bagi komputer maupun user.




16