Halaman

Selasa, 16 Juni 2015

Game Battlefire



Game Permainan Battlefire hanya dapat dimainkan oleh satu pemain yang mengendalikan tentara biru melawan komputer yang mengendalikan tentara merah. Permainan ini melatih ketepatan pemain dalam mengambil keputusan kapan untuk bersembunyi, berdiri, dan menembak,Prolog adalah bahasa pemrograman logika atau disebut juga bahasa non prosedural.  Prolog disebut sebagai object oriented language atau declarative language. Dalam prolog tidak terdapat prosedur, tetapi hanya tampilan data-data object (fakta) yang akan diolah dengan relasi antar object yang membentuk suatu aturan. Aturan-aturan ini disebut heuristikdan diperlukan dalam mencari suatu jawaban, dengan kata lain, prolog dalam prolog adalah database.
Strawberry Prolog adalah dialek dari bahasa pemrograman Prolog. Sintaksnya sangat dekat dengan ISO-Prolog tetapi memiliki banyak ekstensi yang bukan bagian dari standar. Gagasan utama dari Strawberry Prolog sangat mudah digunakan dan oleh karena itu beberapa universitas menggunakan prolog untuk kursus ,pada game ini menggunakan algoritma AI dimana ALGORITMA AI (ARTIFICIAL INTELEGENCE) Merupaka Kecerdasan Buatan (Artificial Intelligence) merupakan cabang terpenting dalam dunia computer yang membuat agar mesin (computer) dapat melakukan pekerjaan seperti dan sebaik yang dilakukan manusia. Pada awalnya diciptakan computer hanya berfungsi sebagai alat hitung. Tapi sekarang peran computer makin mendominasi kehidupan manusia. Komputer di harapkan data diberdayakan untuk mengerjakan segala sesuatu yang biasa dikerjakan oleh manusia.
AI :
Kecerdasan buatan pada game ini adalah respon pada komputer. Komputer dapat mengecek keadaan pemain apakah sedang berdiri atau tidak, ketika pemain berdiri komputer akan menembak. Komputer dapat melakukan pengecekan ini pada saat berdiri maupun pada saat menunduk. Jika pemain hanya diam saja tidak mau berdiri maka komputer yang akan berdiri untuk memancing pemain berdiri pula.
Tampilan Game

Rule (Aturan):
  •  Permainan berlangsung selama 30 detik
  • Pemain menggunakan tombol atas untuk berdiri, tombol bawah untuk menunduk dan tombol spasi untuk menembak.
  •  Menembak hanya dapat dilakukan ketika pemain atau komputer berdiri.
  •  1 detik setelah pemain atau komputer menembak, pemain atau komputer akan otomatis menunduk untuk menghindari tembakan beruntun serta lag pada permainan.
  • Jika pemain menembak tepat pada saat computer berdiri maka life komputer berkurang satu, jika komputer menembak tepat pada saat pemain berdiri maka life pemain berkurang satu
  • 1 detik setelah pemain atau komputer tertembak, pemain atau komputer akan otomatis menunduk untuk menghindari terkena tembakan beruntun serta lag pada permainan.
  •  Pada detik 0 permainan akan berakhir dan perhitungan life akan berjalan.
  • Jika pada detik 0 life pemain lebih dari life komputer maka pemain dinyatakan menang.
  • Jika pada detik 0 life pemain kurang dari life komputer maka pemain dinyatakan kalah.
  • Jika pada detik 0 life pemain sama dengan life komputer maka permainan dinyatakan seri.


Goal (Tujuan):
            Tujuan dari permainan ini adalah membuat life terus berkurang sehingga ketika permainan berakhir life musuh kurang dari life pemain.

