GAME STICKMAN CS WAR
Game Stickman CS WAR merupakan
game yang dirancang untuk simulasi pertarungan menggunakan senjata, dimana player harus menembak lawan agar dapat mengalahkan lawan dalam pertarungan, begitu pun lawan. Game ini dirancang menggunakan bahasa Prolog menggunakan compiler Strawberry
Prolog.
I. Konsep AI (Algoritma)
Game “Stickman CS WAR” ini menggunakan algoritma
program Backtracking, dimana pengertian backtracking sendiri adalah Backtracking
yang artinya algoritma yang berbasis pada DFS untuk mencari solusi persoalan
secara lebih mangkus, dan perbaikan dari algoritma brute-force,
secara sistematis mencari solusi persoalan di antara semua kemungkinan solusi
yang ada, Dengan metode runut-balik, kita tidak perlu memeriksa semua
kemungkinan solusi yang ada.
II. Penjelasan tentang game
a. Tampilan Utama
Pada
tampilan utama program ada beberapa tombol dan memiliki fungsi masing-masing
adalah :
i. Start
: Berfungsi untuk memulai game.
ii. Exit
: Berfungsi untuk keluar dari game
b. Tampilan saat bermain
Seperti yang terlihat pada gambar terdapat 2 orang stickman yang akan saling
menyerang untuk mendapatkan kemenangan hingga akhir permainan, permainan akan
terus berlangsung hingga waktu sudah habis, bila waktu habis maka permainan
dinyatakan selesai.
c. Aturan bermain (Rules)
i. Waktu yang ditentukan untuk pertarungan adalah 30 detik.
ii. Disaat waktu sedang berjalan player dan CPU harus saling memberikan
serangan 1 sama lain.
iii. Untuk melancarkan serangan pemain harus menekan tombol “arah atas” untuk
siap menembak dan tombol “Space” untuk menembak.
iv. Setiap stickman memiliki poin sebagai indikator menan, kalah atau seri.
v. Jika waktu habis dan player stickman memiliki point darah lebih banyak dari
CPU maka akan dianggap menangbegitu pula sebaliknya dan pertarungan akan
berakhir.
vi. Namun jika point darah playersama dengan CPU maka permainan dianggap seri.
III. Goals
a. Tampilan pada saat menang.
Akan muncul
text box “Anda Menang, kemampuan menembak sangat menakjubkan”, jika waktu habis
dan poin player lebih banyak dibandingkan CPU.
b. Tampilan pada saat kalah.
Akan muncul
text box “Anda kalah, Berusaha lebih giat lagi”, jika waktu habis dan poin
player sedikit dibandingkan poin CPU.
c. Tampilan pada saat seri.
Akan muncul
text box “Seimbang, tingkatkan lagi kemampuan menembak anda“, jika waktu habis
dan poin player sama dengan poin CPU.
IV. Source Code game Tekken Stickman
%
Nama : Indra Setia ---------%
% Kelas :
3ia11 ---------%
% NPM
: 53411610 ---------%
% Judul
Progress :StickMan CS
WAR ------%
%deklarasi
variable, impor gambar, dan pembuatan jendela permainan%
?-
G_aksi_kanan:=0,
G_aksi_kiri:=0,
G_level:=1,
G_life_kanan:=10,
G_life_kiri:=10,
G_title is bitmap_image("background.bmp",_),
G_kiritembak1 is bitmap_image("kiritembak1.bmp",_),
G_kirinunduk1 is bitmap_image("kirinunduk1.bmp",_),
G_kiriketembak1 is bitmap_image("kiriketembak1.bmp",_),
G_kanantembak2 is bitmap_image("kanantembak2.bmp",_),
G_kanannunduk2 is bitmap_image("kanannunduk2.bmp",_),
G_kananketembak2 is bitmap_image("kananketembak2.bmp",_),
G_pelurukiri is bitmap_image("pelurukiri.bmp",_),
G_pelurukanan is bitmap_image("pelurukanan.bmp",_),
G_dorkiri is bitmap_image("dor_kiri.bmp",_),
G_dorkanan is bitmap_image("dor_kanan.bmp",_),
G_drum is bitmap_image("drum.bmp",_),
G_timeup is bitmap_image("timeup.bmp",_),
G_white is bitmap_image("white.bmp",_),
G_timeblock is bitmap_image("timeblock.bmp",_),
G_cleantime is bitmap_image("cleantimeup.bmp",_),
window(G_layar1,_,win_utama(_),"StickMan CS WAR",100,100,800,420).
%----
Tombol jendela utama ----%
win_utama(init):-
button(_,_,mulai_game(_),"Start",50,50,150,30),
button(_,_,keluar_game(_),"Exit",50,100,150,30).
win_utama(paint):-
draw_bitmap(0,0,G_title,_,_).
%------
Tombol mulai game -----%
mulai_game(press):-
beep("sound\\allright.wav"),
window(G_layar2,_,win_func(_),"StickMan
CS WAR",100,100,800,420),
close_window(G_layar1).
G_timer is set_timer(_,1,time_func).
%-----
Tombol Keluar Game -----%
keluar_game(press):-
close_window(G_layar1).
%-menggambar
posisi awal dengan menggunakan fungsi paint-%
win_func(paint):-
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
draw_bitmap( 330, 225, G_drum, _, _).
%-mendeklarasikan
fungsi yang berisi menu dan timer-%
win_func(init):-
G_timer is set_timer(_,1,time_func),
menu( pop_up, _, _, menu_pilihan(_),"&Pilihan"),
menu( pop_up, G_Menu, _, menu_level(_), "&Level"),
menu( normal, _, _, menu_bantuan(_), "&Bantuan"),
menu( normal, _, _, menu_tentang(_), "&About"),
menu( normal, _, _, menu_back(_), "&Back").
menu_pilihan(init):-
menu(normal,_,_,mulai_game(_),"&Mulai"),
menu(normal,_,_,menu_exit(_),"&Keluar").
menu_level(init):-
menu(normal,_,_,mudah(_),"&Easy"),
menu(normal,_,_,normal(_),"&Normal"),
menu(normal,_,_,susah(_),"&Hard").
menu_bantuan(press):-
message("cara
bermain","Gunakan tombol arah atas untuk berdiri, tombol bawah untuk
merunduk, dan tombol spasi untuk menembak",i).
menu_tentang(press):-
message("About","Teknik
Informatika Gunadarma",i).
menu_back(press):-
window(G_layar1,_,win_utama(_),"StickMan
CS WAR",100,100,800,420),
close_window(G_layar2).
menu_exit(press):-
close_window(_).
win_func(close) :-
not(
yes_no("","Keluar Dari Permainan?", ?)).
%--mendeklarasikan
per level (Easy, Normal, dan Hard)--%
%---- level
default (easy) ----%
mulai_game(press):-
draw_bitmap( 300, 10, G_cleantime, _, _),
G_aksi_kanan:=0,
G_aksi_kiri:=0,
G_life_kanan:=99,
G_life_kiri:=99,
G_time:=31,
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
draw_bitmap( 330, 225, G_drum, _, _).
%-------
level Easy -------%
mudah(press):-
message("level","Anda
memilih level Easy",i),
draw_bitmap( 300, 10, G_cleantime, _, _),
G_aksi_kanan:=0,
G_aksi_kiri:=0,
G_life_kanan:=99,
G_life_kiri:=99,
G_level:=1,
G_time:=31,
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
draw_bitmap( 330, 225, G_drum, _, _).
%--------
level Normal ------%
normal(press):-
message("level","Anda
memilih level Normal",i),
draw_bitmap( 300, 10, G_cleantime, _, _),
G_aksi_kanan:=0,
G_aksi_kiri:=0,
G_life_kanan:=99,
G_life_kiri:=99,
G_level:=2,
G_time:=31,
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
draw_bitmap( 330, 225, G_drum, _, _).
%---------
level Hard --------%
susah(press):-
message("level","Anda
memilih level Hard",i),
draw_bitmap( 300, 10, G_cleantime, _, _),
G_aksi_kanan:=0,
G_aksi_kiri:=0,
G_life_kanan:=99,
G_life_kiri:=99,
G_level:=3,
G_time:=31,
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
draw_bitmap( 330, 225, G_drum, _, _).
%--menjalankan
fungsi timer-%
time_func(end):-
G_time=0->
G_time:=0
else
G_time:=G_time-1,
T:=printq(G_time),
font(20,40,"Arial"),
text_out(350,20,T),
%-Respon
komputer per detik %
(G_time=29->
G_level=3->musuhcek(_)),
(G_time=29->
G_level=2->musuhnunduk(_)),
(G_time=29->
G_level=1->musuhberdiri(_)),
(G_time=28->
G_level=3->musuhcek(_)),
(G_time=28->
G_level=2->musuhberdiri(_)),
(G_time=28->
G_level=1->musuhberdiri(_)),
(G_time=27->
G_level=3->musuhcek(_)),
(G_time=27->
G_level=2->musuhcek(_)),
(G_time=27->
G_level=1->musuhnunduk(_)),
(G_time=26->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=26->
G_level=2->musuhcek(_)),
(G_time=26->
G_level=1->musuhcek(_)),
(G_time=25->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=25->
G_level=2->musuhcek(_)),
(G_time=25->
G_level=1->musuhberdiri(_)),
(G_time=25->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=25->
G_level=2->musuhcek(_)),
(G_time=25->
G_level=1->musuhberdiri(_)),
(G_time=24->
G_level=3->musuhnunduk(_)),
(G_time=24->
G_level=2->musuhcek(_)),
(G_time=24->
G_level=1->musuhberdiri(_)),
(G_time=23->
G_level=3->musuhcek(_)),
(G_time=23->
G_level=2->musuhcek(_)),
(G_time=23->
G_level=1->musuhberdiri(_)),
(G_time=22->
G_level=3->musuhcek(_)),
(G_time=22->
G_level=2->musuhcek(_)),
(G_time=22->
G_level=1->musuhberdiri(_)),
(G_time=21->
G_level=3->musuhnunduk(_)),
(G_time=21->
G_level=2->musuhcek(_)),
(G_time=21->
G_level=1->musuhberdiri(_)),
(G_time=20->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=20->
G_level=2->musuhcek(_)),
(G_time=20->
G_level=1->musuhberdiri(_)),
(G_time=19->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=19->
G_level=2->musuhcek(_)),
(G_time=19->
G_level=1->musuhberdiri(_)),
(G_time=18->
G_level=3->musuhcek(_)),
(G_time=18->
G_level=2->musuhcek(_)),
(G_time=18->
G_level=1->musuhberdiri(_)),
(G_time=17->
G_level=3->musuhcek(_)),
(G_time=17->
G_level=2->musuhcek(_)),
(G_time=17->
G_level=1->musuhberdiri(_)),
(G_time=16->
G_level=3->musuhnunduk(_)),
(G_time=16->
G_level=2->musuhcek(_)),
(G_time=16->
G_level=1->musuhberdiri(_)),
(G_time=15->
G_level=3->musuhcek(_)),
(G_time=15->
G_level=2->musuhcek(_)),
(G_time=15->
G_level=1->musuhberdiri(_)),
(G_time=14->
G_level=3->musuhcek(_)),
(G_time=14->
G_level=2->musuhcek(_)),
(G_time=14->
G_level=1->musuhberdiri(_)),
(G_time=13->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=13->
G_level=2->musuhcek(_)),
(G_time=13->
G_level=1->musuhberdiri(_)),
(G_time=12->
G_level=3->musuhnunduk(_)),
(G_time=12->
G_level=2->musuhcek(_)),
(G_time=12->
G_level=1->musuhberdiri(_)),
(G_time=11->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=11->
G_level=2->musuhcek(_)),
(G_time=11->
G_level=1->musuhberdiri(_)),
(G_time=10->
G_level=3->musuhnunduk(_)),
(G_time=10->
G_level=2->musuhcek(_)),
(G_time=10->
G_level=1->musuhberdiri(_)),
(G_time=9->
draw_bitmap( 372, 26, G_timeblock, _, _)),
(G_time=9->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=9->
G_level=2->musuhcek(_)),
(G_time=9->
G_level=1->musuhberdiri(_)),
(G_time=8->
G_level=3->musuhnunduk(_)),
(G_time=8->
G_level=2->musuhcek(_)),
(G_time=8->
G_level=1->musuhberdiri(_)),
(G_time=7->
G_level=3->musuhcek(_)),
(G_time=7->
G_level=2->musuhcek(_)),
(G_time=7->
G_level=1->musuhberdiri(_)),
(G_time=6->
G_level=3->musuhcek(_)),
(G_time=6->
G_level=2->musuhcek(_)),
(G_time=6->
G_level=1->musuhberdiri(_)),
(G_time=5->
G_level=3->musuhcek(_)),
(G_time=5->
G_level=2->musuhcek(_)),
(G_time=5->
G_level=1->musuhberdiri(_)),
(G_time=4->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=4->
G_level=2->musuhcek(_)),
(G_time=4->
G_level=1->musuhberdiri(_)),
(G_time=3->
G_level=3->musuhberdiri(_), musuhcek(_)),
(G_time=3->
G_level=2->musuhcek(_)),
(G_time=3->
G_level=1->musuhberdiri(_)),
(G_time=2->
G_level=3->musuhnunduk(_)),
(G_time=2->
G_level=2->musuhcek(_)),
(G_time=2->
G_level=1->musuhberdiri(_)),
(G_time=1->
G_level=3->musuhcek(_)),
(G_time=1->
G_level=2->musuhcek(_)),
(G_time=1->
G_level=1->musuhberdiri(_)),
(G_time=0 ->
G_time:=0,
draw_bitmap( 310, 20, G_timeup, _, _),
(G_life_kiri<G_life_kanan->message("Lose","Anda
kalah, Berusaha lebih giat lagi",i)),
(G_life_kiri>G_life_kanan->message("Win","Anda
Menang, Kemampuan menembak sangat menakjubkan!!",i)),
(G_life_kiri=G_life_kanan->message("Draw","Seimbang,
Tingkatkan lagi kemampuan menembak anda",i))).
%- Fungsi
respon dari komputer %
musuhberdiri(_):-
G_aksi_kanan:=1,
draw_bitmap( 610, 100, G_kanantembak2, _, _).
musuhnunduk(_):-
G_aksi_kanan:=0,
draw_bitmap( 610, 70, G_kanannunduk2, _, _).
musuhcek(_):-
G_aksi_kiri=1->
G_aksi_kanan:=1,
draw_bitmap( 610, 100, G_kanantembak2, _, _),
wait(0.1),
draw_bitmap(535,180,G_dorkanan,_,_),
G_aksi_kanan:=2,
afterfire_red(_).
%- Peluru
keluar dari weapon -%
afterfire_blue(_):-
wait(0.2),
draw_bitmap( 470, 215, G_pelurukiri, _, _),
efektembak1(_),
wait(0.3),
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
draw_bitmap( 330, 215, G_white, _, _),
G_aksi_kiri:=0.
afterfire_red(_):-
wait(0.2),
draw_bitmap( 370, 180, G_pelurukanan, _, _),
efektembak2(_),
wait(0.3),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
draw_bitmap( 370, 180, G_white, _, _),
G_aksi_kanan:=0.
%Efek
Tembak (kena atau tidak)-%
efektembak1(_):-
G_aksi_kanan=1->
wait(0.2),
draw_bitmap( 610, 100, G_kananketembak2, _, _),
beep("sound\\piercingshot.wav"),
draw_bitmap( 240, 192, G_white, _, _),
wait(1),
draw_bitmap( 610, 70, G_kanannunduk2, _, _),
G_life_kanan:=G_life_kanan-1,
G_aksi_kanan:=0.
efektembak2(_):-
G_aksi_kiri=1->
wait(0.2),
draw_bitmap( 0, 150, G_kiriketembak1, _, _),
beep("sound\\headshot.wav"),
draw_bitmap( 235, 192, G_white, _, _),
wait(1),
draw_bitmap( 0, 140, G_kirinunduk1, _, _),
G_life_kiri:=G_life_kiri-1,
G_aksi_kiri:=0.
%-- membuat
player berdiri, menunduk, menembak --%
win_func(key_down(38,_)):-
G_aksi_kiri:=1,
draw_bitmap( 0, 150, G_kiritembak1, _, _).
win_func(key_down(40,_)):-
wait(0.8),
G_aksi_kiri:=0,
draw_bitmap( 0, 140, G_kirinunduk1, _, _).
win_func(key_down(32,_)):-
G_aksi_kiri=1-> draw_bitmap(330,215,G_dorkiri,_,_),
G_aksi_kiri:=2,
afterfire_blue(_),
wait(0.6).