Selasa, 03 Juni 2014

membuat game sederhana menggunakan strawberry prolog

baik, saat ini saya akan mebahas masalah bagaiman cara agar kiita akan mebuat game sederhana,saya disini menggunakna strawberi prolog, cob la, gak serumit yang kamu bayangkan


 DAFTAR ISI

Ringkasan Cerita                     ……………………………………………………………    2
Initial State                             ……………………………………………………………    2
Rules                                       ……………………………………………………………    5
Goals                                       ……………………………………………………………    5
Konsep AI                              ……………………………………………………............    6
Algoritma yang Dipakai          ……………………………………………………………    6
Listing Program                      ……………………………………………………………    7
Daftar Pustaka                                    ……………………………………………………............    12
Glosarium                                ……………………………………………………………    12





RINGKASAN CERITA
Ide dasar pembuatan game ini berasal dari game angry bird, yang tokoh antagonisnya suka mencuri telur yaitu babi dan kita sebut pigy, di kembangkan dari game matches yang sudah ada pada strawberry prolog yang aturan gamenya tidak boleh mengambil korek api terakhir, jadi dalam game ini siapa yg mengambil telur terakhir maka dia akan kalah karena telur yang terakhir adalah bom yang dibuat pigy menyerupai telur.
INITIAL STATE
            Permainan Pencuri Telur ini saya kembangkan dari game Mathes. Game ini juga merupakan game dengan menerapkan konsep Artificial Intelligence(AI) atau kecerdasan buatan.
            Permainan ini di lakukan oleh player yang melawan AI dalam hal startegi pengambilan telur. Di dalam permainan ini pemain maupun computer akan berusaha mengambil telur dan berusaha untuk menyisakan satu telur, karena yang mengambil telurterakhir dialah yang kalah.
Tampilan awal game adalah sebagai berikut:
Ukuran layar adalah 680x590 pixel
 


Mengandung Icon Telur dan 5 opsi menu:
Gambar 
, merupakan icon yang akan di klik oleh user ataupun computer.
Terdapat 4 opsi game yang dapat dipilih ,yaitu:
1.      Ulang, opsi ini digunakan untuk memulai atau mengulang permainan.
2.      Mode berfungsi untuk merubah menjadi computer yang mengambil telur terlebih dahulu serta merubah aturan permainan
3.      Tentang, opsi ini berfungsi untuk menampilkan tentang data pengembang dari game ini.
4.      Cara Bermain, opsi ini digunakan untuk menampilkan cara bermain dan peraturan didalam game ini.
5.      Keluar , opsi ini digunakan untuk keluar dari permainan.





Tampilan Menu Cara Bermain ketika diklik:

Permainan dimulai dengan mengklik Telur pada layar yang tersedia. Anda dapat memilih Telur di daerah manapun dan berapapun jumlahnya. Usahakan anda tidak mengklik Telur terakhir, karena jika Telur terahir diklik maka dialah yang kalah. Jika ingin mengulang permainan cukup mengklik menu “Ulang”.









RULES
Berikut adalah aturan bermain di dalam game ini.
Ø  Tunggu sampai Sound berakhir dan klik Ok untuk memulai.
Ø  Pemain diberikan kesempatan untuk mengambil telur pertama.
Ø  Pemain bisa menjadi giliran kedua jika di atur pada menu mode.
Ø  Pemain diberikan keleluasaan untuk mengambil berapapun telur yang ada asalkan masih pada kolom yang sama.
Ø  Dilarang mengklik diluar icon Telur karena terkadang terjadi Bug. Jika terjadi bug anda bisa menggunakan menu Ulang untuk mengulang permainan.
Ø  Komputer telah dirancang untuk menyisakan satu telur terakhir. Karena yang mengambil telur terakhir adalah yang kalah.
Ø  Dan pada menu mode terdapat perubahan system game yang merubah aturan menjadi pengambil telur terakhir dialah pemenangnya.
GOALS
                  Setiap permainan pastinya mempunyai goals atau tujuan akhir. Didalam permainan ini goals atau tujuan akhirnya adalah membiarkan musuh mengklik telur terakhir dengan strategi menghitung jumlah telur agar tersisa satu telur.
