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); }