Monday, June 30, 2014

Progres Game Kriting Wajik 5x5

·         Initial State
Initial state dalam game TicTacToe 5x5 ini akan menampilkan arena permainan dengan papan kotak-kotak yang berdimensi 5x5, dimana terdapat 5 baris dan 5 kolom. Objek yang akan bermain dalam game ini adalah “user” atau pemain dan komputer yang telah diberi AI. TicTacToe yang saya buat ini sedikit berbeda dengan kebanyakan game sejenis yang ada. Pada permainan TicTacToe yang umum biasanya menggunakan X dan O sebagai simbol dari pemain dan komputer. Sedangkan pada game yang buat akan sedikit dimodifikasi karena saya menggunakan tema TinkerBell dengan simbol X dan O yang diganti dengan gambar Kriting  danWajik
Penggunaan tema game yang berbeda dari yang umum digunakan dimaksudkan untuk menghilangkan kejenuhan pada pemainnya. Karena game ini merupakan salah satu permainan asah otak yang baik diterapkan kepada anak-anak dalam masa perkembangannya, maka mengganti tema game saya pilih untuk lebih menarik minat pemainnya.
Didalam game ini terdapat menu yang terdapat dibagian atas kotak permainan, antara lain :
  1. New Game       : jika menu ini di klik maka menandakan pemain sudah siap
untukmemulai permainan, dan waktu akan berjalan mundur selama 15 detik.
  1. Help                 : jika menu ini di klik maka akan ada kotak dialog sebagai penjelasanyang
harus dilakukan dalam game ini.
  1. Exit                  : untuk keluar dari permainan.
  2. Music               : jika menu ini di klik maka akan terdengar backsound saat kita
memainkan game ini.
  1. Stop                 : jika menu ini di klik maka backsound saat kita memainkan game ini akan
Berhenti

·         Tampilan saat Game dijalankan

·         Tampilam Awal Game

·         Tampilan Tanpa New Game

·         Tampilan New Game

·         Tampilan Menu Help

·         Tampilan Waktu Habis


·         Listing Program

win_deep(0). % You can change this two numbers to make the AI more clever
nolose_deep(0).

?- 
G_BG is bitmap_image("latar4.bmp",_),
G_A is bitmap_image("kriting.bmp",_),
G_B is bitmap_image("wajik.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]])),
  set(lose_flag(false)),
  brush(system_color(window)),
  window_n( _, _, win_func,"Kriting Wajik", 10, 10, 430, 450,_,_,rgb(0,0,0)),
  message("Mulai permainan","untuk memulai permainan klik new game",i).

win_func(init) :-
  window_brush(_,rgb(100,250,250)),
  menu( normal, _, _, menu_new(_), "&New Game"),
  menu( normal, _, _, menu_help(_), "&Help"),
  menu( normal, _, _, menu_exit(_), "&Exit"),
  menu(normal,_,_,music(_),"&music"),
  menu(normal,_,_,stop(_),"&stop").

music(press) :-
  execute("sound\\1.exe"),
  fail.

stop(press) :-
  execute("sound\\d.bat"),
  close_window(parent(_)).

menu_new(press) :-
  G_Interval:=1,
  G_Time:=25,
  G_Time2:=1,
  G_Timer := set_timer(_, G_Interval, time_func),
  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]])),
  set(lose_flag(false)),
  update_window(_).
%Deklarasi waktu
time_func(end) :-
  G_Time=0, !,
  kill_timer(_, G_Timer),
  message("waktu habis","maaf waktu anda habis",i),
  close_window(_),
  execute("sound\\d.bat"),
  fail.

time_func(end) :-
                G_Time2 :=1,
                G_Time2 :=G_Time,
                G_Time := G_Time - 1,
                color_text(_, rgb(0,0,0)),
                font(12,20,"Arial"),
                text_out(185,5, "Time Left  "+ G_Time),
                fail.

time_func(end) :-
  G_Time2:=G_Time2 - 1,
  fail.

menu_help(press) :-
  message("Options","Membuat Garis Lurus Vertical, Horizontal atau Diagonal", i).

menu_exit(press) :-
  execute("sound\\d.bat"),
  close_window(_).


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) :-
  %line(X1, Y1, X2, Y2),
  %line(X2, Y1, X1, Y2).
  draw_bitmap(X1, Y1, G_B, _, _).

write_mark(o, X1, Y1, X2, Y2) :-
  %ellipse(X1, Y1, X2, Y2).
  draw_bitmap(X1, Y1, G_A, _, _).


win_func(paint) :-  
   pen(2, rgb(255, 255, 255)),   % grey
   draw_bitmap(0, 0, G_BG, _, _),
   line(30, 30, 30, 330),
   line(30, 330, 330, 330),
   line(30, 270, 330, 270),
   line(330, 330, 330, 30),
   line(330, 30, 30, 30),
   line(90, 30, 90, 330),
   line(150, 30, 150, 330),
   line(210, 30, 210, 330),
   line(30, 90, 330, 90),
   line(30, 150, 330, 150),
   line(30, 210, 330, 210),
   line(270,30, 270,330),

   pen(4, rgb(255, 128, 192)),   % pink
   put_mark(x),
   pen(4, rgb(0, 128, 255)),   % blue
   put_mark(o),
   
   fail.

win_func(mouse_click(X, Y)) :- 
  lose_flag(false),
  X>30, Y>30,
  X<330, Y<330,
  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.

think(Pos) :-
  victory(x, Pos), !,
  set(lose_flag(true)),
  beep("sound\\tepuk.wav"),
  message("Selamat","Anda Menang", !).

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) :-
  move(o, Pos, Sit2),
  nolose(x, Sit2, Deep), !, % 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("sound\\ketawa.wav"),
  message("Maaf","Anda Kalah", s).

is_it_win(Sit2) :-
  win_deep(Deep),
  win(x, Sit2, Deep),
  set(pos(Sit2)),
  not(win_func(paint)).

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


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


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

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

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

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)).

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, _).


·         Goal
            Tujuan (goal) untuk menyelesaikan permainan ini adalah membuat sebuah garis lurus yang terdiri 5 kotak deretan simbol secara vertical, horizontal maupun diagonal.
Terdapat beberapa kondisi yang mungkin terjadi pada permainan ini, yaitu :
1.      KONDISI MENANG
Kondisi menang terjadi apabila kita berhasil membentuk sebuah garis lurus yang terdiri dari 5 buah simbol Kucing, baik secara horizontal, vertikal maupun diagonal.




2.      KONDISI KALAH
Kondisi kalah yang pertama terjadi apabila kita tidak berhasil membentuk 5 buah simbol Kucing secara horizontal, vertikal ataupun diagonal. Atau kondisi dimana AI menang terlebih dahulu.




3.      KONDISI SERI
Kondisi seri terjadi apabila semua kotak telah terisi tetapi belum ada yang bisa membentuk 5 buah simbol secara berurutan secara vertikal, horizontal maupun diagonal. 




·         Daftar Pustaka

  1. http://en.wikipedia.org/wiki/Tic-tac-toe
  2. http://bungatiarakaristi.blogspot.com/2012/05/algoritma-permainan-pada-tictactoe-5x5.html
  3. http://en.wikipedia.org/wiki/Prolog


Nama : Ivan Muhammad Rifai
NPM : 53411756
Kelas : 3IA11

No comments:

Post a Comment