AI3
Pacman
six objects: objPacman, objEvil, objBlock (for the walls, make sure to set property: solid), objPellet, objScoreDisplay (no sprite), objYouWin (image saying "magnifique")
^^the L, R, D & U sprites for Pacman have 2 subimages, one with mouth closed, the other open
objPacman Create:
image_speed = 0.25; myScore = 0;
objPacman Step:
if (keyboard_check(vk_left) and place_snapped(32, 32)){
sprite_index = sprPacL;
motion_set(180,4);
}
if (keyboard_check(vk_right) and place_snapped(32, 32)){
sprite_index = sprPacR;
motion_set(0,4);
}
if (keyboard_check(vk_up) and place_snapped(32, 32)){
sprite_index = sprPacU;
motion_set(90,4);
}
if (keyboard_check(vk_down) and place_snapped(32, 32)){
sprite_index = sprPacD;
motion_set(270,4);
}
if (keyboard_check(vk_nokey) and place_snapped(32, 32)){
sprite_index = sprPac;
motion_set(0,0);
}
if(place_meeting(x + hspeed, y + vspeed, objBlock)){
move_bounce_solid(true);
sprite_index = sprPac;
motion_set(0,0);
move_snap(32,32);
}
objPellet Collision (with objPacman):
objPacman.myScore = objPacman.myScore + 1;
instance_destroy();
if(instance_number(objPellet) == 0){
instance_create(0,0,objYouWin);
}
objScoreDisplay Create:
total_pellets = instance_number(objPellet);
objScoreDisplay Draw:
draw_set_color(c_black); draw_text(x,y,string(objPacman.myScore) + " / " + string(total_pellets) + "collected, " + string(instance_number(objPellet)) + " remaining")
objEvil Step:
if (
//aggro within a set distance:
(distance_to_object(objPacman)<=100) and
//check whether any objects collide with a given line, and return the 'id' of the object if there is:
(collision_line(x,y,objPacman.x,objPacman.y,objBlock,false,true) == noone) and
//^^ so my ghost cant see pacman through walls..
//stick to grid based movement:
(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);
}
//bounce off solid walls:
if(place_meeting(x + hspeed, y + vspeed, objBlock)){
move_bounce_solid(true);
}

