Masih ingat dengan pacman, game yang menemani generasi 90 an, perkenalan pertama admin dengan game ini terjadi bukan di sebuah konsol game, melainkan bonus game yang terdapat pada pemutar CD yang di beli oleh orang tua merk yahoya, di dalamnya terdapat dua buah game yaitu tetris dan juga pacman. Jadi kontrolnya menggunakan remote VCD, kebayangkan tahun 90 an admin sudah menggunakan teknologi kontroller game infra red, yang baru diterapkan di konsol generasi ke tujuh, sekitar tahun 2005 an.
Jadi tutorial kali ini kita akan belajar cara membuat game pacman, dan namanya juga belajar jadi kalo ga mirip - mirip maklumin aja. sebelum memulai tutorial download dulu resourcenya DI SINI.
Jika sudah di download seperti biasa buat project baru beri nama bebas sesuai selera, kemudian masukan semua sprite dan sound yang sudah didownload tadi, atur untuk semua spr_pacman dan spr_enemy dengan menekan tombol Modify Mask menjadi Full Image dan Rectangle.
Jika sudah di download seperti biasa buat project baru beri nama bebas sesuai selera, kemudian masukan semua sprite dan sound yang sudah didownload tadi, atur untuk semua spr_pacman dan spr_enemy dengan menekan tombol Modify Mask menjadi Full Image dan Rectangle.
setelah sprite dan sound sudah dibuat, sekarang akan membuat sebuah Script yang berfungsi untuk menggerakan ai/musuh pada game pacman ini, klik kanan folder Scripts, pilih Create Script, beri nama scr_direction lalu masukan perintah berikut :
kode scr_direction
.{
if (hspeed == 0)
{
if (random(3)<1 && place_free(x-3,y))
{ hspeed = -3; vspeed = 0;}
if (random(3)<1 && place_free(x+3,y))
{ hspeed = 3; vspeed = 0;}
}
else
{
if (random(3)<1 && place_free(x,y-3))
{ hspeed = 0; vspeed = -3;}
if (random(3)<1 && place_free(x,y+3))
{ hspeed = 0; vspeed = 3;}
}
}
if (hspeed == 0)
{
if (random(3)<1 && place_free(x-3,y))
{ hspeed = -3; vspeed = 0;}
if (random(3)<1 && place_free(x+3,y))
{ hspeed = 3; vspeed = 0;}
}
else
{
if (random(3)<1 && place_free(x,y-3))
{ hspeed = 0; vspeed = -3;}
if (random(3)<1 && place_free(x,y+3))
{ hspeed = 0; vspeed = 3;}
}
}
Kemudian setelah Script untuk ai jadi, kita buat objek, klik kanan folder Objects, pilih Create Object dan buat object sesuai dengan gambar di bawah kemudian masukan sprite ke masing - masing objek kecuali obj_control tidak perlu menggunakan sprite.
Untuk obj_pacman atur Depth menjadi -1, lalu buat Event seperti pada gambar dibawah, kemudian masukan perintah berikut kesetiap event :
--Create
wait = 0;
--Step
if(place_snapped(32,32))
{
if(keyboard_check(vk_left) && place_free(x-3,y))
{
motion_set(180,4);
sprite_index = spr_pacman_left;
image_speed = 0.8;
}
if(keyboard_check(vk_right) && place_free(x+3,y))
{
motion_set(0,4);
sprite_index = spr_pacman_right;
image_speed = 0.8;
}
if(keyboard_check(vk_up) && place_free(x,y-3))
{
motion_set(90,4);
sprite_index = spr_pacman_up;
image_speed = 0.8;
}
if(keyboard_check(vk_down) && place_free(x,y+3))
{
motion_set(270,4);
sprite_index = spr_pacman_bottom;
image_speed = 0.8;
}
if(keyboard_check(vk_nokey))
{
speed = 0;
image_speed = 0;
image_index = 0;
}
}
if (instance_exists(obj_point) = 0)
{
wait += delta_time;
if (wait >= 2 * 1000000)
{
room_goto_next();
}
speed = 0;
image_speed = 0;
}
--collision to obj_wall
if(place_snapped(32,32)) {speed=0;}
--collision to obj_point
with (other)
{
instance_destroy();
}
score += 1;
--collision to obj_enemy_red
speed = 0;
with (obj_enemy_red)
{
x=xstart;
y=ystart;
}
with (obj_enemy_weak)
{
x=xstart;
y=ystart;
}
with (self)
{
x=xstart;
y=ystart;
}
--collision to obj_enemy_weak
with (other)
{
x=xstart;
y=ystart;
instance_change(obj_enemy_red,0);
}
--collision to obj_spesial_item
with (other)
{
instance_destroy();
}
with (obj_enemy_red)
{
instance_change(obj_enemy_weak,0);
}
with (obj_enemy_weak)
{
alarm[0] = 200;
}
wait = 0;
--Step
if(place_snapped(32,32))
{
if(keyboard_check(vk_left) && place_free(x-3,y))
{
motion_set(180,4);
sprite_index = spr_pacman_left;
image_speed = 0.8;
}
if(keyboard_check(vk_right) && place_free(x+3,y))
{
motion_set(0,4);
sprite_index = spr_pacman_right;
image_speed = 0.8;
}
if(keyboard_check(vk_up) && place_free(x,y-3))
{
motion_set(90,4);
sprite_index = spr_pacman_up;
image_speed = 0.8;
}
if(keyboard_check(vk_down) && place_free(x,y+3))
{
motion_set(270,4);
sprite_index = spr_pacman_bottom;
image_speed = 0.8;
}
if(keyboard_check(vk_nokey))
{
speed = 0;
image_speed = 0;
image_index = 0;
}
}
if (instance_exists(obj_point) = 0)
{
wait += delta_time;
if (wait >= 2 * 1000000)
{
room_goto_next();
}
speed = 0;
image_speed = 0;
}
--collision to obj_wall
if(place_snapped(32,32)) {speed=0;}
--collision to obj_point
with (other)
{
instance_destroy();
}
score += 1;
--collision to obj_enemy_red
speed = 0;
with (obj_enemy_red)
{
x=xstart;
y=ystart;
}
with (obj_enemy_weak)
{
x=xstart;
y=ystart;
}
with (self)
{
x=xstart;
y=ystart;
}
--collision to obj_enemy_weak
with (other)
{
x=xstart;
y=ystart;
instance_change(obj_enemy_red,0);
}
--collision to obj_spesial_item
with (other)
{
instance_destroy();
}
with (obj_enemy_red)
{
instance_change(obj_enemy_weak,0);
}
with (obj_enemy_weak)
{
alarm[0] = 200;
}
--Create
audio_play_music(sn_opening,0);
--Draw
draw_text_ext(45,32,'SCORE :',-1,600)
draw_set_color(c_aqua)
{
draw_text(view_xview+96,view_yview+32," #"+string(score));
draw_set_color(c_white);
draw_set_halign(fa_center);
draw_set_valign(fa_bottom);
}
audio_play_music(sn_opening,0);
--Draw
draw_text_ext(45,32,'SCORE :',-1,600)
draw_set_color(c_aqua)
{
draw_text(view_xview+96,view_yview+32," #"+string(score));
draw_set_color(c_white);
draw_set_halign(fa_center);
draw_set_valign(fa_bottom);
}
Untuk obj_enemy_red atur posisi Depth menjadi -2, dan tambahkan event seperti gambar dibawah kemudian berikan perintah berikut di setiap eventnya.
--Create
image_index=random(4)
motion_set(choose(0,90,180,270),3)
--Step
if (place_snapped(32,32))
{
scr_direction();
}
--End Step
if(direction = 0)
{
image_index = 0;
}
if(direction = 180)
{
image_index = 1;
}
if(direction = 90)
{
image_index = 2;
}
if(direction = 270)
{
image_index = 3;
}
--Collision to obj_wall
hspeed = -hspeed
vspeed = -vspeed
scr_direction();
image_index=random(4)
motion_set(choose(0,90,180,270),3)
--Step
if (place_snapped(32,32))
{
scr_direction();
}
--End Step
if(direction = 0)
{
image_index = 0;
}
if(direction = 180)
{
image_index = 1;
}
if(direction = 90)
{
image_index = 2;
}
if(direction = 270)
{
image_index = 3;
}
--Collision to obj_wall
hspeed = -hspeed
vspeed = -vspeed
scr_direction();
Untuk obj_enemy_weak atur posisi Depth menjadi -2, dan tambahkan event seperti gambar dibawah kemudian berikan perintah berikut di setiap eventnya.
--Create
image_speed = 0.5;
image_index=random(4)
motion_set(choose(0,90,180,270),3)
--Alarm[0]
with (self)
{
instance_change(obj_enemy_red,0);
}
--Step
if (place_snapped(32,32))
{
scr_direction();
}
--Collision to bj_wall
hspeed = -hspeed
vspeed = -vspeed
scr_direction();
image_speed = 0.5;
image_index=random(4)
motion_set(choose(0,90,180,270),3)
--Alarm[0]
with (self)
{
instance_change(obj_enemy_red,0);
}
--Step
if (place_snapped(32,32))
{
scr_direction();
}
--Collision to bj_wall
hspeed = -hspeed
vspeed = -vspeed
scr_direction();
selesai deh, sekarang tinggal buat room nya kalo yang ini admin serahkan ke imajinasi agan sekalian buat ngerancang room nya udah taukan caranya klik kanan Folder Rooms pilih Create Room. pastikan jangan lupa menaruh obj_control untuk menampilakn display score.
Mantap Gan, Tutorial bermanfaat, dan juga tampilan blog yg elegan cuma tulisan font nya aja kurang menarik hehe
ReplyDelete