Code program
?-
  G_aksi_red:=0,
  G_aksi_blue:=0,
  G_skor_blue:=0,
  G_skor_red:=0, 
  G_level:=1,
  G_life_red:=10,
  G_life_blue:=10,
  G_zero:=0,
  G_Tentaranembak1 is bitmap_image("Tentaranembak1.bmp",_),
  G_Tentaranunduk1 is bitmap_image("Tentaranunduk1.bmp",_),
  G_Tentaraketembak1 is bitmap_image("Tentaraketembak1.bmp",_),
  G_Tentaranembak2 is bitmap_image("Tentaranembak2.bmp",_),
  G_Tentaranunduk2 is bitmap_image("Tentaranunduk2.bmp",_),
  G_Tentaraketembak2 is bitmap_image("Tentaraketembak2.bmp",_),
  G_Pelurubiru is bitmap_image("pelurubiru.bmp",_),
  G_Pelurumerah is bitmap_image("pelurumerah.bmp",_),
  G_Dorblue is bitmap_image("dor_blue.bmp",_),
  G_Dorred is bitmap_image("dor_red.bmp",_),
  G_Tembok is bitmap_image("Tembok.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(_,_,win_func(_),"BattleFire",100,100,800,420).
 


%----------------menggambar posisi awal dengan menggunakan fungsi paint--------------------

win_func(paint):-
draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
draw_bitmap( 170, 220, G_Tembok, _, _),
draw_bitmap( 550, 220, G_Tembok, _, _).


%----------------mendeklarasikan fungsi inisialisasi 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_pilihan(init):-
  menu(normal,_,_,mulai_game(_),"&Mulai"),
  menu(normal,_,_,menu_exit(_),"&Keluar").


menu_exit(press):-
close_window(_).
win_func(close) :-
  not( yes_no("","Keluar Dari Permainan?", ?)).


menu_level(init):-
  menu(normal,_,_,mudah(_),"&Mudah"),
  menu(normal,_,_,normal(_),"&Normal"),
  menu(normal,_,_,susah(_),"&Susah").

%----mendeklarasikan inisialisasi per level (mudah, normal, dan susah)-------%

%---------------------inisiasi level default (mudah) ------------------------%

mulai_game(press):-
  draw_bitmap( 300, 10, G_cleantime, _, _),
draw_bitmap( 100, 20, G_cleantime, _, _),
draw_bitmap( 600, 20, G_cleantime, _, _),
  G_aksi_red:=0,
  G_aksi_blue:=0,-
  G_skor_blue:=0,
  G_skor_red:=0,
  G_life_red:=99,
  G_life_blue:=99,
  G_time:=31,
  draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
  draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
  draw_bitmap( 170, 220, G_Tembok, _, _),
  draw_bitmap( 550, 220, G_Tembok, _, _).



%----------------------------- inisiasi level mudah -------------------------%

mudah(press):-
message("level","Anda memilih level mudah",i),
  draw_bitmap( 300, 10, G_cleantime, _, _),
draw_bitmap( 100, 20, G_cleantime, _, _),
draw_bitmap( 600, 20, G_cleantime, _, _),
G_aksi_red:=0,
G_aksi_blue:=0,
G_skor_blue:=0,
G_skor_red:=0,
G_life_red:=99,
G_life_blue:=99,
G_level:=1,
G_time:=31,
draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
draw_bitmap( 170, 220, G_Tembok, _, _),
draw_bitmap( 550, 220, G_Tembok, _, _).

%----------------------------- inisiasi level normal -------------------------%
normal(press):-
message("level","Anda memilih level normal",i),
  draw_bitmap( 300, 10, G_cleantime, _, _),
draw_bitmap( 100, 20, G_cleantime, _, _),
draw_bitmap( 600, 20, G_cleantime, _, _),
G_aksi_red:=0,
G_aksi_blue:=0,
G_skor_blue:=0, %------- buat bikin skor-------------%
G_skor_red:=0, %------- buat bikin skor-------------%
G_life_red:=99,
G_life_blue:=99,
G_level:=2,
G_time:=31,
draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
draw_bitmap( 170, 220, G_Tembok, _, _),
draw_bitmap( 550, 220, G_Tembok, _, _).

%----------------------------- inisiasi level susah -------------------------%
susah(press):-
message("level","Anda memilih level susah",i),
  draw_bitmap( 300, 10, G_cleantime, _, _),
draw_bitmap( 100, 20, G_cleantime, _, _),
draw_bitmap( 600, 20, G_cleantime, _, _),
G_aksi_red:=0,
G_aksi_blue:=0,
G_skor_blue:=0,
G_skor_red:=0,
G_life_red:=99,
G_life_blue:=99,
G_level:=3,
G_time:=31,
draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
draw_bitmap( 170, 220, G_Tembok, _, _),
draw_bitmap( 550, 220, G_Tembok, _, _).

menu_bantuan(press):-
message("cara bermain","Tekan tombol atas untuk berdiri, tombol bawah untuk merunduk, dan tombol spasi untuk menembak",i).

menu_tentang(press):-
  message("About","Teknik Informatika Gunadarma 2015",i).






%-------------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_blue<G_life_red->message("Kalah","Anda kalah, kemampuan menembak anda payah",i)),
(G_life_blue>G_life_red->message("Menang","Anda Menang, kemampuan menembak anda hebat!",i)),
(G_life_blue=G_life_red->message("Seri","Seimbang, Kemampuan anda lumayan",i))).







