Sabtu, 13 Juni 2015

Manual Book game Take The Digimon (Strawberry Prolog)

BAHASA DAN PROGRAM EDITOR :
         Permainan ini menggunakan bahasa pemrograman Prolog. Dan di sini penulis menggunakan Strawberry Prolog sebagai program editor. Alasan penulis menggunakan strawberry prolog ini karena menurut penulis ini mudah untuk digunakan.

INITIAL STATE :
Initial State yang digunakan sebagai acuan untuk membuat program Take The Digimon  adalah pembuatan papan permainannya. Di sini penulis menggunakan gambar Digimon yang berukuran 30x40 sebagai pengganti “korek api”. Game Take The Digimon  merupakan Permainan Mental yang dimainkan seorang pemain melawan AI komputer. Pada game ini akan menampilkan 21 spot/digimon yang tersusun dari enam baris dan kolomnya menyusun meningkat pada level tertentu. Game ini akan mengasah otak pemainnya. Pemain dipaksa untuk menerapkan strategi yang tepat untuk memenangkan game ini. Permainan ini hanya dapat dimainkan oleh satu pemain, sedangkan Komputer bertindak sebagai lawan dari pemain.

RULES :
            Aturan main (Rules) yang digunakan pada games Take The Digimon  Strawberry Prolog  ini adalah sebagai berikut :
1.   User memulai permainannya terlebih dahulu, dan user menentukan digimon mana yang akan diambil untuk memulai permainan. User diberi kebebasan untuk memilih digimon mana saja yang akan diambil selama berada di papan permainan.
2.     Komputer diberi pembelajaran untuk menghalangi jalan user untuk mencapai Goal (Tujuan).
3.     Komputer juga diberi pembelajaran untuk memenangkan games ini.

 GOAL :
            Goal (tujuan) untuk menyelesaikan games Take The Digimon Strawberry Prolog ini adalah mengambil lebih dahulu dari lawan kita (Don’t take the last), yang dimana lawan kita ialah Komputer.
(GOAL)


(GOAL)


KONSEP AI :
Kecerdasan buatan atau yang sering disebut dengan AI pada game ini terletak pada computer yang akan bertindak sebagai lawan. Komputer akan selalu berusaha mengalahkan user. Komputer dapat menyusun strateginya sendiri agar menjadi pemenang.

ALGORITMA
Kemudian didalam permainan ini, digunakan algoritma greedy dan brute force.  Algoritma Greedy merupakan metode yang paling umum digunakan untuk memecahkan masalah optimasi. Algoritma ini sederhana karena apabila sudah bertemu apa yang di cari maka itulah solusinya.
Brute force adalah sebuah pendekatan yang lempang (straightforward) untuk memecahkan suatu masalah, biasanya didasarkan pada pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan. Algoritma brute force memecahkan masalah dengan sangat sederhana, langsung dan dengan cara yang jelas (obvious way).
Penerapan algoritma greedy dan brute force pada permainan ini adalah bagaimana pemain mengambil langkah yang akan membuat langkah-langkah selanjutnya lebih optimal dan menjadikannya pemenang. Strategi dalam pengambilan karakter dilihat dari banyak karakter yang ada dan posisi kolom karakter tersebut. Dengan menggunakan algoritma greedy dan brute force pada permainan minion matches maka hasil yang didapatkan akan menjadi lebih optimal.

BATAS USIA :
            Permainan ini dapat dimainkan untuk semua usia. Karena permainan ini mengasah ketrampilan otak dengan menyusun strategi sesuai dengan tujuan yang telah ditentukan sebelumnya.


INSTALASI STRAWBERRY PROLOG :
1.      Sebaiknya tutup semua program lain yang sedang dibuka.
Anda dapat menginstall Strawberry Prolog dengan cara mengakses http://strawberry-prolog.software.informer.com/2.9/  dan mendownload File tsb, kemudian meng-extrakkannya.
2.      Pada jendela konfirmasi yang muncul, klik OK untuk melanjutkan proses penginstallan.

3.      Kemudian anda diminta untuk menentukan lokasi dimana anda akan meletakkan file installan (destination location). Jika anda tidak menentukan destination location maka secara otomatis lokasi penginstallan ditempatkan di C:\Program Files\Strawberry Prolog. Proses penginstallan akan segera dilaksanakan jika anda telah mengklik Unzip button.

4.      Selanjutnya proses penginstallan dimulai. Silakan tunggu hingga proses penginstallan selesai.
Jika proses penginstalan telah selesai maka muncul jendela konfirmasi "310 file(s) Unzipped Successfully".

Petunjuk Bermain Take The Digimon  Strawberry Prolog :
1.      Sebaiknya tutup semua program lain yang sedang dibuka. Terlebih dahulu anda harus menginstall Strawberry Prolog.

