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).
Tidak ada komentar:
Posting Komentar