Sabtu, 28 Mei 2016

Terrible Racing Game (Strawberry Prolog)



Game Terrible Racing ini merupakan pengembangan lebih lanjut dari contoh game Horrible Racing yang ada pada Strawberry Prolog pada umumnya. Game ini memiiliki tujuan untuk menghindari rintangan atau jebakan yang datang sebisa dan selama mungkin. Game Horrible Racing ini memilki duah buah karakter yaitu player dan rintangan. Player berusaha menghindari rintangan yang datang, dan rintangan akan ditempatkan berdasarkan posisi player. Namun di sini juga terdapat penambahan karakter ke tiga yang berfungsi sebagai Enemy dengan tugas yang sama dengan player yaitu menghindari rintangan ditambah juga dengan tugas tambahan yaitu mengurangi ruang gerak player untuk menghindari rintangan.



Konsep AI

Pada dasarnya game Horrible Racing merupakan game single player atau permainan yang hanya dimainkan oleh satu pemain, dimana hanya terdapat satu player yang berusaha menghindari rintangan yang datang. Akan tetapi pada Horrible Racing ini, saya mencoba mengembangkan permainan dengan membuat karakter baru sebagai lawan dari karakter pemain dengan tujuan untuk menyulitkan pergerakan karakter pemain. Karakter yang telah dibentuk tidak akan dapat berjalan jika tidak adanya kendali dari bahasa pemrograman. Kendali yang ditanamkan pada pemrogrman disebut AI (Artificial Intelligence) yaitu kecerdasan buatan, dimana AI akan mengontrol pergerakan karater yang sudah dibuat dalam menentukan jalur jalur perpindahan agar tidak terkena rintangan dan dapat memlih perpindahan yang sesuai agar karakter pemain terjebak.






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.
Dalam permainan ini  AI menggunakan algoritma Branch and Bound, algoritma ini mendukung perhitungan untuk memukan jalan terbaik menghindari rintangan dan posisi terbaik untuk menjebak karakter pemain.



Source Code

% This program was edited by Febriyanto from Gunadarma University

% This program was originally created by Ivan Genov Genov
% from University of Sofia

?-
%====================Pendklarasian Awal=====================%
  G_Lifes:=10, %banyaknya nyawa
  G_S:=0, %score
  G_L:=10, %life
  G_Counter:=0,
  G_Times:=0,
  G_Score:=0,
  G_Depth:=10,
  G_Crashed:=0,
  G_Col1:=0, G_Col2:=0, G_Col3:=0, G_Col4:=0, G_Col5:=0, G_Col6:=0, G_Col7:=0,
  G_Pos:=4, %posisi awal
  G_OldPos:=GPos,
  G_Pos2:=3,
  G_OldPos2:=G_Pos2,
% Latar dan Background
  G_Pen0:= pen(1, rgb(249, 193, 255)),
  G_Pen1:= pen(3, rgb(35, 106, 250)),
  G_Brush0:= brush(rgb(249, 193, 255)),
  G_Brush1:= brush(rgb(250, 171, 94)),
  G_Brush2:= brush(rgb(115, 240, 130)),
  G_Brush3:= brush(rgb(248,67,76)),
  G_ss is bitmap_image("game.bmp",_),
  G_menu is bitmap_image("menu.bmp",_),
  G_play is bitmap_image("play.bmp",_),
  G_rules is bitmap_image("rules.bmp",_),
  G_About is bitmap_image("about.bmp",_),

%Tampilan Awal
window(G_kedua,_,win_dua(_),"Getting Ready",100,100,725,450).

%variable untuk fungsi timer
win_dua(init):-
G_batas := 1,
waktu is set_timer(_,0.05,fungsi_timer).

%Splashscreen
fungsi_timer(end):-
draw_bitmap(5,100,G_ss,_,_),
text_out(300,295,print("LOADING : " + G_batas+"%")),
pen(1,rgb(255,255,255)),brush(rgb(255,255,255)),
rect(0,250,206-(2*G_batas),350),
rect(490+(2*G_batas),250,700,350),
G_batas := G_batas + 1 ,
G_batas = 101 -> close_window(G_kedua),

%Window Menu
window(G_pertama,_,win_pertama(),"Menu",100,100,720,425),
beep("menu1.wav"),
     update_window(_).

%Memanggil Fungsi Background
win_pertama(paint):-
draw_bitmap(0,0,G_menu,_,_).

