Wednesday, July 9, 2014

Penjelasan tentang Game

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 pertarunganbegitu 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).