TUGAS
PENGANTAR TEKNOLOGI GAME
GAME STICKMAN CS WAR
Disusun oleh :
Adil
Fadhli (50411190)
Candra
Hadi Wijaya (51411582)
Indra
Setiaji (53411610)
Jeffry
Sianipar (53411798)
Muhyin
Hari Sasono (58411714)
Kelas : 3 IA 11
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.
I.
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.
I.
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.
I.
Source Code game Stickman CS War
% 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