INITIAL STATE
GothelloGreen merupakan suatu permainan Reversy atau biasa disebut Othello yang
ada pada Strawbery Prolog. Pada game Othello menggunakan warna hitam putih sebagai
pembeda untuk bidak pemain dan komputer. Sedangkan pada game GothelloGreen ini menjelaskan
sebuah kotak-kotak 7 x
7 yang didalamnya terdapat tiga
bidak yang bergambar Pohon dan tiga bidak yang bergambar Api, saya mengganti background game dengan design yang saya telah edit menggunakan paint, oleh karena itu game yang saya buat dinamakan GothelloGreen. Judul game yang
saya buat terinspirasi dengan berita-berita kebakaran hutan di Indonesia.
Dengan game ini pemain harus memperbanyak pohon-pohon agar hutan di Indonesia
tetap lestari.
Gambar 1.1 Tampilan
Splash Screen dan Timer
Gambar 1.2 Tampilan Splash Screen dan Timer
Permainan ini
menggunakan konsep AI atau Artificial Intelligence atau kecerdasan buatan. Kecerdasan buatan yang
terdapat pada game ini berada pada komputer yang akan berperan sebagai lawan.
Komputer akan selalu berusaha untuk mengalahkan pemain dengan cara menutup
langkah pemain dengan membuat garis. Komputer mempunyai strategi sendiri agar
menjadi pemenang untuk mengalahkan pemain.
Permainan GothelloGreen ini didalamnya terdapat beberapa button, yang ada
di tampilan pada Window Menu terdapat tiga button yaitu
button pertama Start untuk memulai permainan bila di klik maka akan membuka Window
Game, button kedua About bila di klik
akan menampilkan window tentang
developed, ketiga button Exit bila
di klik maka window akan
keluar.
Pada
button Start jika di klik akan memunculkan Window Game, pada Window Game
terdapat Menu dan Back. Jika Menu di klik maka terdapat tiga pilihan, pilihan petama
New Game untuk memulai permainan baru, kedua How To Play untuk menampilkan cara
bermain permainan GothelloGreen, dan yang ketiga Exit untuk meninggalkan Window
Game. Pada Back jika di klik akan kembali ke Window Menu.
Gambar 1.3 Tampilan Button About
Gambar 1.4 Tampilan Window Game
Gambar
1.5 Bidak Api ( AI ) Gambar 1.6 Bidak Pohon ( User )
Gambar
1.7 Menu dan Back pada Window Game
Gambar 1.8 Tampilan
Window Game
RULES
Rules atau aturan main yang
digunakan pada permainan GothelloGreen.
Cara bermainnya pun tidak jauh berbeda dengan Othello pada umumnya. Dan berikut
adalah aturan permainan tersebut:
1.
Pada awal permainan
diletakkan enam
buah bidak berbentuk kotak,
yaitu tiga bidak bergambar Pohon sebagai user dan tiga
bidak bergambar Api
sebagai AI di tengah-tengah papan dengan susunan seperti di bawah ini.
Gambar 2.1 Tampilan awal dengan 6 bidak
2.
Letakkan disisi bidak
dengan cara mengapit bidak lawan yang ada di papan dimana pada ujung dan
pangkalnya harus ada bidak kepunyaan si pemain sebagai syarat untuk membaliknya
agar menjadi kepunyaan si
pemain.
Dilakukan secara horizontal, vertical maupun diagonal.
Gambar 2.2 Syarat peletakan
bidak
3.
Bidak yang terjepit
akan menjadi milik pemain yang menjepitnya.
4.
Jika pada semua kotak
sudah terisi bidak kepunyaan pemain dan lawan diantara mereka mempunyai bidak
yang sama banyak maka permainan dinyatakan permainan
seri.
5.
Kondisi pemain menang
apabila bidak bergambar pohon
lebih banyak dari bidak bergambar api
kepunyaan komputer.
6.
Kondisi pemain kalah
apabila bidak pohon
lebih sedikit dibandingkan bidak api
kepunyaan
komputer.
7.
Pemenang adalah pemain
yang memiliki bidak terbanyak pada papan permainan dan permainan berakhir.
GOAL
Goal atau tujuan untuk
menyelesaikan permainan GothelloGreen adalah dengan memenuhi daerah kotak papan
permainan dengan bidak user
lebih banyak dibandingkan bidak AI.
Jika seorang pemain tidak dapat meletakan bidak karena seluruh kotak telah
terisi atau tidak ada posisi yang diperbolehkan untuk meletakkan bidak, maka
permainan berakhir. Pemenangnya adalah pemain yang memiliki bidak paling banyak
di atas papan.
Pada game ini juga mempunyai goal
atau tujuan untuk dapat memenangkan permainan dengan mengumpulkan bidak paling
banyak dalam kotak yang tersedia. Pemain dengan bidak Pohonnya banyak maka akan
memenangkan permainan. Berikut ini contoh pemain yang dapat memenangkan
permainan:
Gambar 3.1
Tampilan Pemain Menang
Pemain pada game ini kalah apabila
memiliki jumlah bidak Pohon lebih
sedikit dari pada bidak Api.
Dan berikut ini contoh pemain yang kalah pada permainan GothelloGreen ini:
Gambar 3.2
Tampilan Pemain Saat Kalah
KONSEP AI dan ALGORITMA
Kecerdasan
buatan dapat diterapkan atau diimplementasikan kedalam berbagai bentuk
aplikasi, yang paling mudah dan digemari oleh banyak orang misalnya pada sebuah
permainan atau games. AI (Artificial Intelligence) adalah salah satu bagian ilmu
komputer yang membuat agar mesin/komputer dapat melakukan pekerjaan seperti
layaknya dan sebaik yang dilakukan oleh manusia. Permainan ini berbasis
Artificial Intelligience (kecerdasan buatan). Pada permainan ini, kecerdasan
buatan yang terkandung di dalamnya adalah AI yang dibuat untuk menjadi lawan
user. Dan pada game ini manusia dibutuhkan kecerdasan, ketelitian untuk menguji
pemikiran manusia untuk dapat dikatakan cerdas.
Jenis
algoritma yang diterapkan dalam permainan GothelloGreen adalah Algoritma Minimax. Algoritma
Minimax merupakan algoritma yang digunakan untuk menentukan pilihan agar
memperkecil kemungkinan kehilangan nilai
maksimal. Algoritma ini diterapkan dalam
permainan yang melibatkan dua pemain dan permainan yang menggunakan strategi
atau logika.
Algoritma
Minimax pada GothelloGreen
diterapkan oleh AI untuk dapat menentukan langkah apa yang sebaiknya diambil,
agar langkah yang diambil tersebut bertujuan untuk membuat AI memenangkan
permainan ini atau minimal membuat skor pemain menjadi sama.
LISTING PROGRAM
%=========================================================================%
% This game developed by Name :
Karyna Khaerani
% NPM :
54412038
% Class : 3IA12
% Fakultas :
Teknik Industri
% Jurusan :
Teknik Informatika
%
% Gunadarma University
%=========================================================================%
?-
%=========================
Background ====================================%
G_background1 is bitmap_image("pictures/backgroundsplashtimer.bmp",_),
G_background2 is bitmap_image("pictures/backgroundmenu.bmp",_),
%=========================================================================%
%=========================
Timer dan Splash Screen =======================%
window(G_pertama,_,window_pertama(_),"Window
Timer and Splash Screen",(100,200,800,400)).
window_pertama(init):-
G_batas := 1,
G_waktu is set_timer(_,1.0,fungsi_timer).
window_pertama(paint):-
draw_bitmap(0,0,G_background1,_,_).
fungsi_timer(end):-
G_batas := G_batas +1,
(G_batas = 2 -> close_window(G_pertama),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500)).
window_kedua(paint):-
draw_bitmap(0,0,G_background2,_,_).
%=========================================================================%
%===============================
Button Window Menu ==============================%
window_kedua(init):-
button(_,_,tombol_1(_),"Start",450,200,125,30),
button(_,_,tombol_2(_),"About",450,250,125,30),
button(_,_,tombol_3(_),"Exit",450,300,125,30).
%=================================================================================%
%==================================
Button Start =================================%
tombol_1(press):-
close_window(G_kedua),
beep("sound//simplesound"),
G_title is bitmap_image("pictures/game4.bmp",_),
set(sit([[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,w,b,w,n,n],[n,n,b,w,b,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n]])),
pen(3,rgb(0,255,0)),
window(G_ketiga,_,window_ketiga(_),"Window Game
GothelloGreen",100,50,1024,650).
window_ketiga(paint):-
draw_bitmap(0,0,G_title,_,_),
fail.
%=================================================================================%
%=================================
Deklarasi Menu Game ===========================%
window_ketiga(init):-
menu(pop_up,_,_,menu_game(_),"&Menu"),
menu(normal,_,_,menu_back(_),"&Back").
menu_game(init):-
menu(normal,_,_,menu_newgame(_),"&New
Game"),
menu(normal,_,_,menu_htp(_),"&How To
Play"),
menu(normal,_,_,menu_exit(_),"&Exit").
%=================================================================================%
%=================================
Button New Game ===============================%
menu_newgame(press):-
close_window(G_ketiga),
G_title is bitmap_image("pictures/game4.bmp",_),
set(sit([[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n],[n,n,w,b,w,n,n],[n,n,b,w,b,n,n],[n,n,n,n,n,n,n],[n,n,n,n,n,n,n]])),
pen(3,rgb(0,255,0)),
window(G_ketiga,_,window_ketiga(_),"Window Game
GothelloGreen",100,50,1024,650).
window_ketiga(paint):-
draw_bitmap(0,0,G_title,_,_),
fail.
%=================================================================================%
%=============================
Button Back Menu ==================================%
menu_back(press):-
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
%=================================================================================%
%===========================
Button How To Play Menu =============================%
menu_htp(press):-
message("Rules", "Cara
Bermain:
1. Jepitlah bidak othello
lawan secara horizontal, vertikal atau diagonal.
2. Bidak othello yang
terjepit akan menjadi milik pemain yang menjepitnya.
3. Jika AI tidak dapat
meletakkan bidak, maka gilirannya akan digantikan oleh user.
4. Jika user tidak dapat
meletakkan bidak, maka permainan berakhir.
5. Pemain dengan jumlah
bidak othello terbanyak adalah pemenangnya.", i).
%=================================================================================%
%===========================
Button Exit Menu ====================================%
menu_exit(press):-
message("Pesan","Good Bye !!!",i),
beep("sound//exit"),
close_window(G_ketiga).
%=================================================================================%
%=============================
Garis Game ========================================%
window_ketiga(paint):-
brush(rgb(255,255,255)),
rect(50,50,400,400),
for(I,0,7),
X is I * 50 + 50,
line(X,50,X,400),
line(50,X,400,X),
fail.
%=================================================================================%
%===============================
Bidak AI ========================================%
window_ketiga(paint):-
brush("pictures//fire.bmp"),
sit(H),
for(J,0,7),
for(I,0,7),
take(H,Line,J),
take(Line,b,I),
X is I*50 + 50,
Y is J*50 + 50,
X1 is X + 50,
Y1 is Y + 50,
rect(X,Y,X1,Y1),
fail.
%=================================================================================%
%=================================
Bidak player ==================================%
window_ketiga(paint):-
brush("pictures//tree.bmp"),
sit(H),
for(J,0,7),
for(I,0,7),
take(H,Line,J),
take(Line,w,I),
X is I*50 + 50,
Y is J*50 + 50,
X1 is X + 50,
Y1 is Y + 50,
rect(X,Y,X1,Y1),
fail.
%=================================================================================%
%===========================
Kondisi WIN atau Lose ===============================%
window_ketiga(paint):-
brush(rgb(128,255,255)),
sit(H),
N1 is
count_successes(victory(w,H)),
N2 is
count_successes(victory(b,H)),
text_out(425, 525, "Tree :
"+print(N1)+" "),
text_out(50, 525, "Fire :
"+print(N2)+" "),
(N1>N2, N1+N2<49 ->
text_out(155,450, " Info : Yeeyy, You Win ")
else(N1>N2, N1+N2 =:=49 ->
ask1
else (N1=\= 2, N2=\= 2, N1=N2, N1+N2<49->
text_out(145,450, " Info : Heemmmm, Draw ")
else (N1 = N2, N1+N2 =:=49 ->
ask3
else (N1<N2, N1+N2<49 ->
text_out(150,450, " Info : Sorry, You Lose ")
else (N1 < N2, N1+N2=:=49 ->
ask2
)))))).
%=================================================================================%
%===================================
Pesan =======================================%
ask1:-
message("End
Game","Congratulations...",i),
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
ask2:-
message("You
Lose","On Fire",i),
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
ask3:-
message("End
Game","Fire and Tree Balance",i),
close_window(G_ketiga),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
%=================================================================================%
window_ketiga(mouse_click(X,Y)):-
X1 is (X - 40) // 50,
Y1 is (Y - 40) // 50,
X1 >= 0,
X1 =< 6,
Y1 >= 0,
Y1 =< 6,
sit(Sit1),
insert(X1,Y1,w),
sit(Sit2),
not(Sit1=Sit2),
window_ketiga(paint),
wait(1),
take3(Sit2,n,X2,Y2),
insert(X2,Y2,b),
sit(Sit3),
not(Sit2=Sit3),
window_ketiga(paint).
insert(X,Y,Who):-%trace,
sit(Sit),
take2(Sit,n,X,Y),
opposit(Who,NewWho),
for(WayX,-1,1),
for(WayY,-1,1),
sit(Sit2),
neighbour(NewWho,X,Y,Sit2,WayX,WayY),
jump(NewWho,X,Y,Sit2,WayX,WayY,NewX,NewY),
replace3(Result,Sit2,Who,X,Y,NewX,NewY,WayX,WayY),
set(sit(Result)),
fail.
insert(X,Y,Who).
neighbour(Who,X,Y,Sit,WayX,WayY):-
X1 is X+ WayX,
Y1 is Y+ WayY,
take2(Sit,Who,X1,Y1).
jump(Who,X,Y,Sit,WayX,WayY,X2,Y2):-
X1 is X+ WayX,
Y1 is Y+ WayY,
opposit(Who,NewWho),
neighbour(NewWho,X1,Y1,Sit,WayX,WayY),
X2 is X1+ WayX,
Y2 is Y1+ WayY.
jump(Who,X,Y,Sit,WayX,WayY,NewX,NewY):-
X1 is X+ WayX,
Y1 is Y+ WayY,
neighbour(Who,X1,Y1,Sit,WayX,WayY),
jump(Who,X1,Y1,Sit,WayX,WayY,NewX,NewY).
take3(Sit,El,0,0):-
take2(Sit,El,0,0).
take3(Sit,El,0,6):-
take2(Sit,El,0,6).
take3(Sit,El,6,0):-
take2(Sit,El,6,0).
take3(Sit,El,6,6):-
take2(Sit,El,6,6).
take3(Sit,El,X,Y):-
take2(Sit,El,X,Y).
take2(Sit,El,X,Y):-
take(Sit,Row,Y),
take(Row,El,X).
replace2(Result,Sit,El,X,Y):-
take(Sit,Line,Y),
replace(NewLine,Line,El,X),
replace(Result,Sit,NewLine,Y).
replace3(Result,Result,Who,X,Y,X,Y,WayX,WayY).
replace3(Result,Sit,Who,X,Y,ToX,ToY,WayX,WayY):-
replace2(ResultP,Sit,Who,X,Y),
X1 is X + WayX,
Y1 is Y + WayY,
replace3(Result,ResultP,Who,X1,Y1,ToX,ToY,WayX,WayY).
replace([New,B,C,D,E,F,G],[_,B,C,D,E,F,G],New,0).
replace([A,New,C,D,E,F,G],[A,_,C,D,E,F,G],New,1).
replace([A,B,New,D,E,F,G],[A,B,_,D,E,F,G],New,2).
replace([A,B,C,New,E,F,G],[A,B,C,_,E,F,G],New,3).
replace([A,B,C,D,New,F,G],[A,B,C,D,_,F,G],New,4).
replace([A,B,C,D,E,New,G],[A,B,C,D,E,_,G],New,5).
replace([A,B,C,D,E,F,New],[A,B,C,D,E,F,_],New,6).
take([El,_,_,_,_,_,_],El,0).
take([_,El,_,_,_,_,_],El,1).
take([_,_,El,_,_,_,_],El,2).
take([_,_,_,El,_,_,_],El,3).
take([_,_,_,_,El,_,_],El,4).
take([_,_,_,_,_,El,_],El,5).
take([_,_,_,_,_,_,El],El,6).
victory(Who,[[Who,_,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,Who,_,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,Who,_,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,Who,_,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,Who,_,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,Who,_],_,_,_,_,_,_]).
victory(Who,[[_,_,_,_,_,_,Who],_,_,_,_,_,_]).
victory(Who,[_,[Who,_,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,Who,_,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,Who,_,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,Who,_,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,Who,_,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,Who,_],_,_,_,_,_]).
victory(Who,[_,[_,_,_,_,_,_,Who],_,_,_,_,_]).
victory(Who,[_,_,[Who,_,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,Who,_,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,Who,_,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,Who,_,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,Who,_,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,Who,_],_,_,_,_]).
victory(Who,[_,_,[_,_,_,_,_,_,Who],_,_,_,_]).
victory(Who,[_,_,_,[Who,_,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,Who,_,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,Who,_,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,Who,_,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,Who,_,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,Who,_],_,_,_]).
victory(Who,[_,_,_,[_,_,_,_,_,_,Who],_,_,_]).
victory(Who,[_,_,_,_,[Who,_,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,Who,_,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,Who,_,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,Who,_,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,Who,_,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,Who,_],_,_]).
victory(Who,[_,_,_,_,[_,_,_,_,_,_,Who],_,_]).
victory(Who,[_,_,_,_,_,[Who,_,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,Who,_,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,Who,_,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,Who,_,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,Who,_,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,Who,_],_]).
victory(Who,[_,_,_,_,_,[_,_,_,_,_,_,Who],_]).
victory(Who,[_,_,_,_,_,_,[Who,_,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,Who,_,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,Who,_,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,Who,_,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,Who,_,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,Who,_]]).
victory(Who,[_,_,_,_,_,_,[_,_,_,_,_,_,Who]]).
opposit(b,w).
opposit(w,b).
%===================================
Button About ================================%
tombol_2(press):-
close_window(G_kedua),
beep("sound//simplesound"),
G_title is bitmap_image("pictures/about.bmp",_),
window(G_keempat,_,window_keempat(_),"Window
About",100,100,600,400).
window_keempat(paint):-
draw_bitmap(0,0,G_title,_,_),
fail.
window_keempat(init):-
menu(normal,_,_,menu_back(_),"&Back").
menu_back(press):-
close_window(G_keempat),
window(G_kedua,_,window_kedua(_),"Window
Menu",100,200,666,500).
fail.
%=================================================================================%
%================================
Button Exit ====================================%
tombol_3(press):-
beep("sound//simplesound"),
message("Pesan","Good Bye !!!",i),
beep("sound//exit"),
close_window(G_kedua).
%=================================================================================%
GLOSARIUM
Strawberry
Prolog
Strawberry Prolog adalah bahasa pemrograman Prolog.
Sintaksnya sangat dekat dengan ISO-Prolog tapi itu memiliki banyak ekstensi
yang bukan bagian dari standar. Gagasan utama dari Strawberry Prolog adalah
sangat mudah digunakan dan itulah mengapa beberapa universitas menggunakannya
untuk prolog kursus mereka.
Algoritma
Algoritma adalah kumpulan perintah-perintah untuk
menyelesaikan suatu masalah. Algoritma akan dapat selalu berakhir untuk semua
kondisi awal yang memenuhi kriteria. Algoritma sering mempunyai langkah
pengulangan atau memerlukan keputusan sampai tugasnya selesai.
Algoritma
minimax
Merupakan basis dari semua permainan berbasis AI
seperti permainan catur misalnya. AI permainan catur tentunya sudah sangat
terkenal dimana AI tersebut bahkan dapat mengalahkan juara dunia sekalipun.
Pada algoritma minimax, pengecekan akan seluruh kemungkinan yang ada sampai
akhir permainan dilakukan.
Artificial
Intelligence
Kecerdasan buatan dapat
diterapkan atau diimplementasikan kedalam berbagai bentuk aplikasi, yang paling
mudah dan digemari oleh banyak orang misalnya pada sebuah permainan atau games.
AI (Artificial
Intelligence) adalah salah satu bagian ilmu komputer yang membuat agar
mesin/komputer dapat melakukan pekerjaan seperti layaknya dan sebaik yang
dilakukan oleh manusia.
Initial States
Initial States merupakan sebuah
kondisi awal pada sebuah object sebelum ada perubahan keadaan.
Othello atau
Reversy
Permainan yang terdapat pada Strawberry Prolog.
Reversy adalah permainan dengan memperebutkan daerah papan dengan cara membalik
bidak lawan menjadi bidak sendiri.
Tidak ada komentar:
Posting Komentar