Thursday, July 3, 2014

MANUAL BOOK



 INITIAL STATE

  Minion Matchess pada dasarnya sama seperti game matchess pada umumnya, atau yang biasa disebut game korek api. Namun pada permainan Minion Matchess kali ini terdapat beberapa pengembangan pada tampilannya, seperti icon korek api yang diubah menjadi icon minion, background yang menarik, dan juga terdapat menu, level, dan sound. Matches merupakan permainan yang menggunakan kecerdasaan buatan (AI). Dimana masing-masing player dituntut untuk mengalahkan AI yang telah di buat. Kita harus menentukan langkah yang benar untuk bisa mengalahkan AI, jika kita salah langkah, maka kita akan kalah melawan AI. Perlu diketahui disini AI pada game ini sangat sulit di kalahkan, kemungkinan untuk di kalahkan yaitu sekitar 10%. Di game ini ada  2 pilihan, yaitu computer terlebih dahulu, atau player yang maju dahulu. Jika kita ingin menang melawan AI, di haruskan kita tidak boleh mengambil ikon paling terakhir, atau kita akan kalah dari AI.

Histori dari game ini adalah ketika saya diharuskan membuat atau mengembangkan sebuah game, singkat kata saya memilih game ini karena simple dan didalam game ini terdapat konsep AI. Karena pada tampilan awal game ini hanya biasa saja, saya tertarik untuk mengembangkan game ini agar lebih menarik dengan cara mengganti ikon, menambahkan suara dan mengubah beberapa perintah menjadi Bahasa Indonesia. Disini saya mengubah game tersebut dengan tema Barcelona FC, itu dikarenakan Barcelona FC adalah club favorit saya, diharapkan juga game ini agar menarik perhatian para penggemar Barcelona. Itulah kenapa game ini saya beri nama “Cules Matches”. Cules sendiri adalah sebutan untuk fans Barcelona. Begitulah cerita singkat saya kenapa saya memilih matches sebagai syarat sidang dalam praktikumm kecerdasaan buatan ini.

Permainan dimulai dengan menekan tombol pilihan, disitu akan terlihat pilihan, computer dahuli atau kita yang terlebih dahulu. Disini saya memilih untuk maju terlebih dahulu, player pertama akan memilih salah satu ikon yang akan dihilangkan. Berikutnya untuk CPU yang memilih untuk ikon mana yang akan dipilih untuk maju. Jika player yang mengambil batang terakhir, maka pemain akan kalah, tapi jika AI yang mengambil batang terakhir maka AI akan kalah. Namun disini AI sangat sulit dikalahkan. Kita bisa mengambil berapapun batang yamg kita inginkan tapi harus berada dalam satu kolom, begitu juga computer.


Berikut ini merupakan rancangan tampilan pada permainan minion matchess.
Tampilan Awal :
Ukuran Layar Awal 550 x 300.
Button Start Game dan Exit.











Tampilan Kedua :
















Keterangan :
1.      Ukuran Layar Kedua 1100 x 550.
2.      Gambar :             ,    Merupakan icon korek api yang telah diubah

3.      -     Menubar New Game untuk memulai permainan baru.
-     Menubar Level Kesuliatan untuk memilih bentuk pola icon yang lebih sulit.
-    
Menubar About digunakan untuk melihat data diri/profil pembuat game.
-          Menubar Help digunakan untuk melihat Cara bermain.
-          Menubar Exit digunakan untuk keluar dari permainan.

Tampilan Saat permainan sedang Berlangsung :

Tampilan Bantuan Permainan :

Permainan ini dimulai ketika kita (player 1)   telah menekan/memilih jumlah icon kacamata minion yang ingin kita hilangkan. Cara untuk mengambil lebih dari satu kacamata adalah dengan mengambil icon bagian bawah. Berikutnya adalah giliran AI untuk mengambil icon. Kedua player bergantian mengambil icon kacamata hingga akhirnya tersisa satu icon. Player yang mengambil icon kacamata terakhir dinyatakan kalah.













RULES
·         Identifikasi ruang keadaan:
Permasalahan ini dapat dilambangkan dengan (
icon yang terdapat dalam permainan ini berjumlah 5 baris dan 5 kolom, terdapat pula pola icon yang lebih sulit dan bisa kita lihat pada Menu Bar ‘Level Kesulitan’, dan pemain hanya terdiri dari user dan computer).

·         Keadaan awal & tujuan:
Keadaan Awal = Tampilan
background permainan dan ikon kacamata minion 5x5
Keadaan Tujuan =
Bagi yang mengambil icon terakhir, dialah yang kalah.