%Button pada Menu
win_pertama(init):-
button(_,_,tombol_1(_),"PLAY",260,160,110,35),
button(_,_,tombol_2(_),"QUIT",439,160,110,35),
menu(normal, _,_,help(_),"&Help"),
menu(normal, _,_,about(_),"&About").

%fungsi tombol help dan about
help(press):-
window(G_help,_,win_rules(_),"HELP",200,100,428,450).
win_rules(paint):-
draw_bitmap(0,0,G_rules,_,_).
win_rules(init):-
button(_,_,tombol3(_),"OK",178,350,50,40).
tombol3(press):-
close_window(G_help).

about(press):-
window(G_Aboutme,_,win_about(_),"About",200,100,450,450).
win_about(paint):-
draw_bitmap(0,0,G_About,_,_).
win_about(init):-
button(_,_,tombol_4(_),"MORE ABOUT ME",125,350,170,40).
tombol_4(press):-
shell_execute("about.html").
%fungsi tombol 1
tombol_1(press):-
close_window(G_pertama),
window(G_Wnd, _, win_func(_), "PLAY", 100, 0, 460, 600),
execute("backsound.exe"),
update_window(_).

%fungsi tombol 2
tombol_2(press):-
close_window(G_pertama).

win_func(init):-
G_Timer:=set_timer(G_Wnd, 0.1, time_func).

%Control Player menggunakan ASCII
win_func(key_down(37, _)) :- 
     (G_Pos > G_Pos2 + 1 -> G_OldPos:=G_Pos, G_Pos:=G_Pos - 1), draw_car.

win_func(key_down(39, _)) :- 
     (G_Pos < 7 -> G_OldPos:=G_Pos, G_Pos:=G_Pos + 1), draw_car.

win_func(close) :- 
not( execute("backsound.bat")).

%=======================PEMBUATAN OBJEK=============

win_func(paint):-
draw.
draw:-
    pen(G_Pen0), brush(G_Brush0),
    draw_bitmap(0,0,G_play,_,_),
    color_text_back(G_Wnd, rgb(185, 222, 212)),
    color_text(G_Wnd, rgb(0, 0, 0)),
    text_out(187, 512, "SCORES : "+print(G_Score)),
    text_out(10, 512, "COMP : "+print(G_L)),
    text_out(364, 512, "LIFES : "+print(G_Lifes)),
    Pos:=G_Pos*60- 40,
    Pos2:=G_Pos2*60- 40,
    pen(G_Pen1), brush(G_Brush1),
    ellipse(Pos, 420, Pos+40, 460),
    brush(G_Brush3),
    ellipse(Pos2, 420, Pos2+40, 460),
    brush(G_Brush2),
    ellipse(Pos+7- G_Crashed, 428- G_Crashed, Pos+15+G_Crashed, 439+G_Crashed),
    ellipse(Pos+25- G_Crashed, 428- G_Crashed, Pos+33+G_Crashed, 439+G_Crashed),

    ellipse(Pos2+7- G_Crashed, 428- G_Crashed, Pos2+15+G_Crashed, 439+G_Crashed),
    ellipse(Pos2+25- G_Crashed, 428- G_Crashed, Pos2+33+G_Crashed, 439+G_Crashed),
    
    Mask:= 1 << (G_Depth- 1),
    for(I, 1, G_Depth),
      (
        (G_Col1 /\ Mask > 0 -> round_rect(20, I*40- 20, 60, I*40, 10, 10)),
        (G_Col2 /\ Mask > 0 -> round_rect(80, I*40- 20, 120, I*40, 10, 10)),
        (G_Col3 /\ Mask > 0 -> round_rect(140, I*40- 20, 180, I*40, 10, 10)),
        (G_Col4 /\ Mask > 0 -> round_rect(200, I*40- 20, 240, I*40, 10, 10)),
        (G_Col5 /\ Mask > 0 -> round_rect(260, I*40- 20, 300, I*40, 10, 10)),
        (G_Col6 /\ Mask > 0 -> round_rect(320, I*40- 20, 360, I*40, 10, 10)),
        (G_Col7 /\ Mask > 0 -> round_rect(380, I*40- 20, 420, I*40, 10, 10)),

         Mask:= Mask >> 1, fail
      ).