2.      Jika program Strawberry Prolog sudah terinstall maka buka direktori Project Prolog, dan klik double file Take The Digimon  Strawberry.spj seperti tampilan berikut

Jika anda tidak mendapatkan tampilan seperti di atas maka anda harus mengketikkan listing program Take The Digimon  tersebut di Strawberry Prolog.
3.      Anda harus meng - "Compile" untuk mengetahui apakah masih ada sintaks yang masih salah jika tidak ada sintaks yang salah maka "Run" atau tekan keyboard "F5" untuk menjalankan program tersebut hingga anda menemukan tampilan sebagai berikut :


Compile dan run.


Tampilan setelah di run maka akan muncul SplashScreen nilai timer hingga 100 dengan satuan 0.01 detik
4.      Selanjutnya akan muncul Main Menu utama pada program ini, dan terdapat 4 button. Untuk cara bermain, Anda harus mengklik button start:


5.      Lalu akan muncul window baru, yaitu window_main. Di window inilah Anda akan dapat memainkan permainan Take The Digimon.


Dalam game ini anda dapat memilih antara AI untuk jalan terlebih dahulu, atau sebaliknya. Anda di minta untuk tidak mengambil digimon yang terakhir.

Kemungkinan menang hanya kecil dalam game ini, karena sang AI selalu mempunyai solusi jika mendapatkan giliran untuk jalan.
  

Jika ingin mengetahui about tentang game ini, maka anda bisa memilih Main menu yang terdapat pada menu. Kemudian klik button about: 



LISTING PROGRAM

% Take The Digimon is modifier by Puji Satria Widodo
% from Gunadarma University.

?-

  G_Comp_First=0,
  G_Take_Last=0,
  beep("sound\\programcomplate.wav"),
  pen(0,0),
  set(pos([1,2,3,4,5,6])),

%=======================================================
%Memasukkan alamat gambar
  G_SplashLoading is bitmap_image("image\\background.bmp",_),
  G_background is bitmap_image("image\\background2.bmp",_),
  G_Digimon is bitmap_image("image\\icon.bmp",_),
  G_opening is bitmap_image("image\\background1.bmp",_),

%========================================================
%Pengaturan Window Timer
window(G_pertama,_,window_pertama(_),"Window Timer",(190,40,980,660)).

window_pertama(init):-
     G_batas := 0,
     G_pertama is set_timer(_,0.01,fungsi_timer).
    
fungsi_timer(end):-
     draw_bitmap(0,0,G_SplashLoading,_,_),
     font(11,25,"Lucida Console"),
     text_out(0,0,print("Loading: " + G_batas +"%")),
     G_batas := G_batas +1,
     (G_batas = 101 -> close_window(G_pertama),

%mengatur window utama
     window(G_screen,_,win_kedua(_),"Digimon Matches",350,60,870,680)).
     win_kedua(paint):-
          draw_bitmap(0,0,G_opening,_,_).

%pembuatan button pada window utama
win_kedua(init):-
     button(_,_,start(_),"Start",250,500,100,50),
     button(_,_,how(_),"How To Play",480,500,100,50),
     button(_,_,about(_),"About",250,580,100,50),
     button(_,_,exit(_),"Exit",480,580,100,50).

%=======================================================
%memberi perintah masing-masing button pada window utama
%window bermulainya game yang sudah tersusun di 6 pos
start(press):-
     beep("sound\\sound jalan.wav"),
     beep("sound\\GameStart_Mulai.wav"),
     beep("sound\\vb.exe"),
     close_window(G_screen),
window_n(G_Main, _,win_func, "Take The Digimon (Don't take the last)", 80,80,620,400,_,_,rgb(255,255,255)).

%========================================================
%tampilan jika mengklik button help
how(press):-
     beep("sound\\sound jalan.wav"),
     shell_execute("How_to_play.html").

%draw_bitmap(350,0,G_help,_,_).  