·         Aturan-aturan
  1. Dimainkan oleh dua pemain. Pemain pertama (user) memulai langkah awal dengan mengambil beberapa icon dengan cara meng klik icon tersebut. Dan dilanjutkan oleh AI.
  2. Kita({Player 1) harus menyusun strategi agar dapat menyisakan satu icon yang nantinya akan diambil oleh AI, dan kita dinyatakan sebagai pemenang. Dan begitu pula sebaliknya.
  3. Pada permainan ini, baik player ataupun AI, hanya diberikan kesempatan jalan sebanyak 1 kali dalam menentukan langkah secara bergiliran.
  4. Kita hanya bisa mengambil ikon secara kolom, yang terakhir memilih adalah yang kalah.
  5.  Tidak ada perbedaan ikon antara player dengan CPU.


GOALS
Tampilan pada saat Player  kalah dan AI menang.
Pada tampilan pertama, Player dinyatakan kalah karena pada saat trakhir mengambil icon masih tersisa 3 icon, dan setelah itu AI menggambil sebanyak 2 icon, sehingga tersisa satu icon dan kita dinyatakan kalah karena mendapat giliran mengambil icon terakhir.

Tampilan saat Player menang dan AI kalah.
Pada tampilan pertama, AI dinyatakan kalah karena pada saat trakhir mengambil icon masih tersisa 3 icon, dan setelah itu player menggambil sebanyak 2 icon, sehingga tersisa satu icon dan AI dinyatakan kalah karena mendapat giliran mengambil icon terakhir.

KONSEP AI

Konsep permainan yang diterapkan dalam permainan ini adalah pemain (baik itu user ataupun computer) harus berjalan secara bergiliran dan memiliki strategi untuk mengambil icon agar tidak kebagian mengambil icon terakhir.
            Dan pada saat giliran AI untuk mengambil icon maka otak AI sama seperti player dimana AI akan memikirkan sendiri untuk memilih icon yang mana yang akan diambil dan berapa jumlahnya. AI akan selalu berjalan dan memberikan perlawanan kepada kita sehingga tidak akan begitu mudah dapat memenangkan game tersebut, pada saat memainkan permainan ini akan mendapatkan hasil akhir berupa kita menang atau kita kalah melawan komputer, karena prinsipnya game ini ingin anda yang kalah. Kesimpulan dari permainan ini ialah bagaimana cara untuk memenangkan perlawanan dari komputer dengan tidak mengambil icon yang paling akhir (don’t take the last), jika pengguna (user) dapat tidak mengambil icon yang terakhir maka pengguna tersebut ememnangkan permainan game Matches dan jika pengguna (user) mengambil icon yang paling akhir maka pengguna (user) tersebut dinyatakan kalah dalam permainan game Matches ini.


ALGORITMA YANG DIPAKAI

Berikut ini adalah algoritma yang dipakai dalam permainan ini :

1.      Memilih salah satu beberapa dari 25 ikon yang susunannya berbentuk persegiikon yang telah di sediakan, pengguna (user) atau lawan (komputer) dapat memilih sesuai dengan yang di inginkan.
2.      Jika 25 ikon telah di pilih secara bergantian.
3.      Dengan cara mengklik kiri pada mouse dan arahkan kursor kearah icon yang ingin di ambil.
4.      Jika pengguna (user) bermain sebagai pemain (playerpertama dan sudah memilih pensil yang di inginkan untuk di ambil, maka berikutnya lawan (komputer) yang memilih pensil yang di inginkan untuk diambil.
5.      Jika ikon yang di sediakan telah habis maka akan dilihat siapa yang mengambil ikon yang paling akhir untuk menentukan menang atau tidaknya pengguna (user) ataupun lawan (komputer) karena syarat ketentuan permainan ini ialah akan menang jika tidak mengambil ikon yang paling akhir dan akan kalah jika mengambil ikon yang paling akhir.
6.      Jika pengguna (user) bermain cepat dalam pengambilan ikon maka lawan (komputer) akan menyamakan kecepatan seperti pengguna (user) dalam proses pengambilan ikon.
7.      Jika lawan (komputer) memenangkan permainan ini maka keluar message "Maaf anda belum berhasil memenangkan game ini!!" Jika pengguna (user)yang memenangkan permainan ini maka akan keluar message “Selamat anda memenangkan game ini!!”.
8.      Permainan selesai bila 25 ikon telah habis baik diambil pengguna (user) ataupun lawan (komputer). Danakan menampilkan message menang atau tidaknya dalam permainan ini.

Dalam Game matches ini menggunakan Algoritma Backtracking menggunakan konsep DFS dalam pembentukan pohon solusi.
1.      Pohon solusi dibentuk dari awal permainan sampai akhir permainan.
2.      Untuk permainan yang di nyatakan cukup kompleks seperti permainan Matches, pembentukan pohon solusi di mulai dari awal permainan sampai akhir permainan dapat direalisasikan karena pada game ini mempunyai batasannya, yaitu kotak yang telah di batasin berapa banyak yang dapat di beri tanda, sehingga bila anda ingin mengurutnya bisa di lakukan dan di ketahui cara untuk memenangkan game ini. Sehingga bila anda cari dalam pohon solusi bisa di selesaikan sampai tidak ada kemungkinan lagi untuk di cari solusinya.
3.      Semakin akurat fungsi heuristic yang digunakan, semakin baik pula pengambilan keputusan yang dilakukan oleh AI.

Dengan menggunakan algoritma Bactracking untuk AI dalam permainan Matches, pengguna (user) tidak akan begitu mudah untuk melawan AI tersebut. 






LISTING PROGRAM
/*==============================================================================
* Nama Permainan        :  Minion Matchess
* Bahasa Pemrograman    :  Strawberry Prolog (Programming in Logic)
* Author                :  Saarah Syahriyah
* ==============================================================================
*/

?-
  G_Comp_First=0,
  G_Take_Last=0,
  G_White is brush(rgb(255,255,255)),
  G_kapsul is bitmap_image("image\\pict2.bmp",_),
  G_Background is bitmap_image("image\\pict1.bmp",_),
  G_back_1 is bitmap_image("image\\hello.bmp",_),
  pen(0,0),       
  set(pos([5,5,5,5,5])),
  beep("sound\\gameshow.wav"),
 
%--------------------- WINDOW 1 -----------------------%
     window(G_layar1,_,win_fun(_),"Minion Matchess",70,70,550,300).
     win_fun(paint):-                     
     draw_bitmap(0,0,G_back_1,_,_).

%------------------- TOMBOL WINDOW 1 ------------------%
win_fun(init):-
          button(_,_,mulai_game(_),"START GAME",30,130,250,40),
          button(_,_,keluar_game(_),"EXIT GAME",30,180,250,40).

     mulai_game(press):-
     close_window(G_layar1),
     window(G_Main, _, win_func(_), "Minion Matchess", 60,60,1100,550).


%--------------- KELUAR GAME --------------------%
          keluar_game(press):-
          close_window(G_layar1).


win_func(end) :-
(G_waktu==0) ->
kill_timer(_,G_timer),
message("Time's out","Sorry!!",i),
close_window(_)
else
G_waktu<>=G_waktu-1,
font(15,30,"cinnamon cake"),
text_out(700,350,"Time: "+print(G_waktu)+"    "),
beep.


% Deklarasi Tampilan List Menu

win_func(init) :-
  menu( normal, _, _, menu_newgame(_), "&New Game"),
  menu( pop_up, _, _, menu_new(_), "&Level Kesulitan"),
  menu( normal, _, _, menu_about(_), "&About"),
  menu( normal, _, _, menu_help(_), "&Help"),
  menu( normal, _, _, menu_exit(_), "&Exit").

menu_new(init) :-
  menu( normal, _, _, menu_53135(_), "&5 3 1 3 5"),

  menu( normal, _, _, menu_13531(_), "&1 3 5 3 1").

menu_newgame(press) :-
  (G_Comp_First=0->
    set(pos([5,5,5,5,5]))
  else
    Pos=[1,3,4,2,5],
    N is 2*random(3),
    el(Pos,A, N),
    A2 is A - 1,
    replace(Pos2, Pos, A2, N),
    set(pos(Pos2))),
  update_window(_).

menu_53135(press) :-
  (G_Comp_First=0->
    set(pos([5,3,1,3,5]))
  else
    Pos=[1,3,4,2,5],
    N is 2*random(3),
    el(Pos,A, N),
    A2 is A - 1,
    replace(Pos2, Pos, A2, N),
    set(pos(Pos2))),
  update_window(_).

menu_13531(press) :-
  (G_Comp_First=0->
    set(pos([1,3,5,3,1]))
  else
    Pos=[1,3,4,2,5],
    N is 2*random(3),
    el(Pos,A, N),
    A2 is A - 1,
    replace(Pos2, Pos, A2, N),
    set(pos(Pos2))),
  update_window(_).

menu_comfirst(press) :-
G_Comp_First:=1,
menu_userfirst(press),
G_Comp_First:=0.


menu_about(press) :-
beep("sound\\haha.wav"),
     message("This game is an AI ( Artificial Intelligence )", " Nama   : Saarah Syahriyah \n Nama     : 56411532\n Kelas : 3ia11\n

CAUTION!!\n
\nJangan terakhir mengambil kaca mata minion yaa, maka kamu akan kalah teman!!
\nGood Luck!! :D", i).

menu_help(press) :-
beep("sound\\help.wav"),
message("H E L P","JIKA INGIN MENGAMBIL KACAMATA LEBIH DARI SATU\nAMBIL BAGIAN BAWAH\n
\nPERHATIKANLAH BANYAKNYA KACAMATA !!. UNTUK MEMENANGKAN PERMAINAN INI, JANGAN SAMPAI KAMU MENGAMBIL KACAMATA TERAKHIR", i).

menu_exit(press) :-
close_window(_).


win_func(paint):-
draw_bitmap(0,0,G_Background,_,_),
beep("Sound\\klik.wav"),
  pos(Pos),
  el(Pos,El,N),
  for(I,1,El),
  X is 50+100*N,
  Y is 290- 50*I,
 draw_bitmap(X,Y,G_kapsul,_,_),
 fail.
 
win_func(mouse_click(X,Y)):-
  X1 is (X- 50)//100,
  Y1 is (290 -Y)//50,
  X1=<5,X>=0,
  pos(Pos),
  el(Pos,El,X1),
  El>Y1,
  replace(Pos2, Pos, Y1, X1),
  brush(G_White),
  rect(100*X1+50,0,100*X1+140,0- 150*Y1),
  (Pos2=[0,0,0,0,0]->
    set(pos(Pos2)),
    end(0)
  else
    wait(1),
    play(Pos3, Pos2),
    (Pos3=[0,0,0,0,0]->
      end(1)),
    set(pos(Pos3))),
  update_window(_).

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

play(Pos3, Pos2):-
  G_Take_Last=0,
  count_successes(not_trivial(Pos2))<2,
  find_max(Pos2,Max,N),
  New is (Max>1,count_successes(not_empty(Pos2)) mod 2=:=1 -> 1 else 0),
  replace(Pos3, Pos2, New, N).
play(Pos3, Pos2):-
  el(Pos2,A, N),
  R:=0,
  add_xor(R,Pos2,N),
  R<A,
  replace(Pos3, Pos2, R, N).
play(Pos3, Pos2):-
  find_max(Pos2,Max,N),
  Max2 is (Max>1, random(4)=:=2 ->
    Max - 4
  else
    Max - 1),
  replace(Pos3, Pos2, Max2, N).

not_empty(Pos):-
  el(Pos,A, _),
  A>0.
not_trivial(Pos):-
  el(Pos,A, _),
  A>1.

el([H|T],H,0).
el([H|T],El,N):-
  el(T,El,N1),
  N is N1+1.

replace([H|T],[_|T],H,0).
replace([H|T2],[H|T],El,N):-
  replace(T2,T,El,N1),
  N is N1+1.

find_max([H],H,0).
find_max([H|T],A, N) :-
  find_max(T,A1,N1),
  (A1<H->
    A is H,
    N is 0
  else
    A is A1,
    N is N1+1).

add_xor(_,[],_):-!.
add_xor(R,[H|T],0):- !,
  add_xor(R, T, -1).
add_xor(R,[H|T],N):-
  N1 is N- 1,
  R:=R xor H,
  add_xor(R, T, N1).

end(Flag):-
  Flag=G_Take_Last->
    message("YOU LOSE","maaf kamu belum berhasil memenangkan game ini :( coba lagi ya!!\n  !! ",!)
else
draw_bitmap(0,0,bitmap_image("image\\pict2.bmp",_),_,_),
    beep("sound\\tepuktangan.wav"),
    message("YOU WIN","SELAMAT\n
KAMU BERHASIL MEMENANGKAN GAME INI",i).



DAFTAR PUSTAKA
         
3.      Id.wikipedia.org/wiki/kecerdasan_buatan



GLOUSARIUM

1.      Win_func():-                                           =  membuat fungsi dengan nama win_func.
2.      Is bitmap_image()         = mendeklarasikan variabel gambar (.bmp)
3. window(_,_,win_func(_))   = membuat jendela window
4. key_down(51,_)            = membuat kode ASCII untuk keyboard
5. message(_,_,!)            = membuat kotak pesan
6. draw_bitmap(_,_,_)        = mendeklarasikan gambar
7. write(_)                  = mencetak
8. for(_,_,_)                = perulangan
9. beep()                    = mendekrasikan suara       
10.  win_func(paint):-       = fungsi menggambar diwindow
11.  win_func(init) :-       = fungsi proses diwindow
12.  %                       = komentar
13.  Wait(_)                 = proses tunggu
14.  Fail.                   = menghentikan proses sementara
15.  Close_window(_)         = menutup window
16.  Update_window(_)        = memperbarui window
17.  Randow(_)               = proses acak
18.  mouse_click(X,Y)        = proses klik pada mouse
19.  win_func(press)         = proses tekan pada mouse dan
                               keyboard
20.  font(_)                 = bentuk huruf
21.  text_out(_)             = mencetak huruf di window
22.  color_text(_)           = warna huruf  
23.  button(_,_)             = membuat button (tombol)








No comments:

Post a Comment