Monday, 30 May 2016

PENGANTAR TEKNOLOGI GAME

                                                              GAME JAWARA OF SKY

Initial State




              Game Jawara of Sky merupakan pengembangan dari game sky wars pada contoh game strawberry prolog. Dalam star wars, user memiliki tujuan untuk mengalahkan setiap musuh yang datang hingga pesawat yang kita kendalikan hancur jika terkena setiap benturan dari pesawat ataupun serangan musuh. Namun pada game Jawara of Sky ini memiliki perbedaan dimana didalam permainan terdapat health point (HP) untuk pesawat player sehingga jika terkena satu serangan saja, akan hanya berdampak pada pengurangan HP player dan tidak langsung hancur. Pesawat player akan hancur jika HP sudah habis atau 0%. Kemudian juga perbedaan game Jawara of Sky ini dengan star wars pada prolog terdapat pada timer pada saat bermain. Sehingga game Jawara of Sky mempunyai goal tersendiri yaitu player harus bertahan selama 30 detik. Jika player mampu melewati waktu yang sudah ditentukan, maka player dinyatakan menang. Akan tetapi, jika HP player sudah habis sebelum waktu yang ditentukan berakhir, player dinyatakan kalah dalam pertempuran.


Pada interface game terdapat Menu, Level dan About Me, dimana Menu berisikan New Game, bantuan dan exit,  kemudian Level berisikan pilihan level mana yang akan di mulai, dan About Me sebagai identitas dari pengembang game The Hobbit of Snake.
Pada permulaan awal game akan tampil sebuah splash screen garis beserta video berupa filecopy. Kemudian pada tampilan menu game terdapat pilihan Start, About, Help dan Keluar.



                                       Tampilan pada saat splash screen
 

                                                    Tampilan menu awal


Rules
1.     Menggunakan kontroler W, A, S dan D pada keyboard untuk mengendalikan pesawat player.
2.     Menggunakan K untuk menyerang, Q untuk serangan spesial, P untuk pause saat mulai bermain dan ESC untuk menyerah dalam permainan.
3.     Mengalahkan musuh yang bermunculan hingga mencapai batas waktu tertentu.
4.     Jika player kehabisan health point (HP)  maka player dinyatakan gugur dalm permainan.
5.     Jika player dapat bertahan dan tidak kehabisan HP hingga batas waktu yang telah ditentukan, maka player dinyatakan menang.
Goals
    Dalam permainan Jawara of Sky memiliki tujuan akhir untuk mengalahkan musuh hingga batas waktu yang telah ditentukan. Jika sebelum habis batas waktu dan player telah kehabisan HP, maka player dinyatakan gugur dalam pertempuran.
Screenshot :
                              Tampilan pada saat menang

 




                                                   Tampilan pada saat kalah



konsep AI
AI

Kecerdasan Buatan atau Intelegensi Artifisial (AI) didefinisikan sebagai kecerdasan entitas ilmiah. Sistem seperti ini umumnya dianggap komputer. Kecerdasan diciptakan dan dimasukkan ke dalam suatu mesin (komputer) agar dapat melakukan pekerjaan seperti yang dapat dilakukan manusia. Beberapa macam bidang yang menggunakan kecerdasan buatan antara lain sistem pakar, permainan komputer (games), logika fuzzy, jaringan syaraf tiruan dan robotika.

Konsep AI atau kecerdasan buatan dalam game ini bukanlah seperti pada kebanyakan game yang memiliki AI pada lawannya. Konsep AI pada game ini terdapat dalam sistem permainan itu sendiri. Yaitu dimana sistem permainan dapat mengecek setiap collision (tabrakan) yang terjadi pada player dengan musuh.

Algoritma

Algoritma adalah metode efektif diekspresikan sebagai rangkaian terbatas dari instruksi-instruksi yang telah didefinisikan dengan baik. Algoritma merupakan 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.
Dalam permainan ini  AI menggunakan algoritma pencarian solusi secara  melebar atau breadth first search (BFS). Dalam algoritma BFS solusi dicari dengan membentuk pohon ruang status yang merupakan pohon dinamis. BFS mencari solusi persoalan pada pohon ruang status yang dibentuk secara dinamis. dengan cara semua simpul pada aras d dibangkitkan terlebih dahulu sebelum simpul-simpul pada aras d+1. Simpul BFS memerlukan sebuah antrian untuk menyimpan simpul-simpul yang akan dibangkitkan. Simpul-simpul yang dibangkitkan disimpan di belakang antrian.
Dalam penerapannya dalam game Jawara of Sky, algoritma BFS terdapat dalam sistem pada game dimana sistem dapat mengecek setiap tabrakan yang terjadi pada player. Adapun sintax BFS yang terdapat dalam game Jawara of Sky adalah sebagai berikut :



 
crash(X1, Y1, X2, Y2) :- !,
  TX1 is ship_left(X1),
  TX2 is ship_right(X1),
  TY1 is ship_up(Y1),
  TY2 is ship_down(Y1),
  do_crash_check(TX1, TX2, TY1, TY2, X2, Y2).

do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX1, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX1, TY2), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX2, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX2, TY2), !.