Berikut adalah kondisi dimana player mencapai goals atau tujuan akhir.
Kondisi ketika player memenangkan permainan
 
 


Hal ini terjadi karena kita focus terhadap strategi, yaitu menyisakan satu telur terakhir. Maka yang akan mengklik telur terakhir adalah computer.

Berikut jika komputer mengalahkan player:

Kondisi ketika player dikalahkan oleh komputer
 

KONSEP AI
Pada game Pencuri Telur ini menggunakan algoritma Runut-Balik atau Backtracking. Algoritma backtracking ini adalah algoritma berbasis DFS untuk mencari solusinya. Algoritma Backtraking ini tergolong hemat waktu tidak seperti algoritma Bruteforce yang mencari semua kemungkinan solusi, Backtraking hanya menampilkan pencarian yang mengarah ke solusi saja.
Otak yang diberikan kepada computer adalah dia akan selalu berusaha untuk menyisakan satu telur untuk Player. Dengan algoritma ini pastinya perhitungan ini akan cepat untuk diproses.

ALGORITMA YANG DIPAKAI
            Di dalam Game Pencuri Telur algoritma yang dipakai adakah sebagai berikut:
1.      Ketika player mengklik icon telur.
2.      Ketika computer mengklik telur pula, dengan syarat menyisakan satu telur terakhir untuk player.
3.      Ketika game berakhir apabila player ataupun computer menang.
Dalam permainan Pencuri Telur ini menggunakan algoritma Runut-Balik atau Backtraking karena dengan menggunakan algoritma ini si computer akan cepat untuk berfikirnya. Dia langsung mengklik tanpa memakan banyak waktu. Kalau game ini memakai algoritma  Minimax maka game akan berlangsung sangat lama seperti permainan catur, dimana algoritmanya mencari semua kemungkinan yang ada.
LISTING PROGRAM
/*===============================================================
* Nama Permainan        : Pencuri Telur
* Author                : Ricky Meriandika
* Kelas                 : 3IA12
* ===============================================================
*/

?-
  G_Comp_First=0,%pendeklarasian objeck game
  G_Take_Last=0,
  G_Ikon is bitmap_image("Gambar/Telur2.bmp",_),
  G_Latar is bitmap_image("Gambar/angryland.bmp",_),
  G_help is bitmap_image("Gambar/help.bmp",_),
  G_kalah is bitmap_image("Gambar/kalah.bmp",_),
  G_menang is bitmap_image("Gambar/menang.bmp",_),
  G_boom is bitmap_image("Gambar/boom.bmp",_),

  pen(0,0),       
  set(pos([1,2,3,4,5,4,3,2,1])),
  window_n( G_Main, _, win_func, "Pencuri Telur", 80,80,680,590,_,_,rgb(255,255,255)),
  beep("Sound//sucses.wav"),
message("Mulai","Ayo kalahkan Pigy!!!", i).

win_func(init) :- % menambah opsi game
  menu( normal, _, _, menu_new(_), "&Ulang"),
  menu( normal, _, _, menu_options(_), "&Mode"),
  menu( normal, _, _, menu_tentang(_), "&Tentang"),
  menu( normal, _, _, menu_how(_), "&Cara Bermain"),
  menu( normal, _, _, menu_exit(_), "&Keluar").

win_func(paint):- %memanggil latar dan icon
draw_bitmap(0,0,G_Latar,_,300),
    pos(Pos),
  el(Pos,El,N),
  for(I,1,El),
  draw_bitmap(10+75*N,5+30*(I-1),G_Ikon,_,_),
    fail.


 
win_func(mouse_click(X,Y)):- %letak icon yg di klik
  X1 is (X-10)//75,
  Y1 is (Y-5)//30,
  X1=<9,X>=10,
  pos(Pos),
  el(Pos,El,X1),
  El>Y1,
  replace(Pos2, Pos, Y1, X1),
 beep("Sound//bird.wav"),
  (Pos2=[0,0,0,0,0,0,0,0,0]->
    set(pos(Pos2)),
    end(0)


  else

    wait(0.5),
beep("Sound//pig.wav"),
    play(Pos3, Pos2),
    (Pos3=[0,0,0,0,0,0,0,0,0]->
      end(1)),
    set(pos(Pos3))),
  update_window(_).

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

