-

viernes, 2 de enero de 2015

TUTORIAL 4,crear un juego tipo PAC-MAN

Como empezar a crear un juego tipo "pac-man" .



Creamos los "SPRITES",que van ha ser 11 y le damos sus correspondientes nombres:

sprite_pac_left
sprite_pac_right
sprite_pac_up
sprite_pac_down
sprite_wall
sprite_punto_basico
sprita_punto_especial
sprite_live
sprite_bonus
sprite_ghost
sprite_pac_die



Ahora vamos a crear los objetos que seràn 7 y los denominamos de la siguiente forma:

object_pac
object_wall
object_punto
object_punto_especial
object_bonus
object_ghost
object_control



Bueno vamos al tema empezaremos con los dos objetos màs complejos que son el objetct_pac y el object_ghost al objetct_pac en el evento "create" insertamos este còdigo:

sprite_index=sprite_pac_right;
hspeed=0;
vspeed=0;
estado=1;
alarm[0]=50;

tendrà estas cualidades: 



el còdigo en el evento "step" serà asì:

if keyboard_check_direct(vk_right) then 
{
if not place_meeting(x+4,y,object_wall) then 
{sprite_index=sprite_pac_right;
vspeed=0;
hspeed=4;}
}
if keyboard_check_direct(vk_left) then 
{
if not place_meeting(x-4,y,object_wall) then 
{sprite_index=sprite_pac_left;
vspeed=0;
hspeed=-4;}
}
if keyboard_check_direct(vk_up) then 
{
if not place_meeting(x,y-4,object_wall) then 
{sprite_index=sprite_pac_up;
vspeed=-4;
hspeed=0;}
}
if keyboard_check_direct(vk_down) then 
{
if not place_meeting(x,y+4,object_wall) then 
{sprite_index=sprite_pac_down;
vspeed=4;
hspeed=0;}
}
en el evento "draw" insertamos este còdigo:

draw_set_alpha(1);
if estado=1 then draw_set_alpha(0.2+random(0.3));
draw_sprite(sprite_index,-1,x,y);
draw_set_alpha(1);

en el evento "animation end" insertamos este otro:

if estado=2 then 
{image_speed=0;image_index=4;}

el evento "alarm 0" unicamente esto:
estado=0;

y en el evento "alarm 1" un còdigo seguido de un "jump to start position".

sprite_index=sprite_pac_right;
image_speed=1;
hspeed=0;
vspeed=0;
estado=1;
alarm[0]=50;

en el evento "colision"  con el object_wall este còdigo:

hspeed=0;
vspeed=0;


y en el evento "colision"  con el object_ghost este otro:

if other.bulnerable>0 then exit
if estado>0 then exit
sprite_index=sprite_pac_die;
image_speed=0.2;
hspeed=0;
vspeed=0;
estado=2;
lives+=-1;
alarm[1]=20;

y hemos acabado con el object_pac ahora vamos con el object_ghost.







en el evento "create" le damos al objeto 4 posibles direciones y le añadimos este còdigo:

bulnerable=0;image_speed=0;image_index=0;

en el evento "alarm 0" le añadimos este otro seguido de un "jump to start position".

bulnerable=0

en el evento "step" insertamos lo siguiente:


if bulnerable>0 then bulnerable+=-1
  if (hspeed == 0)
  {
    if (random(3)<1 && place_free(x-4,y))
      { hspeed = -4; vspeed = 0;}
    if (random(3)<1 && place_free(x+4,y))
      { hspeed =  4; vspeed = 0;}
  }
  else
  {
    if (random(3)<1 && place_free(x,y-4))
      { hspeed = 0; vspeed = -4;}
    if (random(3)<1 && place_free(x,y+4))
      { hspeed = 0; vspeed =  4;}
  } 
if direction=0 then image_index=0;
if direction=180 then image_index=1;
if direction=90 then image_index=2;
if direction=270 then image_index=3;

en el evento "colision" con el object_pac este còdigo:

if bulnerable>0 then {x=-1000;alarm[0]=100;score+=+100;hspeed=0;vspeed=0;}


y en el evento "colision" con el object_wall estas cualidades:


en el evento "draw" este còdigo:

draw_set_alpha(1);
if bulnerable>0 then draw_set_alpha(0.2+random(0.3));
draw_sprite(sprite_ghost,image_index,x,y);
draw_set_alpha(1);


El object_wall serà unicamente asì,le atribuimos la cualidad de sòlido.



El object_punto tendrà unicamente un evento de "colisiòn" con el object_pac donde añadiremos lo siguiente:

score+=+10;
instance_destroy();

y el object_punto_especial serà parecido lo emparentamos con object_punto y en el evento de "colisiòn" con el object_pac hacemos que la direciòn del object_ghost se revierta.



y su còdigo serà este:

score+=+10;
if instance_exists(object_ghost) then object_ghost.bulnerable=200;
instance_destroy();






el object_bonus serà asì:



en el evento "alarm 0" esto:

visible=true;

y en el evento "alarm 1" eso otro:

object_control.alarm[0]=100+random(100);
instance_destroy();


en el evento "colisiòn" con object_pac este còdigo:

score+=+500;
object_control.alarm[0]=100+random(100);
instance_destroy();

y en el evento "colisiòn" con object_wall este otro:


instance_create(random(room_width),random(room_height),object_bonus);
instance_destroy();



ahora vamos con el ùltimo objeto denominado object_control,bièn en el evento "create" añadimos esto:

score=0;
lives=3;
global.nivel=1;
alarm[0]=100;

en el evento "alarm 0" esto:

instance_create(random(room_width),random(room_height),object_bonus);

y en el evento "step" esto:

if not instance_exists(object_punto) then game_end();

ahora en el evento "draw" dibujamos en la pantalla el nùmero de vidas y demàs valores del juego.




draw_set_font(font0);
draw_set_colour(c_yellow);
draw_text(140,560,score);
draw_text(15,560,'score x');
draw_text(550,5,global.nivel);
draw_text(425,5,'stage x');



Nuestra "room" tiene unas dimensiones de 608x608 y un "grid" de 8x8 y ya tenemos la estructura elemental de nuestro juego.






No hay comentarios:

Publicar un comentario