Tugas 3 Softskill Pengantar Teknologi Game

Game Shoot Strike

    Permainan Shoot Strike merupakan game yang melempar bomb ke pada lawan, yang memiliki tujuan untuk mencapai poin sebanyak banyaknya, tentara biru yang berlindung di balik tembok yang berada di pojok kiri bawah dan tentara merah yang berlindung di balik tembok yang berada di pojok kanan bawah.  Permainan akan dimulai ketika pemain memilih menu Pilihan -> Mulai atau pemain memilih menu Level-> mudah, sedang, susah. Jika pemain memilih menu Pilihan -> Mulai maka level yang dipilih otomatis adalah mudah (default level). Ketika permainan dimulai akan muncul batas waktu 30 detik untuk menjalankan permainan.

    Permainan Shoot Strike 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.

Pada interface game, terdapat splash screen yang penulis kombinasikan dengan timer dan animasi line.

Window Menu
Pada menu awal memiliki tampilan berupa start game, how to play, about dan exit.



How To Play

Pada button how to play berisikan tentang gambar yang menunjakan cara bermain game tersebut



About

Pada button about berisikan video tentang informasi tentang pengembang games. Dan yang terakhir yaitu button exit yaitu keluar dari game.





Start Game

Pada saat kita mengklik start game maka otomatis kita akan beralih ke window yang baru untuk memulai game tersebut. Di dalam game tersebut memilki berapa menu diantaranya menu ‘level, bantuan, back to menu’.



Level

Pada menu level berisikan menu pop up yang berfungsi untuk memilih level disini terdapat 3 level yaitu mudah, normal dan susah dan setiap level memiliki tingkat kesulitan yang berbeda-beda.

Bantuan

Pada menu bantuan terdapat sebauh message yang berisikan cara bermain game tersebut jadi jika anda lupa cara bermain game tersebut anda tidak perlu balik window awal untuk melihat cara bermain.



Back to Menu

Lalu terakhir ada back to menu fungsi dari menu ini adalah untuk kembali ke window sebelumnya


Rules

1. Permainan berlangsung selama 30 detik

2. Pemain menggunakan tombol atas untuk berdiri, tombol bawah untuk menunduk dan tombol spasi untuk menembak.

3. Menembak hanya dapat dilakukan ketika pemain atau komputer berdiri.
4. 1 detik setelah pemain atau komputer menembak, pemain atau komputer akan otomatis menunduk untuk menghindari tembakan beruntun serta lag pada permainan.

5. 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.

6. 1 detik setelah pemain atau komputer tertembak, pemain atau komputer akan otomatis menunduk untuk menghindari terkena tembakan beruntun serta lag pada permainan.

7. Pada detik 0 permainan akan berakhir dan perhitungan life akan berjalan.

8. Jika pada detik 0 life pemain lebih dari life komputer maka pemain dinyatakan menang.

9. Jika pada detik 0 life pemain kurang dari life komputer maka pemain dinyatakan kalah.

10. Jika pada detik 0 life pemain sama dengan life komputer maka permainan dinyatakan seri.

Konsep 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.



Algoritma

    Algoritma adalah suatu teknik dalam kumpulan perintah untuk menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan catatan untuk setiap masalah, ada kriteria kondisi awal yang harus dipenuhi sebelum menjalankan algoritma.

    Pada permainan ini AI menggunakan algoritma Forward Chaining, Forward Chaining adalah metode pencarian atau teknik pelacakan ke depan yang dimulai dengan informasi yang ada dan penggabungan rule untuk menghasilkan suatu kesimpulan atau tujuan. Pelacakan maju ini sangat baik jika bekerja dengan permasalahan yang dimulai dengan rekaman informasi awal dan ingin dicapai penyelesaian akhir, karena seluruh proses akan dikerjakan secara berurutan maju. Berikut adalah diagram Forward Chaining secara umum untuk menghasilkan sebuah goal. Forward chaining merupakan metode inferensi yang melakukan penalaran dari suatu masalah kepada solusinya. Jika klausa premis sesuai dengan situasi (bernilai TRUE), maka proses akan menyatakan konklusi. Forward chaining adalah data-driven karena inferensi dimulai dengan informasi yang tersedia dan baru konklusi diperoleh. Jika suatu aplikasi menghasilkan tree yang lebar dan tidak dalam, maka gunakan forward chaining.

Listing Game


% ------------------------------------------------------------------------------------%

% ---------------------------------SHOOT STRIKE-----------------------------------------%

% ---------------Agung Muhammad Yusuf Teknik Informatika Gunadarma 2015---------------------%

% ---------------------------------2015-----------------------------------------------%



?-

