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 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 (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".
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
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
thanks
BalasHapus