Very slow/very basic 2D sprite basced pacman clone. by Chesh11th Sep 2003 9:38
|
---|
Summary *Very* basic pacman clone, poor frame rate. Description This is my first attempt at game creation with DarkBASIC. It's entirely sprite based and uses the most basic of commands. The maze is made from a tiled set of sprites. Turning the right angle corners doesn't work exactly like pacman (because the collision is based on the sprite and pacman is round you can get caught on corners!) The ghost moves in random directions and doesn't obey the collision of the maze.. it wouldn't make a great pacman game either because I drew the sprites too big to start with :) Any recommendations on how to improve/where I should go next (especially if anyone can tell me anything about how to use sprites better to improve the frame rate) would be greatly appreciated!! Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com `pacman mess-about code `To do list: `1. Improve frame rate! `2. Make ghost obey maze collision `3. Make pacman's collision less fiddly when turning corners `4. Power pills! `5. Make pacman animate while holding down directional key in directions: l,u,d (image frame is always reset!) `6. Second ghost `sprites 1 - 16 are currently the four frames of animation in each of the four directions pacman can face `sprites 17 - 20 are currently the four frames of the pink ghost `sprites 21 - 24 are the four frames of the blue ghost (currently unused) `sprites 25 and 26 are the two frames when the ghosts are scared (currently unused) `sprite 27 is the pill, 28 is the power pill (currently unused) `sprites 29 - 36 are the maze pieces (piece 35 is currently unused) `load sprite bank bitmap into bank 1 LOAD BITMAP "pacman2.bmp",1 HIDE MOUSE `cut invidual frames from bitmap, cuts 16 frames in total for pacman `4 for pink, 4 for blue, 2 frames for the scared flashing ghost, 2 for each type of pill FOR y=0 to 6 FOR x=0 TO 3 GET IMAGE 1+x+(y*4),(x*64),(y*64),(x*64)+64,(y*64)+64 NEXT x NEXT y `cuts 8 individual frames for maze FOR y=0 to 7 GET IMAGE y+29,256,(y*64),256+64,(y*64)+64 NEXT y `now that all the individual frames are stored in memory we can delete the bitmap DELETE BITMAP 1 `these variables are used to set pacman's starting position and starting anim image xpos=64 ypos=352 image=1 `this one determines pacman's direction (1=r/2=l/3=u/4=d) pacd=1 `these variables are used to set pinky's starting position and starting anim image p_xpos = 320 p_ypos = 176 p_image = 17 `determines pinky's direction pinkyd = 4 `counts how many units pinky has moved before thinking about changing direction pinkysteps = 0 `value used for when pinky actually thinks about changing direction (increase to travel in straight line longer) pinkychange = 40 `manual sync SYNC ON SYNC RATE 30 `build the maze (REMEMBER - use an array to do this eventually!!), all maze sprites >2 and <41 `1 sprite 3,0,32,29 : sprite 4,64,32,34 : sprite 5,128,32,34 : sprite 6,192,32,34 : sprite 7,256,32,31 sprite 8,320,32,29 : sprite 9,384,32,34 : sprite 10,448,32,34 : sprite 11,512,32,34 : sprite 12,576,32,31 `2 sprite 13,0,96,33 : sprite 14,256,96,30 : sprite 15,320,96,32 : sprite 16,576,96,33 `3 sprite 17,0,160,32 : sprite 18,128,160,36 : sprite 19,448,160,36 : sprite 20,576,160,30 `4 sprite 21,256,224,36 : sprite 22,320,224,36 `5 sprite 23,0,288,31 : sprite 24,128,288,36 : sprite 25,448,288,36 : sprite 26,576,288,29 `6 sprite 27,0,352,33 : sprite 28,256,352,29 : sprite 29,320,352,31 : sprite 30,576,352,33 `7 sprite 31,0,416,30 : sprite 32,64,416,34 : sprite 33,128,416,34 : sprite 34,192,416,34 : sprite 35,256,416,32 sprite 36,320,416,30 : sprite 37,384,416,34 : sprite 38,448,416,34 : sprite 39,512,416,34 : sprite 40,576,416,32 `place the pills (REMEMBER - use an array to do this eventually!!), all pill sprites = >40 and <72 `1 sprite 41,64,96,27 : sprite 42,128,96,27 : sprite 43,192,96,27 : sprite 44,384,96,27 : sprite 45,448,96,27 sprite 46,512,96,27 `2 sprite 47,64,160,27 : sprite 48,192,160,27 : sprite 49,256,160,27 : sprite 50,320,160,27 : sprite 51,384,160,27 sprite 52,512,160,27 `3 sprite 53,0,224,27 : sprite 54,64,224,27 : sprite 55,128,224,27 : sprite 56,192,224,27 : sprite 57,384,224,27 sprite 58,448,224,27 : sprite 59,512,224,27 : sprite 60,576,224,27 `4 sprite 61,64,288,27 : sprite 62,192,288,27 : sprite 63,256,288,27 : sprite 64,320,288,27 : sprite 65,384,288,27 sprite 66,512,288,27 `5 sprite 67,128,352,27 : sprite 68,192,352,27 : sprite 69,384,352,27 : sprite 70,448,352,27 : sprite 71,512,352,27 ` place pac sprite 1,xpos,ypos,image `main loop DO if rightkey()=1 then pacd=1 if leftkey()=1 then pacd=2 : image = 5 if upkey()=1 then pacd=3 : image = 9 if downkey()=1 then pacd=4 : image = 13 old_xpos = xpos old_ypos = ypos if pacd = 1 then gosub moveright if pacd = 2 then gosub moveleft if pacd = 3 then gosub moveup if pacd = 4 then gosub movedown sprite 1,xpos,ypos,image p_collide=SPRITE COLLISION(1,0) if p_collide>2 AND p_collide<41 xpos = old_xpos ypos = old_ypos sprite 1,xpos,ypos,image endif if p_collide>40 delete sprite p_collide endif gosub update_pinky sprite 2,p_xpos,p_ypos,p_image IF SPRITE COLLISION(1,2)=1 THEN gosub resetpac SYNC LOOP update_pinky: if pinkyd = 1 p_xpos = p_xpos + 6 if p_xpos>640 then p_xpos = -64 p_image = 18 endif if pinkyd = 2 p_xpos = p_xpos - 6 if p_xpos<-64 then p_xpos = 640 p_image = 17 endif if pinkyd = 3 p_ypos = p_ypos - 6 if p_ypos<-64 then p_ypos = 480 p_image = 19 endif if pinkyd = 4 p_ypos = p_ypos + 6 if p_ypos>480 then p_ypos = -64 p_image = 20 endif pinkysteps = pinkysteps + 1 if pinkysteps = pinkychange pinkyd = RND(4) if pinkyd = 0 then pinkyd = 1 pinkysteps = 0 endif return moveright: xpos=xpos+4 IF xpos>640 THEN xpos=-64 image=image+1 IF image>4 THEN image=1 return moveleft: xpos=xpos-4 IF xpos<-64 THEN xpos=640 image=image+1 IF image>8 THEN image=5 return moveup: ypos=ypos-4 IF ypos<-64 THEN ypos=480 image=image+1 IF image>12 THEN image=9 return movedown: ypos=ypos+4 IF ypos>480 THEN ypos=-64 image=image+1 IF image>16 THEN image=13 return resetpac: xpos=64 ypos=352 image=1 pacd = 1 return |