pacman | gml
objPacman Create
move_speed = 4; image_speed = 0.25; points = 0; total_pellets = instance_number(objPellet);
objPacman Step
//------------------- MOVEMENT: if (keyboard_check(vk_left) and place_snapped(32, 32)){ sprite_index = sprLeft; motion_set(180,4); } if (keyboard_check(vk_right) and place_snapped(32, 32)){ sprite_index = sprRight; motion_set(0,4); } if (keyboard_check(vk_up) and place_snapped(32, 32)){ sprite_index = sprUp; motion_set(90,4); } if (keyboard_check(vk_down) and place_snapped(32, 32)){ sprite_index = sprDown; motion_set(270,4); } if (keyboard_check(vk_nokey) and place_snapped(32, 32)){ sprite_index = sprStill; motion_set(0,0); } //------------------- BOUNCE OFF WALLS: if(place_meeting(x + hspeed, y + vspeed, objWall)){ x = xprevious; y = yprevious; sprite_index = sprStill; motion_set(0,0); move_snap(32,32); } //------------------- SCORING: var pelletID = instance_place(x,y,objPellet); if pelletID != noone { points += 1; instance_destroy(pelletID); } // if points == total_pellets would have also worked: if (instance_number(objPellet) == 0){ game_restart(); }
objPacman Draw GUI
draw_set_font(font0); draw_set_color(c_fuchsia); draw_text(5,5,"Collected " + string(points)); draw_text(5,25,"Remaining " + string(total_pellets-points));
objGhost Step
if ( //i can only see Pacman within 100px: (distance_to_object(objPacman) <= 100) and //i can't see Pacman behind a wall: (collision_line(x,y,objPacman.x,objPacman.y,objWall,false,true) == noone) and //if i'm on the "grid" and not in the middle of moving: (place_snapped(32, 32)) ){ //if the above conditions are all true, do this: chaseDirection = point_direction(x,y,objPacman.x,objPacman.y); if(chaseDirection > 315) or (chaseDirection < 45) motion_set(0, 2); if(chaseDirection > 45) and (chaseDirection < 135) motion_set(90, 2); if(chaseDirection > 135) and (chaseDirection < 225) motion_set(180, 2); if(chaseDirection > 225) and (chaseDirection < 315) motion_set(270, 2); } else{ if place_snapped(32, 32){ motion_set(0,0); } } //bounce off walls: if(place_meeting(x + hspeed, y + vspeed, objWall)){ move_bounce_all(true); }