check_collisions(_) :- !, enemy_ships(EShips), enemy_bombs(EBombs), check_es(EShips, NewShips), check_eb(EBombs), retract(enemy_ships(_)), assert(enemy_ships(NewShips)).
check_es([],[]) :- !.
check_es([ship(D, X, Y)|T], []) :- X1 is G_X, Y1 is G_Y, crash(X, Y, X1, Y1), !, bar_ngurang(_).
check_es([ship(D, X, Y)|T], [ship(D, X, Y)|R]) :- survive_enemy(X, Y), !, check_es(T, R).
check_es([ship(D, X, Y)|T], R) :- !, (G_AutoFired is 0 -> G_Score := G_Score + G_PTS else G_Score := G_Score - G_PTS),
  (G_HighScore < G_Score -> G_HighScore := G_Score), G_Difficulty := G_Difficulty + 2, check_es(T, R).

survive_enemy(X, Y) :- !, player_bombs(Bombs), s_e(X, Y, Bombs).

s_e(_, _, []) :- !.
s_e(X, Y, [bomb(AutoFire, BX, BY)|T]) :- is_in_ship(X, Y, BX, BY), !, G_AutoFired := AutoFire, fail.
s_e(X, Y, [bomb(_, _, BY)|T]) :- !, s_e(X, Y, T).

%bbbbbbb pengecekan tubrukan terhadap serangan musuh dddddddddddd
check_eb([]) :- !.
check_eb([bomb(_, BX, BY)|T]) :- X1 is G_X, Y1 is G_Y, is_in_ship(X1, Y1, BX, BY), !, bar_ngurang(_).
check_eb([bomb(_, BX, BY)|T]) :- !, check_eb(T).

=======================================================================================

                               LISTING PROGRAM
?-
%inisialisasi gambar
G_bgawal is bitmap_image("Picture\\bg2.bmp",_),
G_sky is bitmap_image("Picture\\langit.bmp",_),

%--------------------------loading
window(G_layer0,_,window_awal(_),"Loading... ", 540,250,400,300).

window_awal(init):-
    G_batas_line := 145,
    G_batas_text := 0,
    G_waktu is set_timer(_,0.1,fungsi_timer).

fungsi_timer(end):-
    G_batas_line := G_batas_line + 10,
    G_batas_text := G_batas_text + 10,update_window(_),
    (G_batas_text = 110 -> close_window(G_layer0),execute("sound\\menu.exe"),
    window(G_layer1,_,window_menu(_),"Menu progress", 450,100,500,490)).
      
window_awal(paint):-
      
       text_out(150,190,print("loading: " + G_batas_text +" %")),
       animate(_,_,fail(_),"video/FILECOPY.AVI",60,50),
       pen(9,rgb(250,0,0)),
     rect(120,130,270,170),
     pen(15,rgb(0,0,180)),                     
       line(145,150,G_batas_line,150).

%--------------------------tampilan program menu
window_menu(paint) :-
  draw_bitmap(0,0,G_bgawal,_,_),
  text_out(220,190,print("1 - Start")),
  text_out(220,220,print("2 - About")),
  text_out(220,250,print("3 - Help")),
  text_out(220,310,print("4 - Exit")).

%------- Fungsi about ---------
about_game(press) :-
       shell_execute("JOS.html").

%--------- fungsi start ------------
new_window2(press) :-
       beep("sound\\gun.wav"),close_window(G_layer1),
       window( G_layer2, _, window_game(_), "Jawara Of Sky", 450,100,500,500).
    

%----------------------pilihan help----------
pilihan_help(press):-
message("Help","K : untuk menembak\nW : untuk ke atas\nA : untuk ke kiri\nS : untuk ke bawah\nD : untuk ke kanan
\nP : untuk pause\nESC : untuk menyerah",i).


%------------------pilihan keluar-------------
pilihan_exit(press):-
beep("sound\\Lock.wav"),
not(yes_no("konfirmasi","Anda Yakin Ingin Keluar Dari Permainan?", ?)->execute("sound\\cleanmenu.bat"),close_window(G_layer1)).


%+++++++++++++++++++++++++++Gamenya+++++++++++++++++++++++
%----luas area permainan------
width(480) :- !.
height(460) :- !.

%dead or alive?
dead.

%ship data:
ship_half_width(20) :- !.
ship_height(30) :- !.
ship_minship(100) :- !.

%enemies:
enemy_ships([]).
enemy_bombs([]).

%speed:
speed(10) :- !.
%G_EnemySpeed
player_bomb_speed(15) :- !.

%player:
player_bombs([]).

%kalo mokad
die(_) :- !,
execute("sound\\cleangame.bat"),execute("sound\\menu.exe"),
assert(first_sleepint_paint), assert(dead).

%setting difikulnye
start_game(P, S, PTS) :- 
  execute("sound\\bb.exe"),
  execute("sound\\cleanmenu.bat"),
  retract(dead),
  retract(enemy_ships(_)), assert(enemy_ships([])),
  retract(enemy_bombs(_)), assert(enemy_bombs([])),
  width(W), height(H), X is W >> 1, Y is H - 1,
  G_D := 0,
  G_X := X,
  G_Y := Y,
  retract(player_bombs(_)), assert(player_bombs([])),
  (paused -> retract(paused)),
  G_HP:=220,
  G_limit:=31,
  G_info:= 20,
  G_text_HP:=100,
  G_Difficulty := P,
  G_EnemySpeed := S,
  G_DirectionTimer := -100,
  G_PTS := PTS,
  G_Score := 0,
  update_window(_).

%inisialisasi bentuk kapal
is_in_ship(X, Y, PX, PY) :- !,
  ship_left(X) =< PX,
  ship_right(X) >= PX,
  ship_up(Y) =< PY,
  ship_down(Y) >= PY.

%Kalo nabrakk
crash(X1, Y1, X2, Y2) :- !,
  TX1 is ship_left(X1),
  TX2 is ship_right(X1),
  TY1 is ship_up(Y1),
  TY2 is ship_down(Y1),
  do_crash_check(TX1, TX2, TY1, TY2, X2, Y2).

do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX1, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX1, TY2), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX2, TY1), !.
do_crash_check(TX1, TX2, TY1, TY2, X2, Y2) :- is_in_ship(X2, Y2, TX2, TY2), !.