%---------------------isi dari fungsi respon komputer----------------------

musuhberdiri(_):-
G_aksi_red:=1,
draw_bitmap( 610, 150, G_Tentaranembak2, _, _).

musuhnunduk(_):-
G_aksi_red:=0,
draw_bitmap( 610, 140, G_Tentaranunduk2, _, _).

musuhcek(_):-
G_aksi_blue=1->
G_aksi_red:=1,
draw_bitmap( 610, 150, G_Tentaranembak2, _, _),
wait(0.1),
draw_bitmap(550,197,G_Dorred,_,_),
G_aksi_red:=2,
afterfire_red(_).

%-------------------peluru keluar dari senapan--------------
afterfire_blue(_):-
 wait(0.2),
 draw_bitmap( 360, 195, G_Pelurubiru, _, _),
 efektembak1(_),
 wait(0.3),
 draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
 draw_bitmap( 168, 192, G_white, _, _),
 G_aksi_blue:=0.

afterfire_red(_):-
 wait(0.2),
 draw_bitmap( 370, 192, G_Pelurumerah, _, _),
 efektembak2(_),
 wait(0.3),
 draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
 draw_bitmap( 295, 193, G_white, _, _),
 G_aksi_red:=0.




%------------------Efek Tembak (kena apa kagak)-----------------------------------------
efektembak1(_):-
 G_aksi_red=1->
        wait(0.2),
        draw_bitmap( 610, 150, G_Tentaraketembak2, _, _),
        draw_bitmap( 240, 192, G_white, _, _),
        wait(1),
        draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),
        G_life_red:=G_life_red-1,
        skorblue(_),         G_aksi_red:=0.

efektembak2(_):-
 G_aksi_blue=1->
        wait(0.2),
        draw_bitmap( 0, 150, G_Tentaraketembak1, _, _),
        draw_bitmap( 235, 192, G_white, _, _),
        wait(1),
        draw_bitmap( 0, 140, G_Tentaranunduk1, _, _),
        G_life_blue:=G_life_blue-1,
        skorred(_),
        G_aksi_blue:=0.



%------------------membuat tentara player berdiri, menunduk, menembak---------------------

win_func(key_down(38,_)):-
G_aksi_blue:=1,
draw_bitmap( 0, 150, G_Tentaranembak1, _, _).


win_func(key_down(40,_)):-
wait(0.8),
G_aksi_blue:=0,
draw_bitmap( 0, 140, G_Tentaranunduk1, _, _).


win_func(key_down(32,_)):-
  G_aksi_blue=1-> draw_bitmap(165,197,G_Dorblue,_,_),
  G_aksi_blue:=2,
  afterfire_blue(_),
  wait(0.6).



%--------------------buat hitung dan tampilkan skor(tambahan)--------------------------------%
skorblue(_):-
G_skor_blue:=(G_skor_blue+1),
Skorblue:=printq(G_skor_blue),
font(15,30,"Arial"),
text_out(100,20,Skorblue).


skorred(_):-
G_skor_red:=(G_skor_red+1),
Skorred:=printq(G_skor_red),
font(15,30,"Arial"),

text_out(600,20,Skorred).