Initial State
Game Jawara of Sky merupakan pengembangan dari game
sky wars pada contoh game strawberry prolog. Dalam star wars, user memiliki
tujuan untuk mengalahkan setiap musuh yang datang hingga pesawat yang kita
kendalikan hancur jika terkena setiap benturan dari pesawat ataupun serangan
musuh. Namun pada game Jawara of Sky ini memiliki perbedaan dimana didalam
permainan terdapat health point (HP) untuk pesawat player sehingga jika terkena
satu serangan saja, akan hanya berdampak pada pengurangan HP player dan tidak
langsung hancur. Pesawat player akan hancur jika HP sudah habis atau 0%.
Kemudian juga perbedaan game Jawara of Sky ini dengan star wars pada prolog
terdapat pada timer pada saat bermain. Sehingga game Jawara of Sky mempunyai
goal tersendiri yaitu player harus bertahan selama 30 detik. Jika player mampu
melewati waktu yang sudah ditentukan, maka player dinyatakan menang. Akan
tetapi, jika HP player sudah habis sebelum waktu yang ditentukan berakhir,
player dinyatakan kalah dalam pertempuran.
Pada
interface game terdapat Menu, Level dan About Me, dimana Menu berisikan New
Game, bantuan dan exit, kemudian Level
berisikan pilihan level mana yang akan di mulai, dan About Me sebagai identitas
dari pengembang game The Hobbit of Snake.
Pada permulaan awal game akan tampil sebuah splash
screen garis beserta video berupa filecopy. Kemudian pada tampilan menu game
terdapat pilihan Start, About, Help dan Keluar.
Tampilan pada saat
splash screen
Tampilan menu awal
Rules
1. Menggunakan
kontroler W, A, S dan D pada keyboard untuk mengendalikan pesawat player.
2. Menggunakan K
untuk menyerang, Q untuk serangan spesial, P untuk pause saat mulai bermain dan
ESC untuk menyerah dalam permainan.
3. Mengalahkan
musuh yang bermunculan hingga mencapai batas waktu tertentu.
4. Jika player
kehabisan health point (HP) maka player
dinyatakan gugur dalm permainan.
5. Jika player
dapat bertahan dan tidak kehabisan HP hingga batas waktu yang telah ditentukan,
maka player dinyatakan menang.
Goals
Dalam permainan Jawara of Sky memiliki tujuan akhir
untuk mengalahkan musuh hingga batas waktu yang telah ditentukan. Jika sebelum
habis batas waktu dan player telah kehabisan HP, maka player dinyatakan gugur
dalam pertempuran.
Screenshot
:
Tampilan pada saat
menang
Tampilan pada saat
kalah
konsep AI
AI
Kecerdasan Buatan atau Intelegensi Artifisial (AI)
didefinisikan sebagai kecerdasan entitas ilmiah. Sistem seperti ini umumnya
dianggap komputer. Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin
(komputer) agar dapat melakukan pekerjaan seperti yang dapat dilakukan manusia.
Beberapa macam bidang yang menggunakan kecerdasan buatan antara lain sistem
pakar, permainan komputer (games), logika fuzzy, jaringan syaraf tiruan dan
robotika.
Konsep AI atau kecerdasan buatan dalam game ini
bukanlah seperti pada kebanyakan game yang memiliki AI pada lawannya. Konsep AI
pada game ini terdapat dalam sistem permainan itu sendiri. Yaitu dimana sistem
permainan dapat mengecek setiap collision
(tabrakan) yang terjadi pada player dengan musuh.
Algoritma
Algoritma adalah metode efektif diekspresikan sebagai
rangkaian terbatas dari instruksi-instruksi yang telah didefinisikan dengan
baik. Algoritma merupakan suatu teknik dalam
kumpulan perintah untuk menyelesaikan suatu masalah. Perintah-perintah ini
dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut
dapat berupa apa saja, dengan catatan untuk setiap masalah, ada kriteria
kondisi awal yang harus dipenuhi sebelum menjalankan algoritma.
Dalam
permainan ini AI menggunakan algoritma pencarian solusi secara melebar atau breadth first search (BFS).
Dalam algoritma BFS solusi dicari dengan membentuk pohon ruang status yang
merupakan pohon dinamis. BFS mencari solusi persoalan pada pohon ruang status
yang dibentuk secara dinamis. dengan cara semua simpul pada aras d dibangkitkan
terlebih dahulu sebelum simpul-simpul pada aras d+1. Simpul BFS memerlukan
sebuah antrian untuk menyimpan simpul-simpul yang akan dibangkitkan.
Simpul-simpul yang dibangkitkan disimpan di belakang antrian.
Dalam penerapannya dalam game
Jawara of Sky, algoritma BFS terdapat dalam sistem pada game dimana sistem
dapat mengecek setiap tabrakan yang terjadi pada player. Adapun sintax BFS yang
terdapat dalam game Jawara of Sky adalah sebagai berikut :
crash(X1, Y1, X2, Y2) :- !,
TX1 is ship_left(X1),
TX2 is ship_right(X1),
TY1 is ship_up(Y1),
TY2 is ship_down(Y1),
do_crash_check(TX1,
TX2, TY1, TY2, X2, Y2).
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX1, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX1, TY2), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX2, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX2, TY2), !.
check_collisions(_) :- !, enemy_ships(EShips), enemy_bombs(EBombs), check_es(EShips, NewShips), check_eb(EBombs),
retract(enemy_ships(_)), assert(enemy_ships(NewShips)).
check_es([],[]) :- !.
check_es([ship(D, X, Y)|T], []) :- X1 is G_X, Y1 is G_Y, crash(X, Y, X1, Y1), !, bar_ngurang(_).
check_es([ship(D, X, Y)|T], [ship(D, X, Y)|R]) :- survive_enemy(X, Y), !, check_es(T, R).
check_es([ship(D, X, Y)|T], R) :- !, (G_AutoFired is 0 -> G_Score := G_Score + G_PTS else G_Score := G_Score - G_PTS),
(G_HighScore < G_Score -> G_HighScore := G_Score), G_Difficulty := G_Difficulty + 2, check_es(T, R).
survive_enemy(X, Y) :- !, player_bombs(Bombs), s_e(X, Y, Bombs).
s_e(_, _, []) :- !.
s_e(X, Y, [bomb(AutoFire, BX, BY)|T]) :- is_in_ship(X, Y, BX, BY), !, G_AutoFired := AutoFire, fail.
s_e(X, Y, [bomb(_, _, BY)|T]) :- !, s_e(X, Y, T).
%bbbbbbb pengecekan tubrukan terhadap
serangan musuh dddddddddddd
check_eb([]) :- !.
check_eb([bomb(_, BX, BY)|T]) :- X1 is G_X, Y1 is G_Y, is_in_ship(X1, Y1, BX, BY), !, bar_ngurang(_).
check_eb([bomb(_, BX, BY)|T]) :- !, check_eb(T).
=======================================================================================
LISTING PROGRAM
?-
%inisialisasi
gambar
G_bgawal is bitmap_image("Picture\\bg2.bmp",_),
G_sky is bitmap_image("Picture\\langit.bmp",_),
%--------------------------loading
window(G_layer0,_,window_awal(_),"Loading... ", 540,250,400,300).
window_awal(init):-
G_batas_line := 145,
G_batas_text := 0,
G_waktu is set_timer(_,0.1,fungsi_timer).
fungsi_timer(end):-
G_batas_line := G_batas_line + 10,
G_batas_text := G_batas_text + 10,update_window(_),
(G_batas_text = 110 -> close_window(G_layer0),execute("sound\\menu.exe"),
window(G_layer1,_,window_menu(_),"Menu
progress", 450,100,500,490)).
window_awal(paint):-
text_out(150,190,print("loading: " + G_batas_text +" %")),
animate(_,_,fail(_),"video/FILECOPY.AVI",60,50),
pen(9,rgb(250,0,0)),
rect(120,130,270,170),
pen(15,rgb(0,0,180)),
line(145,150,G_batas_line,150).
%--------------------------tampilan
program menu
window_menu(paint) :-
draw_bitmap(0,0,G_bgawal,_,_),
text_out(220,190,print("1 - Start")),
text_out(220,220,print("2 - About")),
text_out(220,250,print("3 - Help")),
text_out(220,310,print("4 - Exit")).
%-------
Fungsi about ---------
about_game(press) :-
shell_execute("JOS.html").
%---------
fungsi start ------------
new_window2(press) :-
beep("sound\\gun.wav"),close_window(G_layer1),
window( G_layer2, _, window_game(_), "Jawara Of
Sky", 450,100,500,500).
%----------------------pilihan
help----------
pilihan_help(press):-
message("Help","K : untuk
menembak\nW : untuk ke atas\nA : untuk ke kiri\nS : untuk ke bawah\nD : untuk
ke kanan
\nP : untuk
pause\nESC : untuk menyerah",i).
%------------------pilihan
keluar-------------
pilihan_exit(press):-
beep("sound\\Lock.wav"),
not(yes_no("konfirmasi","Anda Yakin Ingin Keluar Dari Permainan?", ?)->execute("sound\\cleanmenu.bat"),close_window(G_layer1)).
%+++++++++++++++++++++++++++Gamenya+++++++++++++++++++++++
%----luas
area permainan------
width(480) :- !.
height(460) :- !.
%dead or
alive?
dead.
%ship
data:
ship_half_width(20) :- !.
ship_height(30) :- !.
ship_minship(100) :- !.
%enemies:
enemy_ships([]).
enemy_bombs([]).
%speed:
speed(10) :- !.
%G_EnemySpeed
player_bomb_speed(15) :- !.
%player:
player_bombs([]).
%kalo
mokad
die(_) :- !,
execute("sound\\cleangame.bat"),execute("sound\\menu.exe"),
assert(first_sleepint_paint), assert(dead).
%setting
difikulnye
start_game(P,
S, PTS) :-
execute("sound\\bb.exe"),
execute("sound\\cleanmenu.bat"),
retract(dead),
retract(enemy_ships(_)), assert(enemy_ships([])),
retract(enemy_bombs(_)), assert(enemy_bombs([])),
width(W), height(H), X is W >> 1, Y is H - 1,
G_D := 0,
G_X := X,
G_Y := Y,
retract(player_bombs(_)), assert(player_bombs([])),
(paused -> retract(paused)),
G_HP:=220,
G_limit:=31,
G_info:= 20,
G_text_HP:=100,
G_Difficulty := P,
G_EnemySpeed := S,
G_DirectionTimer := -100,
G_PTS := PTS,
G_Score := 0,
update_window(_).
%inisialisasi
bentuk kapal
is_in_ship(X,
Y, PX, PY) :- !,
ship_left(X) =< PX,
ship_right(X) >= PX,
ship_up(Y) =< PY,
ship_down(Y) >= PY.
%Kalo
nabrakk
crash(X1,
Y1, X2, Y2) :- !,
TX1 is ship_left(X1),
TX2 is ship_right(X1),
TY1 is ship_up(Y1),
TY2 is ship_down(Y1),
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2).
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX1, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX1, TY2), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX2, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2,
Y2, TX2, TY2), !.
%koordinat
batas di dalam pesawat:
R is ship_up(int Y) :- !, ship_height(SH), R0 is Y - SH, R is R0 + 5.
R is ship_down(int Y) :- !, R is Y.
R is ship_left(int X) :- !,
ship_half_width(SHW), R is X - SHW.
R is ship_right(int X) :- !,
ship_half_width(SHW), R is X + SHW.
%#############penambahan
musuh##############
add_enemy(_) :- X is G_LastShipWay, ship_minship(Y), X > Y,
R0 is random(1000), R1 is G_Difficulty, R2 is R1 >> 1, R0 < R2, !,
width(W), ship_half_width(HW), W1 is W - HW - HW, XNEW is random(W1) + HW,
enemy_ships(L), random_left_right(D), ship_height(SHH), L1 is [ship(D, XNEW, SHH)|L],
retract(enemy_ships(_)), assert(enemy_ships(L1)),
G_LastShipWay := 0.
add_enemy(_) :- !.
random_left_right(X) :- Y is random(1000), Y < 500, !, X is left.
random_left_right(right) :- !.
%$$$$$$$$$$
Serangan musuh $$$$$$$$$$$$
fire_enemy(X,
Y) :- R0 is random(1000), R1 is G_Difficulty, R2 is R1 >> 2, R0 < R2, !,
enemy_bombs(L), random_speed(S), L1 is [bomb(S, X, Y)|L],
retract(enemy_bombs(_)), assert(enemy_bombs(L1)).
fire_enemy(X, Y) :- !.
random_speed(S) :- !, S0 is G_EnemySpeed, S1 is S0 / 4, S2 is S0 * 1.5, S3 is S1 * 1000, S4 is S2 * 1000,
S5 is S4 - S3, INTS5 is integer(S5), R0 is random(INTS5) + S3, S is R0 / 1000.
%$$$$$$$$$
Serangan Player $$$$$$$$$$$$
fire_player(_) :- firing, !, retract(firing), player_bombs(L), X is G_X, Y is G_Y, ship_height(SH), Y1 is Y - SH -7,
(autofire -> AutoFire := 1 else AutoFire := 0), L1 is [bomb(AutoFire, X,
Y1)|L],
retract(player_bombs(_)), assert(player_bombs(L1)).
fire_player(_) :- !.
update_positions(_) :- !, update_enemies(_), update_bombs(_), update_player_bombs(_), update_player(_).
% {{
UPDATE_ENEMIES:
update_enemies(_) :- !, enemy_ships(L), update_enemy(L,
R), retract(enemy_ships(_)), assert(enemy_ships(R)).
update_enemy([], []) :- !.
update_enemy([ship(D, X, Y)|T], R) :- height(H), S is G_EnemySpeed, Y1 is ship_down(Y + S), Y1 > H, !, update_enemy(T, R).
update_enemy([ship(D, X, Y)|T], [ship(D, RX, RY)|R]) :- S is G_EnemySpeed, preserve_direction(D, S, X, RX), !, RY is Y + S, update_enemy(T, R).
update_enemy([ship(D, X, Y)|T], [ship(RD, X, RY)|R]) :- !, S is G_EnemySpeed, RY is Y + S, opposite(D, RD), update_enemy(T,
R).
preserve_direction(left, S, X, RX) :- !, RX is X - S, ship_left(RX) >= 0.
preserve_direction(right, S, X, RX) :- !, RX is X + S, width(W), ship_right(RX) < W.
opposite(left, right) :- !.
opposite(right, left) :- !.
% }}
%update
enemy bombs:
update_bombs(_) :- !, enemy_bombs(L), update_bomb(L,
R), retract(enemy_bombs(_)), assert(enemy_bombs(R)).
update_bomb([], []) :- !.
update_bomb([bomb(S, X, Y)|T], R) :- height(H), Y1 is Y + S, Y1 > H, !, update_bomb(T, R).
update_bomb([bomb(S, X, Y)|T], [bomb(S, X, RY)|R]) :- !, RY is Y + S, update_bomb(T,
R).
%update
player bombs:
update_player_bombs(_) :- !, player_bombs(L),
update_player_bomb(L, R),
retract(player_bombs(_)), assert(player_bombs(R)).
update_player_bomb([], []) :- !.
update_player_bomb([bomb(_, X, Y)|T], R) :-
player_bomb_speed(S), Y1 is Y - S, Y1 < 0, !, update_player_bomb(T, R).
update_player_bomb([bomb(AutoFire, X, Y)|T], [bomb(AutoFire, X,
RY)|R]) :- !, player_bomb_speed(S), RY is Y - S, update_player_bomb(T, R).
%update
player:
update_player(_) :- G_DirectionTimer > 0, !, D is G_D, X is G_X, Y is G_Y, speed(S), update_player_impl(S, D, X, Y, RX, RY), G_X := RX, G_Y := RY.
update_player(_) :- !.
update_player_impl(S, 1, X, Y, X, RY) :- Y0 is Y - S, ship_up(Y0) < 0, !, ship_height(RY).
update_player_impl(S, 1, X, Y, X, RY) :- !, RY is Y - S.
update_player_impl(S, 4, X, Y, X, RY) :- Y1 is Y + S, height(H), Y1 >= H, !, RY is H - 1.
update_player_impl(S, 4, X, Y, X, RY) :- !, RY is Y + S.
update_player_impl(S, 2, X, Y, RX, Y) :- X0 is X - S, ship_left(X0) < 0, !, ship_half_width(RX).
update_player_impl(S, 2, X, Y, RX, Y) :- !, RX is X - S.
update_player_impl(S, 3, X, Y, RX, Y) :- X0 is X + S, width(W), ship_right(X0) > W, !, ship_half_width(HW), RX is W - HW.
update_player_impl(S, 3, X, Y, RX, Y) :- !, RX is X + S.
update_player_impl(S, D, X, Y, X, Y) :- !.
%>>>>>>>>>>>>>>>>>Sistem
HP<<<<<<<<<<<<<<<<<<<<<
bar_HP(_):-
line(20,80,G_HP,80),
text_out(20,90,print("HP : " + G_text_HP +" %")).
bar_ngurang(_):-
G_text_HP:=G_text_HP - 10,
G_HP:=G_HP - 20,(G_HP = 20 ->tampilan_kalah(_)).
%)))))))))))info
pas maen((((((((
tampilan_info(_):-
text_out(G_info,435,print("Tekan P untuk berhenti - Tekan ESC
untuk menyerah")).
info_gerak(end):-
G_info:=G_info-5,(G_info= -250 -> G_info:=500).
%~~~~~~~~~limit
maen~~~~~~~~~~~~~~
tampilan_limit(_):-
text_out(250,20,print(G_limit)).
limit_survive(end):-
G_limit:=G_limit-1,(G_limit=0 ->set_pause(_),
message("You Win !!","\t\tSelamat!! \nAnda Telah Berhasil Bertahan Dari Serangan
Musuh",i),die(_),update_window(_)).
%!!!!!!!!notif
kalo kalah!!!!!!!!
tampilan_kalah(_):-
die(_),update_window(_),
message("You Lose !!!","\t\tMaaf \nPesawat Anda Telah Hancur dan Anda Dinyatakan Gugur :(",!),
fail.
%***********main************
window_game(init) :- !,
G_HighScore := 0, G_LastShipWay := 0,
pen(5, rgb(0,0,0)),
X is 1/30,
G_limit := set_timer(_,1.0,limit_survive),
G_gerak := set_timer(_,0.1,info_gerak),
G_Timer := set_timer(_, X, do_timer),
fail.
%*********
Tampilan main *************
window_game(paint):-
G_player_color:=brush(rgb(0,0,0)), G_enemy_color:=brush(rgb(200,0,200)), G_Red:=brush(rgb(250,0,0)),
width(W), height(H),
brush(rgb(10, 10, 10)),
draw_bitmap(0,0,G_sky,_,_),
paint_score(_),
not(dead),
brush(G_player_color),
tampilan_limit(_),
bar_HP(_),
tampilan_info(_),
paint_player(_),
draw_player_bombs(_),
brush(G_enemy_color),
draw_enemies(_),
draw_enemy_bombs(_),
fail.
window_game(close) :- !,
kill_timer(G_layer2, G_Timer),
fail.
%=======================================Bentuk
Player
paint_player(_) :- !,
X is G_X, Y is G_Y,
X1 is ship_left(X),
X2 is ship_right(X),
YY is ship_up(Y),
fill_polygon(X1+20,Y, X2+10,Y, X+15,YY-20), %badan kanan
fill_polygon(X1-10,Y, X2-20,Y, X-15,YY-20), %badan kiri
fill_polygon(X+20,Y, X2+30,Y, X+20,YY), %sayap kanan
fill_polygon(X1-30,Y, X-20,Y, X-20,YY), %sayap kiri
fill_polygon(X1,Y, X2,Y, X,YY-40),
%badan kapal
fill_polygon(X+5,Y+10, X2+20,Y+35, X+5,YY+10), %ekor kanan
fill_polygon(X1-20,Y+35, X-5,Y+10, X-5,YY+10), %ekor kiri
pen(2,rgb(0,0,255)),
line((X,YY,X1,Y),(X,YY,X2,Y),(X1,Y,X2,Y)).
%~~~~~~~~~~~~~
Menu pada saat pemilihan level ~~~~~~~~~~
paint_score(_) :- dead, !,
text_out(197,40,"Select Level"),
text_out(180, 80, "1 - Easy"),
text_out(180, 110, "2 - Normal"),
text_out(180, 140, "3 - Don't Try This"),
text_out(180, 170, "4 - Back To Main Menu"),
text_out(180, 260, "F12 - Help"),
text_out(180, 230, "HighScore"),
text_out(260, 230, ":"),
text_out(280, 230, print(G_HighScore)).
paint_score(_) :- !,
text_out(20,20,"HighScore"),
text_out(99,20,":"),
text_out(114,20,print(G_HighScore)),
text_out(20,50,"Score"),
text_out(99,50,":"),
text_out(114,50,print(G_Score)).
%=======================Bentuk
musuhnye==============
draw_enemies(_) :- !, enemy_ships(L), d_e(L).
d_e([]) :- !.
d_e([ship(_, X, Y)|T]) :- !,
ship_half_width(HW), ship_height(SH),
X1 is ship_left(X),
X2 is ship_right(X),
YY is ship_up(Y),
fill_polygon(X1,YY, X2,YY, X, Y), d_e(T).
%===================bentuk
tembakan musuh===========
draw_enemy_bombs(_) :- !, enemy_bombs(L), d_eb(L).
d_eb([]) :- !.
d_eb([bomb(_, X, Y)|T]) :- !,
Y1 is Y - 7,
XX is round(X),
YY is round(Y),
YY1 is round(Y1),
fill_polygon(XX - 1,YY, XX + 1,YY, XX + 1, YY1, XX - 1, YY1), d_eb(T).
%@@@@@@@@@@
bentuk tembakannye @@@@@@@@@@@@@
draw_player_bombs(_) :- !, player_bombs(L), d_pb(L).
d_pb([]) :- !.
d_pb([bomb(AutoFire, X, Y)|T]):- !,
Y1 is Y + 7,
XX is round(X),
YY is round(Y),
YY1 is round(Y1),
(Condition is f ->
(AutoFire is 1 -> brush(G_Red) else brush(G_player_color))
),
fill_polygon(XX+20 ,YY, XX+20 ,YY, XX+20 , YY1, XX+20 , YY1),
fill_polygon(XX-20 ,YY, XX-20 ,YY, XX-20 , YY1, XX-20 , YY1), d_pb(T).
assert_autofire(_) :- autofire, !, retract(autofire).
assert_autofire(_) :- !, assert(autofire).
set_pause(_) :- paused, !, retract(paused).
set_pause(_) :- !, assert(paused).
%---------------------pilihan
kembali-----------
pilihan_back(press):-
beep("sound\\Lock.wav"),
close_window(G_layer2),
window(G_layer1,_,window_menu(_),"Menu progress", 450,100,500,500).
set_moving(D) :- !, G_DirectionTimer := 1, G_D := D.
%bbbbbbbbbbbbbbbb
Pengecekan tubrukan terhadap kapal musuh dddddddddddddddddd
check_collisions(_) :- !, enemy_ships(EShips), enemy_bombs(EBombs), check_es(EShips, NewShips), check_eb(EBombs),
retract(enemy_ships(_)), assert(enemy_ships(NewShips)).
check_es([],[]) :- !.
check_es([ship(D, X, Y)|T], []) :- X1 is G_X, Y1 is G_Y, crash(X, Y, X1, Y1), !, bar_ngurang(_).
check_es([ship(D, X, Y)|T], [ship(D, X, Y)|R]) :- survive_enemy(X, Y), !, check_es(T, R).
check_es([ship(D, X, Y)|T], R) :- !, (G_AutoFired is 0 -> G_Score := G_Score + G_PTS else G_Score := G_Score - G_PTS),
(G_HighScore < G_Score -> G_HighScore := G_Score), G_Difficulty := G_Difficulty + 2, check_es(T, R).
survive_enemy(X,
Y) :- !, player_bombs(Bombs), s_e(X, Y, Bombs).
s_e(_, _, []) :- !.
s_e(X, Y, [bomb(AutoFire, BX, BY)|T]) :- is_in_ship(X, Y,
BX, BY), !, G_AutoFired := AutoFire, fail.
s_e(X, Y, [bomb(_, _, BY)|T]) :- !, s_e(X, Y, T).
%bbbbbbb
pengecekan tubrukan terhadap serangan musuh dddddddddddd
check_eb([]) :- !.
check_eb([bomb(_, BX, BY)|T]) :- X1 is G_X, Y1 is G_Y, is_in_ship(X1,
Y1, BX, BY), !, bar_ngurang(_).
check_eb([bomb(_, BX, BY)|T]) :- !, check_eb(T).
fire_enemies(_) :- !, enemy_ships(L), f_e(L).
f_e([]) :- !.
f_e([ship(_, X, Y)|T]) :- !, fire_enemy(X, Y), f_e(T).
%\\\\\\\\\\\\\\\\
Perintah2 pada saat pause ///////////////
do_timer(end) :- not(dead), !,
(paused -> text_out(220,165,"Paused"),
text_out(130,200,"W/A/S/D : untuk menggerakkan pesawat"),
text_out(180,230,"K : untuk menyerang"),
text_out(175,260,"ESC : untuk menyerah"),
fail),
(autofire -> assert(firing)),
fire_player(_),
fire_enemies(_),
update_positions(_),
check_collisions(_),
S is G_EnemySpeed,
G_LastShipWay := G_LastShipWay + S,
add_enemy(_),
update_window(_),
fail.
do_timer(end) :- !,
paint_sleeping(_), fail.
paint_sleeping(_) :- first_sleeping_paint, !, retract(first_sleepint_paint), update_window(_).
paint_sleeping(_) :- !.
%^-------------------------Gamenya----------------------^
%------------------------------------------fungsi
pencetan di menu awal
window_menu(key_down(49,_)):- %1
new_window2(_) .
window_menu(key_down(50,_)):- %2
about_game(_).
window_menu(key_down(51,_)):- %3
pilihan_help(_).
window_menu(key_down(52,_)):- %4
pilihan_exit(_).
%----------------------pencetan
di gamenye
window_game(key_down(87,_)):- %W
set_moving(1).
window_game(key_down(65,_)):- %A
set_moving(2).
window_game(key_down(68,_)):- %D
set_moving(3).
window_game(key_down(83,_)):- %S
set_moving(4).
window_game(key_down(80,_)):- %P
set_pause(_).
window_game(key_down(81,_)):- %Q
assert_autofire(_).
window_game(key_down(75,_)):- %K
not(autofire), assert(firing),execute("nembak.exe").
window_game(key_down(27,_)):- %ESC
die(_), update_window(_).
window_game(key_down(49,_)):- %1
start_game(100, 5, 3), beep("sound\\gun.wav").
window_game(key_down(50,_)):- %2
start_game(150, 7, 5), beep("sound\\gun.wav").
window_game(key_down(51,_)):- %3
start_game(300, 3, 10), beep("sound\\gun.wav").
window_game(key_down(52,_)):- %4
pilihan_back(_).
window_game(key_down(123,_)):- %F12
pilihan_help(_).
GLOSORIUM
Algoritma
Algoritma
adalah suatu teknik dalam kumpulan perintah untuk menyelesaikan suatu masalah.
Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga
akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap
masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan
algoritma.
Algoritma Breadth
First Search (BFS)
Breadth-first search adalah
algoritma yang melakukan pencarian secara melebar yang mengunjungi simpul
secara preorder yaitu mengunjungi suatu simpul kemudian mengunjungi semua
simpul yang bertetangga dengan simpul tersebut terlebih dahulu. Selanjutnya,
simpul yang belum dikunjungi dan bertetangga dengan simpulsimpul yang tadi
dikunjungi , demikian seterusnya. Jika graf berbentuk pohon berakar, maka semua
simpul pada aras d dikunjungi lebih dahulu sebelum simpul-simpul pad aras d+1.
AI
AI
(Artificial Intelligence) yaitu kecerdasan buatan, dimana AI akan mengontrol
pergerakan karater yang sudah dibuat dalam menentukan jalur mendapatkan apel
dan menghidari dari tabrakan dengan dirinya sendiri dan pembatas yang ada pada
area permainan.
HP
Health Point (HP) merupakan
sebuah poin atau nilai yang menyatakan sebuah tingkat kesehatan atau nyawa yang
tersedia pada awal permainan. Pada umunya HP digunakan untuk memberikan
kesempatan hidup player di dalam game, sehingga player tidak mengalami one hit
KO (mati seketika jika terkena sekali serang).
MEIDIANA DWI ANDYNI
3IA1455413407