%koordinat batas di dalam pesawat:
R is ship_up(int Y) :- !, ship_height(SH), R0 is Y - SH, R is R0 + 5.
R is ship_down(int Y) :- !, R is Y.
R is ship_left(int X) :- !, ship_half_width(SHW), R is X - SHW.
R is ship_right(int X) :- !, ship_half_width(SHW), R is X + SHW.

%#############penambahan musuh##############
add_enemy(_) :- X is G_LastShipWay, ship_minship(Y), X > Y,
  R0 is random(1000), R1 is G_Difficulty, R2 is R1 >> 1, R0 < R2, !,
  width(W), ship_half_width(HW), W1 is W - HW - HW, XNEW is random(W1) + HW,
  enemy_ships(L), random_left_right(D), ship_height(SHH), L1 is [ship(D, XNEW, SHH)|L],
  retract(enemy_ships(_)), assert(enemy_ships(L1)),
  G_LastShipWay := 0.

add_enemy(_) :- !.
random_left_right(X) :- Y is random(1000), Y < 500, !, X is left.
random_left_right(right) :- !.

%$$$$$$$$$$ Serangan musuh $$$$$$$$$$$$
fire_enemy(X, Y) :- R0 is random(1000), R1 is G_Difficulty, R2 is R1 >> 2, R0 < R2, !,
  enemy_bombs(L), random_speed(S), L1 is [bomb(S, X, Y)|L],
  retract(enemy_bombs(_)), assert(enemy_bombs(L1)).

fire_enemy(X, Y) :- !.

random_speed(S) :- !, S0 is G_EnemySpeed, S1 is S0 / 4, S2 is S0 * 1.5, S3 is S1 * 1000, S4 is S2 * 1000,
  S5 is S4 - S3, INTS5 is integer(S5), R0 is random(INTS5) + S3, S is R0 / 1000.

%$$$$$$$$$ Serangan Player $$$$$$$$$$$$
fire_player(_) :- firing, !, retract(firing), player_bombs(L), X is G_X, Y is G_Y, ship_height(SH), Y1 is Y - SH -7,
  (autofire -> AutoFire := 1 else AutoFire := 0), L1 is [bomb(AutoFire, X, Y1)|L],
  retract(player_bombs(_)), assert(player_bombs(L1)).
fire_player(_) :- !.

update_positions(_) :- !, update_enemies(_), update_bombs(_), update_player_bombs(_), update_player(_).

% {{ UPDATE_ENEMIES:
update_enemies(_) :- !, enemy_ships(L), update_enemy(L, R), retract(enemy_ships(_)), assert(enemy_ships(R)).
update_enemy([], []) :- !.
update_enemy([ship(D, X, Y)|T], R) :- height(H), S is G_EnemySpeed, Y1 is ship_down(Y + S), Y1 > H, !, update_enemy(T, R).
update_enemy([ship(D, X, Y)|T], [ship(D, RX, RY)|R]) :- S is G_EnemySpeed, preserve_direction(D, S, X, RX), !, RY is Y + S, update_enemy(T, R).
update_enemy([ship(D, X, Y)|T], [ship(RD, X, RY)|R]) :- !, S is G_EnemySpeed, RY is Y + S, opposite(D, RD), update_enemy(T, R).
preserve_direction(left, S, X, RX) :- !, RX is X - S, ship_left(RX) >= 0.
preserve_direction(right, S, X, RX) :- !, RX is X + S, width(W), ship_right(RX) < W.
opposite(left, right) :- !.
opposite(right, left) :- !.
% }}

%update enemy bombs:
update_bombs(_) :- !, enemy_bombs(L), update_bomb(L, R), retract(enemy_bombs(_)), assert(enemy_bombs(R)).
update_bomb([], []) :- !.
update_bomb([bomb(S, X, Y)|T], R) :- height(H), Y1 is Y + S, Y1 > H, !, update_bomb(T, R).
update_bomb([bomb(S, X, Y)|T], [bomb(S, X, RY)|R]) :- !, RY is Y + S, update_bomb(T, R).