play(Pos3, Pos2):- %koding AI
  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(2)=:=0 ->
    Max - 2
  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):- %akhir permainan
  Flag=G_Take_Last->
draw_bitmap(0,0,G_boom,_,_),
beep("Sound//boom.wav"),
 wait(0.5),
draw_bitmap(0,0,G_kalah,_,_),
beep("Sound//failed.wav"),
    message("Pigy Say","Aku berhasil mencuri telurmu dan memberimu boom!!!",!)

  else
draw_bitmap(0,0,G_boom,_,_),
beep("Sound//boom.wav"),
 wait(0.5),
draw_bitmap(0,0,G_menang,_,_),
beep("Sound//sucses.wav"),
    message("Bird Say","Aku berhasil mengambil telurku kembali!!!",i),
update_window(_).

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




menu_how(press) :-
draw_bitmap(0,0,G_help,_,_),
message("Aturan game","Player akan mengambil telur terlebih dahulu.
Boleh mengambil berapapun dengan syarat telur yang di ambil hanya satu kolom.
Jika player mengambil telur yang terakhir maka player akan kalah.

Ayo kalahkan Pigy!!!",i),
update_window(_).

menu_tentang(press) :-
draw_bitmap(0,0,G_help,_,_),
  message("Tentang","Data Pengembang
Nama :Ricky Meriandika
NPM :56411126
Kelas :3IA12", i),
update_window(_).

menu_options(press) :-

  window_n( _, _, options_func, "Options", 200, 100, 300, 200,?,_,_).
options_func(init) :-
  check_box( A, _, check_func, "Pigy ambil pertama", 20, 20, 200, 20),
  G_A:=A,
  set_check_box_value(G_A,G_Comp_First),
  check_box( B, _, check_func, "Pemenang ambil terakhir", 20, 60, 200, 20),
  G_B:=B,
  set_check_box_value(G_B,G_Take_Last),
  button( _, _, ok_func(_), "OK", 20, 120, 80, 30),
  button( _, _, cancel_func(_), "Cancel", 120, 120, 80, 30).


ok_func(press) :-
  G_Comp_First:=get_check_box_value(G_A),
  G_Take_Last:=get_check_box_value(G_B),
  (G_Take_Last=1->
    set_text("Matches (Take the last)",G_Main)
  else
    set_text("Matches (Don't take the last)",G_Main)),
  close_window(parent(_)).

cancel_func(press) :-
  close_window(parent(_)).

check_func(press) :-
  set_check_box_value(_,1-get_check_box_value(_)).

menu_exit(press) :-
  close_window(_).





















DAFTAR PUSTAKA
www.ittelkom.ac.id/.../Materi%20Desain%20Analisis%20Algoritma/M14   || File disertakan didalam folder File Pendukung.
GLOSARIUM
Algoritma yang dipakai adalah algoritma Runut-balik. Algoritma Runut-balik (backtracking) adalah algoritma yang berbasis pada DFS untuk mencari solusi persoalan secara lebih ringkas. Runut-balik, yang merupakan perbaikan dari algoritma brute-force, secara sistematis mencari solusi persoalan diantara semua kemungkinan solusi yang ada.
Fungsi pada program.
1.      set(pos            : menentukan posisi.
2.      bitmap_image       : Pendeklarasian gambar extensi bitmap (.bmp)
3.      window_n           : Membuat jendela atau papan permainan.
4.      win_func(init):-   : Fungsi proses di window.
5.      mouse_click(X,Y)   : Proses klik pada window.
6.      beep.              : Memanggil suara dengan extensi (.wav).
7.      win_func(paint):-  : Fungsi menggambar di window.
8.      draw_bitmap        : Memanggil gambar.
9.      message(“”)        : Menampilkan pesan di window.

10.  close_window(_)    : Menutup program.