Sabtu, 10 Mei 2014

Progres Game Kriting Wajik 5x5

KECERDASAN BUATAN
Kecerdasan Buatan dimunculkan oleh seorang professor dari Massachusetts Institute of Technology (MIT) yang bernama John McCarthy pada tahun 1956 pada saat Dart Mouth Conference yang dihadiri oleh para peneliti AI.
  • Definisi Kecerdasan Buatan
Banyak cara untuk mendefinisikan Kecerdasan Buatan, diantaranya adalah:
ü  Suatu studi yang mengupayakan bagaimana agar computer berlaku cerdas.
ü  Studi yang membuat komputer dapat menyelesaikan persoalan yang sulit.
Kecerdasan Buatan (Artificial Intelligence) adalah Teknologi yang mensimulasikan kecerdasan manusia, yaitu bagaimana mendefinisikan dan mencoba menyelesaikan persoalan menggunakan komputer dengan meniru bagaimana manusia menyelesaikan dengan cepat.
Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin (komputer) agar dapat melakukan pekerjaan seperti yang dapat dilakukan manusia. Beberapa macam bidang yang menggunakan kecerdasan buatan antara lain sistem pakar, permainan komputer (games), logika fuzzy, jaringan syaraf tiruan dan robotika.

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  dan Wajik
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 untuk memulai permainan, dan waktu akan berjalan mundur selama 15 detik.
  2. Help                 : jika menu ini di klik maka akan ada kotak dialog sebagai penjelasan yang 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.
  3. 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.




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


  1. 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 komentar: