06-05-2003, 12:32 AM
When I run this in QB 4.5 with DQB 1.71, it works fine. The images show up fine. After compiled, when I run the .exe file, it shows the breakable (nonsolid) bricks as all fucked up, and across the screen all weird! Anyone know what I did wrong?
Code:
DECLARE SUB DrawSolidBricks (brick() AS INTEGER, floor() AS INTEGER)
DECLARE SUB DrawBricks (brick() AS INTEGER)
'$INCLUDE: 'dqb2\directqb.bi'
CONST MANRIGHT = -1, MANDOWN = 0, MANLEFT = 1, MANUP = 2
CONST layerBG = 1, layerItems = 2, layerCombo = 3, layerBOOM = 4
DIM SHARED adjX%, adjY%
adjX% = 24
adjY% = 12
RANDOMIZE TIMER
CLS
SLEEP 3
TYPE playertype
x AS INTEGER
y AS INTEGER
dir AS INTEGER
walking AS INTEGER
END TYPE
TYPE bombtype
x AS INTEGER
y AS INTEGER
dir AS INTEGER
timeleft AS SINGLE
END TYPE
TYPE itemtype
x AS INTEGER
y AS INTEGER
addseg AS INTEGER
addoff AS INTEGER
END TYPE
TYPE bricktype
x AS INTEGER
y AS INTEGER
addseg AS INTEGER
addoff AS INTEGER
END TYPE
IF DQBinit(4, 0, 256) THEN DQBclose: PRINT DQBerror$: END
DQBinstallKeyboard
DQBinitVGA
DQBpaint layerBG, 0, 0, 198
DQBsetCollideMethod 1
DIM man AS playertype
DIM SHARED items(0) AS itemtype
DIM SHARED numitems%
DIM SHARED speed%
DIM player(2322) AS INTEGER
DIM solidbrick(258) AS INTEGER
DIM brick(258) AS INTEGER
DIM bomb(258) AS INTEGER
DIM floor(258) AS INTEGER
DEF SEG = VARSEG(player(0))
BLOAD "images/bomber.put", VARPTR(player(0))
DEF SEG = VARSEG(solidbrick(0))
BLOAD "images/solid.put", VARPTR(solidbrick(0))
DEF SEG = VARSEG(brick(0))
BLOAD "images/brick.put", VARPTR(solidbrick(0))
DEF SEG = VARSEG(bomb(0))
BLOAD "images/bomb.put", VARPTR(spikes(0))
DEF SEG = VARSEG(floor(0))
BLOAD "images/floor.put", VARPTR(solidbrick(0))
DEF SEG
numitems% = 1
speed% = 1
DrawSolidBricks solidbrick(), floor()
DrawBricks brick()
items(0).x = 16 * 2
items(0).y = 16 * 7
items(0).addseg = VARSEG(spikes(0))
items(0).addoff = VARPTR(spikes(0))
man.dir = MANRIGHT
man.x = 16 + adjX%
man.y = 16 + adjY%
t! = TIMER
DO
WAIT &H3DA, 8
DQBcopyLayer layerBG, layerCombo
DQBcopyTransLayer layerItems, layerCombo
man.walking = 0
IF DQBkey(1) THEN EXIT DO
IF DQBkey(75) AND man.x > 0 THEN
man.x = man.x - speed%
man.dir = MANLEFT
man.walking = 1
END IF
IF DQBkey(77) AND man.x < 303 THEN
man.x = man.x + speed%
man.dir = MANRIGHT
man.walking = 1
END IF
IF DQBkey(72) AND man.y < 303 THEN
man.y = man.y - speed%
man.dir = MANUP
man.walking = 1
END IF
IF DQBkey(80) AND man.y > 0 THEN
man.y = man.y + speed%
man.dir = MANDOWN
man.walking = 1
END IF
WAIT &H3DA, 8, 8
DQBmPut layerCombo, man.x, man.y, VARSEG(player(130 * (ABS(man.dir) * 3 + walkingstate%))), VARPTR(player(130 * (ABS(man.dir) * 3 + walkingstate%))), ABS(man.dir = MANRIGHT)
DQBprint layerCombo, "So far, you can't do shit. But it's a", 0, 0, 2
DQBprint layerCombo, "good engine so far, I think =)", 0, 190, 2
DQBcopyLayer layerCombo, VIDEO
IF man.walking = 1 THEN
IF TIMER - t! >= .25 THEN
IF walkingstate% = 1 THEN
walkingstate% = 2
ELSE
walkingstate% = 1
END IF
t! = TIMER
END IF
ELSE
walkingstate% = 0
END IF
LOOP
DQBremoveKeyboard
DQBclose
REM $DYNAMIC
SUB DrawBricks (brick() AS INTEGER)
FOR y = 2 TO 8
FOR x = 2 TO 14
doit = INT(RND * 8)
IF y AND 1 THEN
IF doit THEN DQBput layerItems, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
ELSEIF x AND 1 THEN
IF doit THEN DQBput layerItems, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
END IF
NEXT x
NEXT y
FOR y = 3 TO 7
doit = INT(RND * 8)
IF doit THEN DQBput layerItems, 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
IF doit THEN DQBput layerItems, 15 * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
NEXT y
FOR x = 3 TO 13
doit = INT(RND * 8)
IF doit THEN DQBput layerItems, x * 16 + adjX%, (1 * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
IF doit THEN DQBput layerItems, x * 16 + adjX%, (9 * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
NEXT x
END SUB
SUB DrawSolidBricks (brick() AS INTEGER, floor() AS INTEGER)
FOR i = 0 TO 10
DQBput layerBG, 256 + adjX%, (i * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
DQBput layerBG, 0 + adjX%, (i * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
NEXT i
FOR i = 1 TO 15
DQBput layerBG, i * 16 + adjX%, adjY%, VARSEG(brick(0)), VARPTR(brick(0))
DQBput layerBG, i * 16 + adjX%, 160 + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
NEXT i
FOR y = 2 TO 8 STEP 2
FOR x = 2 TO 15 STEP 2
DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(brick(0)), VARPTR(brick(0))
NEXT x
NEXT y
FOR y = 1 TO 9 STEP 2
FOR x = 1 TO 15 STEP 1
DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
NEXT x
NEXT y
FOR y = 2 TO 8 STEP 2
FOR x = 1 TO 15 STEP 2
DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
DQBput layerBG, x * 16 + adjX%, (y * 16) + adjY%, VARSEG(floor(0)), VARPTR(floor(0))
NEXT x
NEXT y
END SUB
earn.