%tampilan jika mengklik button about
about(press) :-
beep("sound\\sound jalan.wav"),  
message("Tentang Saya","
Game Prolog   : Take The Digimon
Kelas         : 3IA12
NPM       : 55412727
Modifier By   : Puji Satri Widodo
\nUNIVERSITAS GUNADARMA", i).

%draw_bitmap(350,0,G_help,_,_).
%========================================================
%tampilan jika mengklik button exit
exit(press):-
     beep("sound\\goodbye.wav"),
     close_window(G_screen).

%========================================================
%function utama dari game
win_func(init) :-
     menu( pop_up, _, _, menu_level(_), "&New Game"),
     menu( normal, _, _, menu_back(_), "&Main Menu"),
     menu( normal, _, _, menu_options(_), "&Options"),
     menu( normal, _, _, menu_help(_), "&Help"),
     menu( normal, _, _, menu_exit(_), "&Exit").

win_func(paint):-
     draw_bitmap(0,0,G_background,_,_),
     pos(Pos),
     el(Pos,El,N),
     for(I,1,El),

%========================================================
%Jarak antara masing-masing item
     X is 50+100*N,
     Y is 330- 45*I,

%========================================================
%Untuk bentuk icon
draw_bitmap(X,Y,G_Digimon,_,_),
fail.

%========================================================
%Deklarasi Area Mouse Klik
win_func(mouse_click(X,Y)):-
  beep("sound\\sound jalan.wav"),
  X1 is (X- 40)//100,
  Y1 is (320-Y)//45,
  X1=<5,X>=40,
  pos(Pos),
  el(Pos,El,X1),
  El>Y1,
  replace(Pos2, Pos, Y1, X1),

  (Pos2=[0,0,0,0,0,0]->
    set(pos(Pos2)),
    end(0)
  else
    wait(0.5),
    play(Pos3, Pos2),
    (Pos3=[0,0,0,0,0,0]->
      end(1)),
    set(pos(Pos3))),
  update_window(_).

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

%========================================================
%AI dari game Matches itu sendiri
play(Pos3, Pos2):-
     G_Take_Last=0,
     count_successes(not_trivial(Pos2))<0,
     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).

%========================================================
%notif pemberitahuan menang atau kalah dalam game ini
end(Flag):-
     Flag=G_Take_Last->
     beep("sound\\lose.wav"),
     message("Maaf","Kamu Kalah kali ini!",i)
  else   
     beep("sound\\win.wav"),
    message("Selamat","Kamu Menang ^_^",i).
    

%Level
menu_level(init) :-
     menu(normal, _, _, menu_easy(_), "&Easy"),
     menu(normal, _, _, menu_medium(_), "&Medium"),
     menu(normal, _, _, menu_hard(_), "&Hard").

%ketika menekan menu easy
menu_easy(press) :-
     set(pos([1,2,3,4,5,6])),
     set(lose_flag(false)),
     update_window(_),

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

%ketika menekan menu medium
menu_medium(press) :-
     set(pos([7,5,2,2,5,7])),
     set(lose_flag(false)),
     update_window(_),

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

%ketika menekan menu hard
menu_hard(press) :-
     set(pos([3,5,7,7,5,3])),
     set(lose_flag(false)),
     update_window(_),

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

%Option
menu_options(press) :-
  window_n( _, _, options_func, "Options", 200, 100, 300, 200,?,_,_).
options_func(init) :-
  check_box( A, _, check_func, "Computer is the first", 20, 20, 200, 20),
  G_A:=A,
  set_check_box_value(G_A,G_Comp_First),
  check_box( B, _, check_func, "Take the last", 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(_)).

%========================================================
%ketika menekan menu help
menu_help(press) :-
  beep("sound\\sound jalan.wav"),
  shell_execute("How_to_play.html").

%========================================================
%ketika menekan main menu
menu_back(press) :-
beep("sound\\sound jalan.wav"),
not(yes_no("Main Menu","Are you sure want to Main Menu?", ?),
beep("sound\\sound jalan.wav"),
close_window(G_Main),
execute("sound\\taskill.bat"),
window(G_screen,_,win_kedua(_),"Digimon Matches",350,60,870,680)).

%========================================================
%ketika menekan menu exit
menu_exit(press) :-
beep("sound\\sound jalan.wav"),
not(yes_no("Exit","Are you sure want to exit?", ?),
beep("sound\\sound jalan.wav"),
message("EXIT","Thank you for playing this game ^.^ ",i),
beep("sound\\sound jalan.wav"),
     write("OK"),nl,
     execute("sound\\taskill.bat"),
     close_window(G_Main),
     beep("sound\\goodbye.wav")).


OUTPUT PROGRAM


About this game.





Back to main menu.


Quit this game.




Daftar Pustaka







GLOSARIUM

AI: :adalahTeknologi yang mensimulasikan kecerdasan Manusia, yaitu bagaimana mendefinisikan dan mencoba menyelesaikan persoalan menggunakan komputer dengan meniru bagaimana manusia menyelesaikan dengan cepat.

Algoritma Greedy: merupakan metode yang paling umum digunakan untuk memecahkan masalah optimasi.

Brute force: adalah sebuah pendekatan yang lempang (straightforward) untuk memecahkan suatu masalah, biasanya didasarkan pada pernyataan masalah (problem statement) dan definisi konsep yang dilibatkan

Compile: proses menterjemahkan seluruh program kedalam bahasa mesin sekaligus

Prolog:  bahasa pemrograman logika atau di sebut juga sebagai bahasa non-procedural.

Strawberry prolog: dialek dari Prolog bahasa pemrograman . Its sintaks sangat dekat dengan ISO-Prolog tetapi memiliki banyak ekstensi yang bukan bagian dari standar. Ide utama dari Strawberry Prolog adalah mudah digunakan sehingga beberapa universitas memilih menggunakannya dalam program mereka