08-25-2003, 06:41 AM
Not really a challenge, but it could be if you wanted to... I just wantd to show Agamemnus how I made an animated map possible with one single array... and I wanna see what he did too...
Code:
DECLARE SUB DrawMap ()
DECLARE SUB ExitError (msg$)
DECLARE SUB Do.Init ()
DECLARE SUB Do.Main ()
DECLARE SUB Do.End ()
'$INCLUDE: 'ugl\inc\ugl.bi'
'$INCLUDE: 'ugl\inc\kbd.bi'
CONST cRes = UGL.8BIT, xRes = 320, yRes = 200
CONST totalNumImages = -2, currentImage = -1, maxImages = 16
CONST mapX% = 20, mapY% = 12
DIM SHARED video AS LONG, buffer AS LONG, keys AS TKBD
DIM SHARED images(0 TO (maxImages - 1), -2 TO 5) AS LONG
DIM SHARED mapitem(1 TO mapX%, 1 TO mapY%) AS INTEGER
ImageData:
DATA 1,1,1,2,2,2,2,6,2,2,2,2,1,1,1,1
MapData:
DATA 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12
DATA 12,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,12
DATA 12,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12
DATA 12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,12
DATA 12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12
DATA 12,00,12,12,12,00,00,00,03,04,04,04,04,05,00,00,00,00,00,12
DATA 12,00,12,12,12,00,00,00,06,07,07,07,07,08,00,00,00,00,00,12
DATA 12,00,12,12,12,00,00,00,06,07,07,07,07,08,00,00,02,00,00,12
DATA 12,00,13,14,15,00,00,00,09,10,10,10,10,11,00,00,00,00,00,12
DATA 12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12
DATA 12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12
DATA 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12
Do.Init
Do.Main
Do.End
SUB Do.End
kbdEnd
uglRestore
uglEnd
SCREEN 0
CLS
SYSTEM
END SUB
SUB Do.Init
IF NOT uglInit THEN ExitError "Can't Init UGL"
video = uglSetVideoDC(cRes, xRes, yRes, 1)
buffer = uglNew(UGL.MEM, cRes, xRes, yRes)
IF NOT uglPutBMP(buffer, 0, 0, "newtest.bmp") THEN ExitError "Can't load images"
kbdInit keys
RESTORE ImageData
FOR allImages% = 0 TO (maxImages - 1)
READ numFrames%
images(allImages%, totalNumImages) = numFrames%
FOR i% = 0 TO numFrames% - 1
images(allImages%, i%) = uglNew(UGL.EMS, cRes, 16, 16)
uglGet buffer, allImages% * 16, i% * 16, images(allImages%, i%)
NEXT i%
NEXT allImages%
RESTORE MapData
FOR y% = 1 TO mapY%
FOR x% = 1 TO mapX%
READ mapitem(x%, y%)
NEXT x%
NEXT y%
uglClear buffer, 0
END SUB
SUB Do.Main
DO
IF keys.esc THEN EXIT SUB
DrawMap
uglPut video, 0, 0, buffer
LOOP
END SUB
SUB DrawMap
STATIC timecheck AS SINGLE
IF timecheck < TIMER THEN
timecheck = TIMER + .1
FOR i% = 0 TO (maxImages - 1)
imax% = images(i%, totalNumImages)
IF imax% > 0 THEN images(i%, currentImage) = (images(i%, currentImage) + 1) MOD imax%
NEXT i%
FOR y% = 1 TO mapY%
FOR x% = 1 TO mapX%
uglPut buffer, (x% - 1) * 16, (y% - 1) * 16, images(mapitem(x%, y%), images(mapitem(x%, y%), currentImage))
NEXT x%
NEXT y%
END IF
END SUB
SUB ExitError (msg$)
kbdEnd
uglRestore
uglEnd
SCREEN 0
CLS
PRINT msg$
SYSTEM
END SUB
earn.