%update player bombs:
update_player_bombs(_) :- !, player_bombs(L), update_player_bomb(L, R), retract(player_bombs(_)), assert(player_bombs(R)).
update_player_bomb([], []) :- !.
update_player_bomb([bomb(_, X, Y)|T], R) :- player_bomb_speed(S), Y1 is Y - S, Y1 < 0, !, update_player_bomb(T, R).
update_player_bomb([bomb(AutoFire, X, Y)|T], [bomb(AutoFire, X, RY)|R]) :- !, player_bomb_speed(S), RY is Y - S, update_player_bomb(T, R).

%update player:
update_player(_) :- G_DirectionTimer > 0, !, D is G_D, X is G_X, Y is G_Y, speed(S), update_player_impl(S, D, X, Y, RX, RY), G_X := RX, G_Y := RY.
update_player(_) :- !.
update_player_impl(S, 1, X, Y, X, RY) :- Y0 is Y - S, ship_up(Y0) < 0, !, ship_height(RY).
update_player_impl(S, 1, X, Y, X, RY) :- !, RY is Y - S.
update_player_impl(S, 4, X, Y, X, RY) :- Y1 is Y + S, height(H), Y1 >= H, !, RY is H - 1.
update_player_impl(S, 4, X, Y, X, RY) :- !, RY is Y + S.
update_player_impl(S, 2, X, Y, RX, Y) :- X0 is X - S, ship_left(X0) < 0, !, ship_half_width(RX).
update_player_impl(S, 2, X, Y, RX, Y) :- !, RX is X - S.
update_player_impl(S, 3, X, Y, RX, Y) :- X0 is X + S, width(W), ship_right(X0) > W, !, ship_half_width(HW), RX is W - HW.
update_player_impl(S, 3, X, Y, RX, Y) :- !, RX is X + S.
update_player_impl(S, D, X, Y, X, Y) :- !.

%>>>>>>>>>>>>>>>>>Sistem HP<<<<<<<<<<<<<<<<<<<<<
bar_HP(_):-
line(20,80,G_HP,80),
text_out(20,90,print("HP : " + G_text_HP +" %")).

bar_ngurang(_):-
G_text_HP:=G_text_HP - 10,
G_HP:=G_HP - 20,(G_HP = 20 ->tampilan_kalah(_)).