%-----------deklarasi variable, impor gambar, dan pembuatan jendela permainan---------%

  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("pict/Tentaranembak1.bmp",_),

  G_Tentaranunduk1 is bitmap_image("pict/Tentaranunduk1.bmp",_),

  G_Tentaraketembak1 is bitmap_image("pict/Tentaraketembak1.bmp",_),

  G_Tentaranembak2 is bitmap_image("pict/Tentaranembak2.bmp",_),

  G_Tentaranunduk2 is bitmap_image("pict/Tentaranunduk2.bmp",_),

  G_Tentaraketembak2 is bitmap_image("pict/Tentaraketembak2.bmp",_),

  G_Pelurubiru is bitmap_image("pict/pelurubiru.bmp",_),

  G_Pelurumerah is bitmap_image("pict/pelurumerah.bmp",_),

  G_Dorblue is bitmap_image("pict/dor_blue.bmp",_),

  G_Dorred is bitmap_image("pict/dor_red.bmp",_),

  G_Tembok is bitmap_image("pict/Tembok.bmp",_),

  G_Tembok2 is bitmap_image("pict/Tembok2.bmp",_),

  G_Timeup is bitmap_image("pict/timeup.bmp",_),

  G_white is bitmap_image("pict/white.bmp",_),

  G_timeblock is bitmap_image("pict/timeblock.bmp",_),

  G_cleantime is bitmap_image("pict/cleantimeup.bmp",_),

  G_bgspider is bitmap_image("pict/tes2.bmp",_),

  G_how1 is bitmap_image("pict/tes.bmp",_),

  G_song2 is ("song/button.wav"),

  G_bgspl is bitmap_image("pict/bomb.bmp",_),

  G_htp is bitmap_image("pict/htp.bmp",_),



%------------Deklarasi Window & splash screen--------------------------------------%

window(G_pertama,_,window_awal(_),"Please Wait", 100,100,800,600).



window_awal(init):-

G_batas_line := 200,

G_batas_text := 0,

G_waktu is set_timer(_,0.0,fungsi_timer).



fungsi_timer(end):-

G_batas_line := G_batas_line + 5,update_window(_),

G_batas_text := G_batas_text + 1,update_window(_),

(G_batas_text =100-> close_window(G_layer0),

window(G_pertama,_,win_func2(_),"SHOOT STRIKE",100,100,800,600)).



window_awal(paint):-

draw_bitmap(0,0,G_bgspl,_,_),

text_out(205,250,print("loading: "+ G_batas_text +"%")),

pen(9,rgb(250,0,0)),

rect(180,280,720,320),

pen(15,rgb(0,0,180)),

line(200,300,G_batas_line,300).

fail.



%=============Inisiasi tombol Window Menu=========%

win_func2(paint):-

draw_bitmap(0,0,G_bgspider,_,_),

fail.





win_func2(init):-



button(_,_,win_how(_),"START GAME",90,350,150,30),

button(_,_,win_cara(_),"HOW TO PLAY",250,350,150,30),

button(_,_,win_about(_),"ABOUT",410,350,150,30),

button(_,_,win_exit(_),"EXIT",580,350,150,30).



%=============Tombol Play Game===========&

win_how(press):-

beep(G_song2),

  close_window(G_pertama),

window(G_main,_,win_func(_),"SHOOT STRIKE",100,100,800,420),

execute("song\\backsong.exe"),

update_window(_).





%-------------About--------------------------%

win_about(press):-

execute("video\\hp.exe"),

wait(21.0),

execute("video\\hp.bat").



fail.

%---------how to play-----------------------%



win_cara(press):-

window(_, _, win_how_about(_), "About", 100,100,800,650),



fail.



win_how_about(paint):-

     draw_bitmap(0,0,G_htp,_,_).



%----------------------exit----------------%

win_exit(press):-

yes_no("exit","Keluar Dari Permainan?", ?),

close_window(G_pertama),

fail.







%---------------------koding game ------------------------%



mulai_game(press):-

close_window(G_main),

window(G_main,_,win_func(_),"SHOOT STRIKE",100,100,800,420),

update_window(_).



win_func(paint):-

window_brush(_,rgb(0,0,0)),

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, G_Menu, _, menu_level(_), "&Level"),

menu( normal, _, _, menu_bantuan(_), "&Bantuan"),

menu( normal, _, _, menu_BTM(_), "&Back To Menu").



menu_exit(press):-

close_window(G_main).



win_func(close) :-

execute("song\\backsong.bat"),

fail.



menu_level(init):-

  menu(normal,_,_,mudah(_),"&Easy"),

  menu(normal,_,_,normal(_),"&Normal"),

  menu(normal,_,_,susah(_),"&Hard").



%----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_BTM(press):-

close_window(G_main),

window(G_pertama,_,win_func2(_),"SHOOT STRIKE",100,100,800,600),

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,

update_window(_).



%-------------menjalankan fungsi timer----------------%

time_func(end):-

G_time=0->

G_time:=0

else

G_time:=G_time-1,

T:=printq(G_time),

color_text(_,rgb(255,255,255)),

color_text_back(_,rgb(0,0,0)),

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 Kurang Memuaskan",i)),

(G_life_blue>G_life_red->message("Menang","Anda Menang, Kemampuan Menembak Anda Sangat Baik!",i)),

(G_life_blue=G_life_red->message("Seri","Seimbang, Kemampuan Menembak Anda Cukup Sama",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.5),

draw_bitmap(550,197,G_Dorred,_,_),

G_aksi_red:=2,

afterfire_red(_).



%-------------------bomb dilempar--------------

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.5),

 draw_bitmap( 610, 140, G_Tentaranunduk2, _, _),

 draw_bitmap( 295, 193, G_white, _, _),

 G_aksi_red:=0.









%------------------Efek bomb (kena atau tidak)-----------------------------------------

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

Previous
Next Post »