%=============== AI untuk Trap =================%
time_func(end):-
G_Counter:=G_Counter + 1,
(G_Counter >= G_Times ->
G_Score:=G_Score+1,
G_Crashed:=0,
Pos:=random(700) // 100 + 1, put_trap(Pos),

once(crashX(ZX)),
(ZX =:= G_Pos2->
(G_Pos2 =:= G_Pos - 1 ; G_Pos2=:= 1 -> 
G_Pos2:= 2
else
G_OldPos2:=random(1) + 1,
(G_OldPos2 =:= 2 -> G_OldPos2 := G_Pos - 1),
G_Pos2 := G_OldPos2
),

    (ZX =:= G_Pos2 -> beep("crash.wav"),
G_L:= G_L- 1, G_Crashed:=4
),
     (G_L  =< 0 -> 
kill_timer(G_Wnd, G_Timer),
beep("win.wav"),
message("Congratulation!","YOU WIN!",!),
execute("backsound.bat"),
close_window(G_Wnd)),

 
once(crash(Z)),
    (Z =:= G_Pos -> beep("crash.wav"),
G_Lifes:= G_Lifes- 1, G_Crashed:=4
),
     (G_Lifes  =< 0 -> 
kill_timer(G_Wnd, G_Timer),
 beep("lose.wav"),
 message("LOL","YOU'RE LOSER!!!",!),
 execute("backsound.bat"),
 close_window(G_Wnd)),

G_Col1:=G_Col1>>1, G_Col2:=G_Col2>>1, 
G_Col3:=G_Col3>>1, G_Col4:=G_Col4>>1,
G_Col5:=G_Col5>>1, G_Col6:=G_Col6>>1,
G_Col7:=G_Col7>>1,
G_Counter:=0,
G_Times:= (200- G_Score) // 40,
draw
).


put_trap(1):- G_Col1:= G_Col1 \/ (1 << G_Depth).
put_trap(2):- G_Col2:= G_Col2 \/ (1 << G_Depth).
put_trap(3):- G_Col3:= G_Col3 \/ (1 << G_Depth).
put_trap(4):- G_Col4:= G_Col4 \/ (1 << G_Depth).
put_trap(5):- G_Col5:= G_Col5 \/ (1 << G_Depth).
put_trap(6):- G_Col6:= G_Col6 \/ (1 << G_Depth).
put_trap(7):- G_Col7:= G_Col7 \/ (1 << G_Depth).

crash(1):- G_Col1 /\ 1 > 0, G_Pos =:= 1.
crash(2):- G_Col2 /\ 1 > 0, G_Pos =:= 2.
crash(3):- G_Col3 /\ 1 > 0, G_Pos =:= 3.
crash(4):- G_Col4 /\ 1 > 0, G_Pos =:= 4.
crash(5):- G_Col5 /\ 1 > 0, G_Pos =:= 5.
crash(6):- G_Col6 /\ 1 > 0, G_Pos =:= 6.
crash(7):- G_Col7 /\ 1 > 0, G_Pos =:= 7.
crash(8).

crashX(1):- G_Col1 /\ 1 > 0, G_Pos2 =:= 1.
crashX(2):- G_Col2 /\ 1 > 0, G_Pos2 =:= 2.
crashX(3):- G_Col3 /\ 1 > 0, G_Pos2 =:= 3.
crashX(4):- G_Col4 /\ 1 > 0, G_Pos2 =:= 4.
crashX(5):- G_Col5 /\ 1 > 0, G_Pos2 =:= 5.
crashX(6):- G_Col6 /\ 1 > 0, G_Pos2 =:= 6.
crashX(7):- G_Col7 /\ 1 > 0, G_Pos2 =:= 7.
crashX(8).





Jumat, 22 April 2016

Pengantar Teknologi Game - Klasifikasi Game Need for Speed: Rivals



1. Need for Speed berdasarkan klasifikasinya


Klasifikasi
Racing
Game
Need for Speed
Pengembang
Slightly Mmad Studios
Penerbit
Electronic Arts
Platform
PC Games, Playstation


2. Penjelasan

Racing Game adalah salah satu jenis permainan yang bernuansakan balap kendaraan. Disini kita bisa mengontrol sendiri kendaraan yang kita miliki dan menongtrolnya bersama-sama dengan partner kita untuk memenangkan sebuah balapan. 

Dari balapan mobil, motor sampai kuda juga termasuk Racing Game. Tujuanya adalah untuk menjadi yang tercepat. Tema yang biasa di ambil pada Racing Game adalah balapan jalanan dan balapan resmi. Di beberapa game, pemain juga bisa meng-upgrade dan memodifikasi kendaraannya agar lebih cepat dan terlihat bagus.




Need for Speed (NFS) adalah sebuah game balap yang dipublikasikan oleh EA (Electronic Arts). Game Need for Speed sendiri memiliki berbagai macam versi, salah satunya adalah Need for Speed: Rivals yang telah resmi dirilis pada tanggal 22 November 2013 lalu. Kemunculanya untuk perangkat konsol maupun PC, menghadirkan pengalaman baru dalam bermain game simulasi balapan.

Dikembangkan oleh dua pengembang yang berasal dari Swedia dan Inggris yakni pengembang Ghost Games dan juga Criterion Games yang berada dibawah naungan penerbit Electronic Arts (EA), game ini kini telah dapat dimainkan pada perangkat PlayStation 3, Xbox 360 dan PC serta perangkat konsol terbaru PlayStation 4 dan Xbox One.

Game Need for Speed: Rivals ini sendiri mengkombinasikan permainan dari seri Need for Speed: Hot Pursuit yang menampilkan aksi balapan dengan menjadi seorang polisi dan juga seri Need for Speed: Most Wanted yang menjadikan pemain sebagai seorang pembalap. Pada serial Rivals pemain akan dapat merasakan kedua aksi tersebut dalam satu permainan open world yang membebaskan pemain untuk menjelajah setiap lokasi yang terdapat pada Need for Speed: Rivals. Permainan ini menawarkan tantangan yang belum pernah ada, dan dengan hadiah yang bisa didapatkan.



Game ini memiliki beberapa fitur terbaru didalamnya, diantaranya adalah belasan perangkat yang dapat di-upgrade seperti EMP, Shockwaves dan kemampuan untuk dapat memanggil blokade jalanan. Mengambil latar tempat di kota Redview, membuat Need for Speed: Rivals ini memiliki lokasi yang sangat luas untuk ditelusuri. Selain itu juga terdapat lokasi-lokasi rahasia yang berfungsi sebagai tempat persembunyian bagi pembalap yang sedang dibuntuti oleh polisi. Fitur lainnya adalah hampir sama dengan fitur open world dari serial Most Wanted, yang memungkinkan pemain untuk dapat membuka setiap mobil yang akan digunakan.

Di bawah ini adalah spesifikasi komputer yang direkomendasikan oleh EA untuk NFS:Rivals


Untuk tampilan grafis, Need for Speed: Rivals telah mendapatkan perubahan yang cukup signifikan dari seri sebelumnya, dimana mobil-mobil yang hadir terlihat lebih nyata dan efek-efek yang terdapat selama permainan membuat aksi balapan yang dimainkan lebih dinamis. Penunjuk informasi mengenai status pengendara juga terkesan minimalis dan juga mudah dimengerti. Pada game ini pemain akan dapat merasakan melakukan aksi kejar-mengejar dengan beberapa cuaca seperti hujan, panas dan salju yang dapat muncul kapanpun. Selain itu perubahan waktu juga berlaku dalam game ini, dimana pemain akan merasakan perubahan awan dari terang menjadi gelap. 


3. Kelebihan dan Kekurangan


Kelebihan

  • Kualitas grafis yang sangat baik dikarenakan Frostbite Engine 3
  • Bisa berperan sebagai pembalap dan polisi, sehingga game ini tidak selalu monoton dengan pembalap saja
  • Cutscene yang dikurangi, agar memberi kenyamanan pada saat gameplay.
  • Personalisasikan mobil anda
  • Fitur online AllDrive


Kekurangan

  • Spesifikasi tinggi bagi pengguna PC, sehingga ini adalah tantangan tersendiri bagi PC Gamers.
  • Heat pursuit yang gak karuan ( Heat 10 ) sehingga jarang ada yang bisa evade.
  • Misi yang selalu diulang ( kalo bosen ya gak usah main, jangan dibanting )


Watch the trailer of Need for Speed: Rivals






source:
kotakgame.com
fikri-awwal.blogspot.co.id
rizkiekasatria.wordpress.com


Menikmati Keindahan Samudra di atas Awan dari Gunung Sumbing, Jawa Tengah, Indonesia