%)))))))))))info pas maen((((((((
tampilan_info(_):-
text_out(G_info,435,print("Tekan P untuk berhenti - Tekan ESC untuk menyerah")).

info_gerak(end):-
  G_info:=G_info-5,(G_info= -250 -> G_info:=500).



%~~~~~~~~~limit maen~~~~~~~~~~~~~~
tampilan_limit(_):-
text_out(250,20,print(G_limit)).

limit_survive(end):-
  G_limit:=G_limit-1,(G_limit=0 ->set_pause(_),
message("You Win !!","\t\tSelamat!! \nAnda Telah Berhasil Bertahan Dari Serangan Musuh",i),die(_),update_window(_)).



%!!!!!!!!notif kalo kalah!!!!!!!!
tampilan_kalah(_):-
die(_),update_window(_),
message("You Lose !!!","\t\tMaaf \nPesawat Anda Telah Hancur dan Anda Dinyatakan Gugur :(",!),
fail.

%***********main************
window_game(init) :- !,
  G_HighScore := 0, G_LastShipWay := 0,
  pen(5, rgb(0,0,0)),
  X is 1/30,
  G_limit := set_timer(_,1.0,limit_survive),
  G_gerak := set_timer(_,0.1,info_gerak),
  G_Timer := set_timer(_, X, do_timer),
  fail.

%********* Tampilan main *************
window_game(paint):- 
  G_player_color:=brush(rgb(0,0,0)), G_enemy_color:=brush(rgb(200,0,200)), G_Red:=brush(rgb(250,0,0)),
  width(W), height(H),
  brush(rgb(10, 10, 10)),
  draw_bitmap(0,0,G_sky,_,_),
  paint_score(_),
  not(dead),
  brush(G_player_color),
  tampilan_limit(_),
  bar_HP(_),
  tampilan_info(_),
  paint_player(_),
  draw_player_bombs(_),
  brush(G_enemy_color),
  draw_enemies(_),
  draw_enemy_bombs(_),
  fail.

window_game(close) :- !,
      kill_timer(G_layer2, G_Timer),
      fail.

%=======================================Bentuk Player
paint_player(_) :- !,
  X is G_X, Y is G_Y,
  X1 is ship_left(X),
  X2 is ship_right(X),
  YY is ship_up(Y),
  fill_polygon(X1+20,Y, X2+10,Y, X+15,YY-20), %badan kanan
  fill_polygon(X1-10,Y, X2-20,Y, X-15,YY-20), %badan kiri
  fill_polygon(X+20,Y, X2+30,Y, X+20,YY),  %sayap kanan
  fill_polygon(X1-30,Y, X-20,Y, X-20,YY),  %sayap kiri
  fill_polygon(X1,Y, X2,Y, X,YY-40),  %badan kapal
  fill_polygon(X+5,Y+10, X2+20,Y+35, X+5,YY+10), %ekor kanan
  fill_polygon(X1-20,Y+35, X-5,Y+10, X-5,YY+10),  %ekor kiri
pen(2,rgb(0,0,255)), 
  line((X,YY,X1,Y),(X,YY,X2,Y),(X1,Y,X2,Y)).


%~~~~~~~~~~~~~ Menu pada saat pemilihan level ~~~~~~~~~~
paint_score(_) :- dead, !,
 
  text_out(197,40,"Select Level"),
  text_out(180, 80, "1 - Easy"),
  text_out(180, 110, "2 - Normal"),
  text_out(180, 140, "3 - Don't Try This"),
  text_out(180, 170, "4 - Back To Main Menu"),
 
  text_out(180, 260, "F12 - Help"),
  text_out(180, 230, "HighScore"),
  text_out(260, 230, ":"),
  text_out(280, 230, print(G_HighScore)).

paint_score(_) :- !,
 
  text_out(20,20,"HighScore"),
  text_out(99,20,":"),
  text_out(114,20,print(G_HighScore)),
  text_out(20,50,"Score"),
  text_out(99,50,":"),
  text_out(114,50,print(G_Score)).

%=======================Bentuk musuhnye==============
draw_enemies(_) :- !, enemy_ships(L), d_e(L).
d_e([]) :- !.
d_e([ship(_, X, Y)|T]) :- !,
  ship_half_width(HW), ship_height(SH),
  X1 is ship_left(X),
  X2 is ship_right(X),
  YY is ship_up(Y),
  fill_polygon(X1,YY, X2,YY, X, Y), d_e(T).

%===================bentuk tembakan musuh===========
draw_enemy_bombs(_) :- !, enemy_bombs(L), d_eb(L).
d_eb([]) :- !.
d_eb([bomb(_, X, Y)|T]) :- !,
  Y1 is Y - 7,
  XX is round(X),
  YY is round(Y),
  YY1 is round(Y1),
  fill_polygon(XX - 1,YY, XX + 1,YY, XX + 1, YY1, XX - 1, YY1), d_eb(T).

%@@@@@@@@@@ bentuk tembakannye @@@@@@@@@@@@@
draw_player_bombs(_) :- !, player_bombs(L), d_pb(L).
d_pb([]) :- !.
d_pb([bomb(AutoFire, X, Y)|T]):- !,
  Y1 is Y + 7,
  XX is round(X),
  YY is round(Y),
  YY1 is round(Y1),
  (Condition is f ->
    (AutoFire is 1 -> brush(G_Red) else brush(G_player_color))
  ),
  fill_polygon(XX+20 ,YY, XX+20 ,YY, XX+20 , YY1, XX+20 , YY1),
  fill_polygon(XX-20 ,YY, XX-20 ,YY, XX-20 , YY1, XX-20 , YY1), d_pb(T).

assert_autofire(_) :- autofire, !, retract(autofire).
assert_autofire(_) :- !, assert(autofire).

set_pause(_) :- paused, !, retract(paused).
set_pause(_) :- !, assert(paused).



%---------------------pilihan kembali-----------
pilihan_back(press):-
beep("sound\\Lock.wav"),
close_window(G_layer2),
window(G_layer1,_,window_menu(_),"Menu progress", 450,100,500,500).

set_moving(D) :- !, G_DirectionTimer := 1, G_D := D.

%bbbbbbbbbbbbbbbb Pengecekan tubrukan terhadap kapal musuh dddddddddddddddddd
check_collisions(_) :- !, enemy_ships(EShips), enemy_bombs(EBombs), check_es(EShips, NewShips), check_eb(EBombs), retract(enemy_ships(_)), assert(enemy_ships(NewShips)).
check_es([],[]) :- !.
check_es([ship(D, X, Y)|T], []) :- X1 is G_X, Y1 is G_Y, crash(X, Y, X1, Y1), !, bar_ngurang(_).
check_es([ship(D, X, Y)|T], [ship(D, X, Y)|R]) :- survive_enemy(X, Y), !, check_es(T, R).
check_es([ship(D, X, Y)|T], R) :- !, (G_AutoFired is 0 -> G_Score := G_Score + G_PTS else G_Score := G_Score - G_PTS),
  (G_HighScore < G_Score -> G_HighScore := G_Score), G_Difficulty := G_Difficulty + 2, check_es(T, R).

survive_enemy(X, Y) :- !, player_bombs(Bombs), s_e(X, Y, Bombs).

s_e(_, _, []) :- !.
s_e(X, Y, [bomb(AutoFire, BX, BY)|T]) :- is_in_ship(X, Y, BX, BY), !, G_AutoFired := AutoFire, fail.
s_e(X, Y, [bomb(_, _, BY)|T]) :- !, s_e(X, Y, T).

%bbbbbbb pengecekan tubrukan terhadap serangan musuh dddddddddddd
check_eb([]) :- !.
check_eb([bomb(_, BX, BY)|T]) :- X1 is G_X, Y1 is G_Y, is_in_ship(X1, Y1, BX, BY), !, bar_ngurang(_).
check_eb([bomb(_, BX, BY)|T]) :- !, check_eb(T).

fire_enemies(_) :- !, enemy_ships(L), f_e(L).
f_e([]) :- !.
f_e([ship(_, X, Y)|T]) :- !, fire_enemy(X, Y), f_e(T).

%\\\\\\\\\\\\\\\\ Perintah2 pada saat pause ///////////////
do_timer(end) :- not(dead), !,
  (paused -> text_out(220,165,"Paused"),
  text_out(130,200,"W/A/S/D : untuk menggerakkan pesawat"),
  text_out(180,230,"K : untuk menyerang"),
  text_out(175,260,"ESC : untuk menyerah"),
 fail),
  (autofire -> assert(firing)),
  fire_player(_),
  fire_enemies(_),
  update_positions(_),
  check_collisions(_),
  S is G_EnemySpeed,
  G_LastShipWay := G_LastShipWay + S,
  add_enemy(_),
  update_window(_),
  fail.

do_timer(end) :- !,
  paint_sleeping(_), fail.

paint_sleeping(_) :- first_sleeping_paint, !, retract(first_sleepint_paint), update_window(_).
paint_sleeping(_) :- !.

%^-------------------------Gamenya----------------------^

 
%------------------------------------------fungsi pencetan di menu awal

       window_menu(key_down(49,_)):-                                 %1
              new_window2(_) .    

       window_menu(key_down(50,_)):-                                 %2
              about_game(_).
      
       window_menu(key_down(51,_)):-                                 %3
              pilihan_help(_).

       window_menu(key_down(52,_)):-                                 %4
              pilihan_exit(_).
      
      

%----------------------pencetan di gamenye

window_game(key_down(87,_)):-                                 %W
              set_moving(1).      

window_game(key_down(65,_)):-                                 %A
              set_moving(2).      

window_game(key_down(68,_)):-                                 %D
              set_moving(3).      

window_game(key_down(83,_)):-                                 %S
              set_moving(4).      

window_game(key_down(80,_)):-                                 %P
              set_pause(_).
      
window_game(key_down(81,_)):-                                 %Q
              assert_autofire(_).
      
window_game(key_down(75,_)):-                                 %K
              not(autofire), assert(firing),execute("nembak.exe").
      
window_game(key_down(27,_)):-                                 %ESC
              die(_), update_window(_).
      
window_game(key_down(49,_)):-                                 %1
              start_game(100, 5,  3), beep("sound\\gun.wav").
      
window_game(key_down(50,_)):-                                 %2
              start_game(150, 7,  5), beep("sound\\gun.wav").
      
window_game(key_down(51,_)):-                                 %3
              start_game(300, 3, 10), beep("sound\\gun.wav").
      
window_game(key_down(52,_)):-                                 %4
              pilihan_back(_).
      
window_game(key_down(123,_)):-                                %F12
              pilihan_help(_).



 GLOSORIUM

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.

Algoritma Breadth First Search (BFS)
Breadth-first search adalah algoritma yang melakukan pencarian secara melebar yang mengunjungi simpul secara preorder yaitu mengunjungi suatu simpul kemudian mengunjungi semua simpul yang bertetangga dengan simpul tersebut terlebih dahulu. Selanjutnya, simpul yang belum dikunjungi dan bertetangga dengan simpulsimpul yang tadi dikunjungi , demikian seterusnya. Jika graf berbentuk pohon berakar, maka semua simpul pada aras d dikunjungi lebih dahulu sebelum simpul-simpul pad aras d+1.


AI
AI (Artificial Intelligence) yaitu kecerdasan buatan, dimana AI akan mengontrol pergerakan karater yang sudah dibuat dalam menentukan jalur mendapatkan apel dan menghidari dari tabrakan dengan dirinya sendiri dan pembatas yang ada pada area permainan.

HP
Health Point (HP) merupakan sebuah poin atau nilai yang menyatakan sebuah tingkat kesehatan atau nyawa yang tersedia pada awal permainan. Pada umunya HP digunakan untuk memberikan kesempatan hidup player di dalam game, sehingga player tidak mengalami one hit KO (mati seketika jika terkena sekali serang).


         MEIDIANA DWI ANDYNI
                      3IA14
                   55413407


 


Monday, 18 April 2016

klasifikasi game

Jenis game berdasarkan alat yang digunakan :
1.Arcade games:


Game yang sering disebut ding-dong di Indonesia, biasanya berada di daerah khusus dan memiliki box atau mesin yang memang khusus di design untuk jenis video games tertentu dan tidak jarang memiliki fitur yang dapat membuat pemainnya lebih merasa “masuk” dan “menikmati”, seperti pistol, kursi khusus, sensor gerakan, sensor injakkan dan stir mobil (beserta transmisinya tentunya).
2.PC Games :

yaitu video game yang dimainkan menggunakan Personal Computers.
3.Console games :

yaitu video games yang dimainkan menggunakan console tertentu, seperti Playstation 2, Playstation 3, XBOX 360, dan Nintendo Wii.
4. Handheld games

yaitu game yang dimainkan di console khusus video game yang dapat dibawa kemana-mana, contoh Nintendo DS dan Sony PSP.
5.Mobile games

yaitu game yang dapat dimainkan atau khusus untuk mobile phone atau PDA.

Jenis game berdasarkan jenis permainannya :
1. Aksi – Shooting

video game jenis ini sangat memerlukan kecepatan refleks, koordinasi mata-tangan, juga timing, inti dari game jenis ini adalah tembak, tembak dan tembak.

2. Fighting ( pertarungan ) :
Inti dari game ini adalah penguasaan jurus. Pemain dituntut utuk mengenali setiap karakter tokoh lawan main yang ada di dalamnya. Contohnya pada game Seri Street Fighter, Tekken, Mortal Kombat, Soul Calibur dan King of Fighter.

3. Aksi – Petualangan :



Game ini telah berkembang hingga menjadi genre campuran action beat-em up, dan sekarang, di tahun 2000 an, jenis ini cenderung untuk memiliki visual 3D dan sudut pandang orang ke-tiga. Tomb Rider, Grand Theft Auto dan Prince of Persia termasuk didalamnya.


4. Petualangan :




Bedanya dengan jenis video game aksi-petualangan, refleks dan kelihaian pemain dalam bergerak, berlari, melompat hingga memecut atau menembak tidak diperlukan di sini. Video Game murni petualangan lebih menekankan pada jalan cerita dan kemampuan berpikir pemain dalam menganalisa tempat secara visual, memecahkan teka-teki maupun menyimpulkan rangkaian peristiwa dan percakapan karakter hingga penggunaan benda-benda tepat pada tempat yang tepat
5. Simulasi, Konstruksi dan manajemen :

Game jenis ini menggambarkan sesuatu dalam dunia nyata seperti membangun rumah, gedung hingga kota, mengatur pajak dan dana kota hingga keputusan memecat atau menambah karyawan. Video Game jenis ini membuat pemain harus berpikir untuk mendirikan, membangun dan mengatasi masalah dengan menggunakan dana yang terbatas. Contoh: Sim City, The Sims, Tamagotchi.
6. Role Playing :



Game jenis ini sesuai dengan terjemahannya, yaitu bermain peran. Memiliki penekanan pada tokoh di dalam permainan, yang biasanya adalah tokoh utama dalam cerita itu. Seperti Final Fantasy, Dragon Quest dan Xenogears.


Jenis game berdasarkan kategorinya :
1. Multiplayer Online

Game ini sedang menjadi tren di dalam maupun luar negeri. Karena pembayarannya online dan melalui voucer, game ini aman dari pembajakan. Contoh: Ragnarok online, O2jam, World of Warcraft, Ayo Dance, Lineage, Rose online


2. Casual games


Game ini sangat mudah dipelajari. Bahkan bisa langsung dimainkan begitu dibuka. Jenis game ini biasanya dimainkan hanya menggunakan mouse saja. Contoh: Diner Dash, Sally Salon, Bejeweled, Zuma, Feeding Frenzy, Insaniquarium.


3. Edugame

Game jenis ini dibuat dengan tujuan spesifik sebagai alat pendidikan, entah untuk belajar mengenal warna untuk balita, mengenal huruf dan angka, matematika, sampai belajar bahasa asing. Developer yang membuatnya, harus memperhitungkan berbagai hal agar game ini benar-benar dapat mendidik, menambah pengetahuan dan meningkatkan ketrampilan yang memainkannya. Target segmentasi pemain harus pula disesuaikan dengan tingkat kesulitan dan design visual ataupun animasinya. Contoh edugames : Bobi Bola, Dora the explorer, Petualangan Billy dan Tracy.


D. Pengaruh Game Terhadap Kehidupan Pelajar
Munculnya video game sebagai perkembangan teknologi di era modern ini tentu perlu disikapi dengan berbagai sudut pandang positif dan negatif menurut penggunanya. Sebagai manusia yang menerima perubahan, perlu adanya pembatasan-pembatasan tentang sejauh mana dampak negatif yang diakibatkan.
Kehadiran video game memang mendapatkan apresiasi di kalangan remaja, khususnya para pelajar. Hal ini dapat menumbuhkan kreativitas dan daya reaksi selama permainan itu tidak dimainkan selama berulang-ulang.
Akio Mori seorang professor dari Tokyo’s Nihon University melakukan riset mengenai dampak video game pada aktifitas otak. Dari penelitian Akio Mori tersebut dapat disimpulkan bahwa terdapat dua point penting yaitu :
Pertama , penurunan aktivitas gelombang otak depan yang memiliki peranan sangat penting, dengan pengendalian emosi dan agresivitas sehingga mereka cepat mengalami perubahan mood, seperti mudah marah, mengalami masalah dalam hubungan sosial, tidak konsentrasi dan lain sebagainya.
Kedua , penurunan aktifitas gelombang beta merupakan efek jangka panjang yang tetap berlangsung meskipun gamer tidak sedang bermain game. Dengan kata lain para gamer mengalami “ autonomic nerves “ yaitu tubuh mengalami pengelabuan kondisi dimana sekresi adrenalin meningkat , sehingga denyut jantung, tekanan darah, dan kebutuhan oksigen terpacu untuk meningkat. Bila tubuh dalam keadaan seperti ini maka yang terjadi pada gamer adalah otak mereka merespon bahaya sesungguhnya .

Dampak positif game online adalah :
1. Membuat Orang Pintar

Penelitian di Manchester University dan Central Lanchashire University membuktikan bahwa gamer yang bermain 18 jam per minggu memiliki koordinasi yang baik antara tangan dan mata setar kemampuan atlet.
2. Menambah Konsentrasi

Dr. Jo Bryce Kepala peneliti suatu universitas di Inggris menemukan bahwa gamer sejati mempunyai daya konsentrasi tinggi yang memungkinkan mereka mampu menyelesaikan beberapa tugas.
3. Meningkatkan Ketajaman Mata

Penelitian di Rochester University mengungkapkan bahwa anak-anak yang memainkan game action secara teratur mempunyai ketajaman mata yang lebih cepat dari mereka yang tidak bermain game.
4. Meningkatkan Kemampuan Berbahasa Inggris

Riset di Indonesia membuktikan bahwa pria yang mahir berbahasa Inggris di sekolah atau universitas tanpa kursus adalah mereka yang bermain game.
5. Membantu Bersosialisasi

Beberapa professor di Loyola University, Chicago telah mengadakan penelitian dan menurut mereka game online dapat menumbuhkan interaksi social yang menentang stereotif gamer yang terisolasi.
6. Meningkatkan Kinerja Otak dan Membantu Otak dalam Menyerap Cerita

Bermain game yang tidak berlebihan dapat meningkatkan kinerja otak bahkan memiliki kapasitas jenuh yang lebih sedikit disbanding belajar dan membaca buku.
7. Meningkatkan Kecepatan dalam Mengetik

Kebanyakan game online mengharuskan pemain mengetik ketika sedang berkomunikasi dengan lawan bicara, sehingga hal ini secara tidak langsung akan membiasakan pemain dalam mengetik.
8. Menghilangkan Stress

Para peneliti di Indiana University menjelaskan bahwa bermain game dapat mengendurkan ketegangan syaraf.
9. Memulihkan Kondisi Tubuh

Dr. Mark Griffiths psikolog dari Nottingham Trent University meneliti sejauh mana manfaat game dalam terapi fisik.
Dampak negative dari game akan sangat terasa apabila pemain tidak bisa mengendalikan diri. Hasil penelitian Fakultas Kedokteran Universitas Hanover, Jerman mengatakan game online dapat mengakibatkan kepribadian ganda. Seorang wanita yang sering bermain game online tiap hari selama 3 bulan dengan memainkan beberapa tokoh yang berbeda, ternyata tokoh imajinasi itu mengambil alih kepribadiannya. Sehingga wanita tersebut kehilangan kendali atas kepribadian dan kehidupan sosialnya.

Dampak negatif game online adalah :
1. Menimbulkan efek ketagihan
2. Membuat orang terisolir dari kehidupan disekitarnya
3. Membuat orang menjadi malas
4. Mengganggu kesehatan
5. Menimbulkan masalah psikologis apabila terlalu dipikirkan
6. Mengganggu kehidupan di dunia nyata
7. Pemborosan apabila kecanduan game online

Sumber :

Nama: meidiana dwi andyni
kelas : 3IA14
npm: 55413407

Thursday, 17 December 2015

Logo dan karakter untuk kelas IA14

Logo kelas






Filosifi logo

KSI merupakan singkatan dari knowledge, smart dan intelligent. Sementara 14 yaitu urutan kelas kami di Jurusan Teknik Informatika.

Logo ini bergambar sinyal / pemancar yang memiliki arti mencari dan membagi. Icon dan teks pada logo ini sangat berkaitan, dimana knowledge (ilmu pegetahuan) dapat membuat manusia menjadi smart (pintar), kepintaran itu yang bisa meciptakan manusia menjadi karakter yang cerdas. Ilmu tidak bisa datang tiba-tiba, karena ilmu bisa didapatkan dengan cara dicari. Apabila sudah kaya dengan ilmu seseorang tidak boleh pelit dengan ilmu yang dimilikinya dan harus berbagi kepada yang lain.

Arti warna pada logo

Logo ini mempunyai dua warna yaitu biru dan putih, berikut ini arti dari warna pada logo tersebut.

Biru
Biru memiliki arti meningkatkan ekspresi verbal, komunikasi, ekspresi artistik dan kekuatan. Biru yang kuat (biru tua) akan merangsang pemikiran yang jernih dan biru muda akan menenangkan pikiran dan membantu konsentrasi. Secara garis besar warna biru memiliki arti profesionalitas. Birupada logo tersebut mengartikan suatu profesionalitas dalam sebuah kreatifitas.

Putih
Putih memiliki arti keterbebasan, kenapa pada logo ini dipakai warna putih? Sesuai dengan pengertiaannya, kita bebas mencari ilmu sesuai dengan yang kita inginkan dan tidak ada batasan untuk itu.


Karakter

Deskripsi dari karakter diatas yaitu :

karakter diatas menggambarkan seseorang yang sedang meraih topi toga, Sama halnya seperti kita sebagai mahasiswa yang sedang menempuh kelulusan diperkuliahan. Karakter ini berwarna putih dan tidak memiliki wajah. Mengapa demikian?

Karakter ini menyampaikan suatu pesan, putih melambang kesucian/kepolosan/keluguan pada unsur manusia. mata, yang artinya sebagai mahasiswa harus menpunyai sikap yang jujur, adil dan bertanggung jawab.

Secara tidak langsung topi toga merupakan suatu pandangan derajat atau tingkat kulaitas seseorang, semakin tinggi dia mencari ilmu semakin besar pula kesempatan sukses yang dia dapatkan.

Nama Anggota
Harles Bayu Anggara                  53413940
Karina Meita Permatasari            54413770
Meidiana Dwi Andyni                   55413407
Sinta Novianka                            58413503
Tridea Putra S                             58413986