REMDEFLNG A-ZSprite& = _LOADIMAGE("GhostBlue1.bmp", 32)Video& = _NEWIMAGE(800, 600, 32)SCREEN Video&_PUTIMAGE (50, 199)-(750, 399), Sprite&, Video&LINE (50, 199)-(750, 399), _RGB32(255, 255, 0), BPAINT (10, 10), _RGB32(255, 255, 255)x = 10: y = 10: State = 1DO _LIMIT 100 _PUTIMAGE (50, 199)-(750, 399), Sprite&, Video& LINE (50, 199)-(750, 399), _RGB32(255, 255, 0), B SELECT CASE State CASE IS = 1 x = x + 1 IF x >= 750 THEN x = 750: State = 2 END IF _PUTIMAGE (x, y)-(x + 40, y + 40), Sprite&, Video&, (0, 0)-(199, 199) CASE IS = 2 y = y + 1 IF y >= 550 THEN y = 550: State = 3 END IF _PUTIMAGE (x, y)-(x + 40, y + 40), Sprite&, Video&, (200, 0)-(399, 199) CASE IS = 3 x = x - 1 IF x <= 10 THEN x = 10: State = 4 END IF _PUTIMAGE (x, y)-(x + 40, y + 40), Sprite&, Video&, (400, 0)-(599, 199) CASE IS = 4 y = y - 1 IF y <= 10 THEN y = 10: State = 1 END IF _PUTIMAGE (x, y)-(x + 40, y + 40), Sprite&, Video&, (600, 0)-(799, 199) END SELECT _DISPLAYLOOP UNTIL _KEYDOWN(27)SLEEPSYSTEM
REMDEFLNG A-ZSprites& = _LOADIMAGE("Pacmanss-2-40x40.bmp", 32)Video& = _NEWIMAGE(640, 480, 32)SCREEN Video&GPlace = 1: gx = 320: gy = 10: GCycle = 0PPlace = 1: px = 320: py = 100: PCycle = 0DO _LIMIT 30 GOSUB GMove GOSUB PMove CLS GCycle = GCycle + 1: IF GCycle = 3 THEN GCycle = 1 PCycle = PCycle + 1: IF PCycle >= 4 THEN PCycle = 1 'move ghost SELECT CASE GPlace CASE 1 '-----------------------------------------------------------------------------Face right IF GCycle = 1 THEN _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (82, 0)-(121, 39) ELSE _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (123, 0)-(162, 39) END IF CASE 2 '-----------------------------------------------------------------------------Face down IF GCycle = 1 THEN _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (246, 0)-(285, 39) ELSE _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (287, 0)-(326, 39) END IF CASE 3 '-----------------------------------------------------------------------------Face left IF GCycle = 1 THEN _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (0, 0)-(39, 39) ELSE _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (41, 0)-(80, 39) END IF CASE 4 '-----------------------------------------------------------------------------Face up IF GCycle = 1 THEN _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (164, 0)-(203, 39) ELSE _PUTIMAGE (gx, gy)-(gx + 39, gy + 39), Sprites&, Video&, (205, 0)-(244, 39) END IF END SELECT 'move pac man SELECT CASE PPlace CASE 1 IF PCycle = 1 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (164, 164)-(203, 203) IF PCycle = 2 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (205, 164)-(244, 203) IF PCycle = 3 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (246, 164)-(285, 203) CASE 2 IF PCycle = 1 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (164, 164)-(203, 203) IF PCycle = 2 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (205, 164)-(244, 203) IF PCycle = 3 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (246, 164)-(285, 203) CASE 3 IF PCycle = 1 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (203, 164)-(164, 203) IF PCycle = 2 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (244, 164)-(205, 203) IF PCycle = 3 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (285, 164)-(246, 203) CASE 4 IF PCycle = 1 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (203, 164)-(164, 203) IF PCycle = 2 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (244, 164)-(205, 203) IF PCycle = 3 THEN _PUTIMAGE (px, py)-(px + 39, py + 39), Sprites&, Video&, (285, 164)-(246, 203) END SELECT _DISPLAYLOOP UNTIL _KEYDOWN(27)SLEEPSYSTEMGMove:SELECT CASE GPlace CASE 1 gx = gx + 4 IF gx >= 590 THEN gx = 590: GPlace = 2 CASE 2 gy = gy + 4 IF gy >= 430 THEN gy = 430: GPlace = 3 CASE 3 gx = gx - 4 IF gx <= 10 THEN gx = 10: GPlace = 4 CASE 4 gy = gy - 4 IF gy <= 10 THEN gy = 10: GPlace = 1END SELECTRETURNPMove:SELECT CASE PPlace CASE 1 px = px + 4 IF px >= 540 THEN px = 540: PPlace = 2 CASE 2 py = py + 4 IF py >= 380 THEN py = 380: PPlace = 3 CASE 3 px = px - 4 IF px <= 100 THEN px = 100: PPlace = 4 CASE 4 py = py - 4 IF py <= 100 THEN py = 100: PPlace = 1END SELECTRETURN
REM Demo of Pac Map and PacMan movement.DEFLNG A-ZGraphics& = _LOADIMAGE("GMPacMan1.bmp", 32)SCREEN _NEWIMAGE(800, 600, 32) 'what we seeDIM SHARED mx, my, mbl, mbrDIM SHARED PacMap(19, 25)DIM SHARED Pacrow, Paccol, Pacsym, N, S, E, W, NN, SS, EE, WWPacsym = 10: Pacrow = 1: Paccol = 7: Pacframe = 1: PacDir = 2 'eastGOSUB FilldimGOSUB Placepac'NOTE row and column start at 0DO _LIMIT 15 CLS GOSUB Showmap GOSUB Movpac LOCATE 33, 1: PRINT Pacrow, Paccol, N, E, S, W LOCATE 34, 1: PRINT NN, EE, SS, WW Pacframe = Pacframe + 1 IF Pacframe >= 5 THEN Pacframe = 1 _DISPLAYLOOP UNTIL _KEYDOWN(27)SLEEPSCREEN 0SYSTEMMovpac:'make a backup of PAC row and columnOlDPacrow = Pacrow: OldPaccol = Paccol'we need to know what is above,below,to right and left for possible unblocked movement'if any of NSEW is a limit on the map make it invalid as -1N = Pacrow - 1IF N < 0 THEN N = -1S = Pacrow + 1IF S > 18 THEN S = -1E = Paccol + 1IF E > 24 THEN E = -1W = Paccol - 1IF W < 0 THEN W = -1'now if NSEW are valid see whats in those "cells"IF N <> -1 THEN NN = PacMap(N, Paccol)IF S <> -1 THEN SS = PacMap(S, Paccol)IF E <> -1 THEN EE = PacMap(Pacrow, E)IF W <> -1 THEN WW = PacMap(Pacrow, W)IF _KEYDOWN(20480) THEN 'down arrow key IF SS <> 176 THEN 'test for wall IF S <> -1 THEN 'test for map limit Pacrow = Pacrow + 1 PacDir = 3 'south END IF END IFEND IFIF _KEYDOWN(18432) THEN 'up arrow key IF NN <> 176 THEN IF N <> -1 THEN Pacrow = Pacrow - 1 PacDir = 1 'north END IF END IFEND IFIF _KEYDOWN(19200) THEN 'left arrow key IF WW <> 176 THEN IF W <> -1 THEN Paccol = Paccol - 1 PacDir = 4 'west END IF END IFEND IFIF _KEYDOWN(19712) THEN 'right arrow key IF EE <> 176 THEN IF E <> -1 THEN Paccol = Paccol + 1 PacDir = 2 'east END IF END IFEND IFIF Pacrow <> OlDPacrow OR Paccol <> OldPaccol THEN 'remove pac man from old position z = PacMap(OlDPacrow, OldPaccol) ''extract old pac man z = z - Pacsym ''suntract pacman symbol from it (42 - 10 = 32) PacMap(OlDPacrow, OldPaccol) = z ''place z back inside map 'add new pac to new position z = PacMap(Pacrow, Paccol) ''extract whats at this new row and column (should be 32) z = z + Pacsym ''add pacman symbol to it (32 +10 = 42) PacMap(Pacrow, Paccol) = z ''place in back inside mapEND IFRETURNShowmap:FOR c = 0 TO 18 FOR R = 0 TO 24 z = PacMap(c, R) SELECT CASE z CASE 32 CASE 42 SELECT CASE PacDir CASE 1 'N SELECT CASE Pacframe CASE 1 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (164, 285)-(203, 246) CASE 2 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (205, 285)-(244, 246) CASE 3 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (246, 285)-(285, 246) CASE 4 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (287, 285)-(326, 246) END SELECT CASE 2 'E SELECT CASE Pacframe CASE 1 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (0, 246)-(39, 285) CASE 2 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (41, 246)-(80, 285) CASE 3 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (82, 246)-(121, 285) CASE 4 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (123, 246)-(162, 285) END SELECT CASE 3 'S SELECT CASE Pacframe CASE 1 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (164, 246)-(203, 285) CASE 2 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (205, 246)-(244, 285) CASE 3 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (246, 246)-(285, 285) CASE 4 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (287, 246)-(326, 285) END SELECT CASE 4 'W SELECT CASE Pacframe CASE 1 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (39, 246)-(0, 285) CASE 2 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (80, 246)-(41, 285) CASE 3 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (121, 246)-(82, 285) CASE 4 _PUTIMAGE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), Graphics&, 0, (162, 246)-(123, 285) END SELECT END SELECT CASE 176 LINE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), _RGB32(0, 0, 255), BF END SELECT NEXT RNEXT cRETURNFilldim:FOR c = 0 TO 18 FOR R = 0 TO 24 READ z PacMap(c, R) = z 'PacMap(r, c) = Z IF z = 176 THEN LINE (R * 30, c * 30)-((R * 30) + 29, (c * 30) + 29), _RGB32(0, 0, 255), BF END IF NEXT RNEXT cRETURNPlacepac:'extract whats at this row and column (should be 32)z = PacMap(Pacrow, Paccol)'add pacman symbol to it (32 +10 = 42)z = z + Pacsym'place in back inside mapPacMap(Pacrow, Paccol) = zRETURN'-------------------------- MAP --------------------------------------DATA 176,176,176,176,176,176,176,176,176,176,176,176,32,176,176,176,176,176,176,176,176,176,176,176,176DATA 176,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,176DATA 176,32,176,176,176,176,176,176,176,176,176,32,176,32,176,176,176,176,176,176,176,176,176,32,176DATA 176,32,176,32,32,32,32,32,32,32,32,32,176,32,176,32,32,32,32,32,32,32,176,32,176DATA 176,32,176,32,176,176,176,176,32,176,176,32,176,32,176,32,176,176,176,176,176,32,176,32,176DATA 176,32,176,32,176,32,32,32,32,32,176,32,176,32,176,32,32,32,32,32,32,32,176,32,176DATA 176,32,176,32,176,32,176,176,32,176,176,32,176,32,176,32,176,32,176,32,176,32,32,32,176DATA 176,32,32,32,176,32,32,32,32,32,32,32,32,32,32,32,176,32,176,32,176,32,176,32,176DATA 176,32,176,32,176,32,176,176,176,32,176,176,32,176,176,32,32,32,176,32,32,32,176,32,176DATA 32,32,176,32,32,32,32,32,32,32,176,32,32,32,176,32,176,176,176,176,176,32,176,32,32DATA 176,32,176,32,176,32,176,176,176,32,176,176,176,176,176,32,32,32,176,32,32,32,176,32,176DATA 176,32,32,32,176,32,32,32,32,32,32,32,32,32,32,32,176,32,176,32,176,32,176,32,176DATA 176,32,176,32,176,32,176,176,32,176,176,32,176,32,176,32,176,32,176,32,176,32,32,32,176DATA 176,32,176,32,176,32,32,32,32,32,176,32,176,32,176,32,32,32,32,32,32,32,176,32,176DATA 176,32,176,32,176,176,176,176,32,176,176,32,176,32,176,32,176,176,176,176,176,32,176,32,176DATA 176,32,176,32,32,32,32,32,32,32,32,32,176,32,176,32,32,32,32,32,32,32,176,32,176DATA 176,32,176,176,176,176,176,176,176,176,176,32,176,32,176,176,176,176,176,176,176,176,176,32,176DATA 176,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,176DATA 176,176,176,176,176,176,176,176,176,176,176,176,32,176,176,176,176,176,176,176,176,176,176,176,176