SetVirtualResolution(1024, 768)
speed = 5000
Dim m$[768]
LoadImage(1, "bTank.png")
CreateSprite(1, 1): SetSpritePosition(1, 40, 50): SetSpriteShape(1, 3)
LoadImage(2, "wall.png")
SetPhysicsDebugOn()
SetSpritePhysicsOn( 1, 2 )
SetPhysicsGravity( 0, 0 )
`SetSpritePhysicsCanRotate(1, 0)
SetSpritePhysicsRestitution(1, 0)
SetSpritePhysicsFriction(1, 100)
SetSpritePhysicsDamping(1, 1)
Gosub level1
Gosub create_level
do
Gosub moveTank
SetSpritePhysicsAngularDamping(1, 15)
if getrawkeypressed(27) then end
sync()
loop
moveTank:
if getrawkeypressed(38) ` Up
SetSpritePhysicsImpulse(1, GetSpriteX(1), GetSpriteY(1), 0, -speed)
endif
if getrawkeypressed(40) ` Down
SetSpritePhysicsImpulse(1, GetSpriteX(1), GetSpriteY(1), 0, speed)
endif
if getrawkeypressed(37) ` Left
SetSpritePhysicsAngularVelocity(1, .01)
SetSpritePhysicsAngularImpulse(1, -speed)
`SetSpritePhysicsImpulse(1, GetSpriteX(1), GetSpriteY(1), -speed, 0)
endif
if getrawkeypressed(39) ` Right
SetSpritePhysicsImpulse(1, GetSpriteX(1), GetSpriteY(1), speed, 0)
endif
Return
create_level:
` Reads Map data from m$[] and builds the level
wx = 0: wy = 0: loc = 0: wSpr = 999
for row = 1 to 24
for col = 1 to 32
if mid(m$[loc], col, 1) = "1"
inc wSpr
CreateSprite(wSpr, 2)
SetSpritePosition(wSpr, wx, wy)
SetSpriteDepth(wSpr, 10)
SetSpritePhysicsOn( wSpr, 1 )
endif
inc wx, 32
next col
inc loc
inc wy, 32
wx = 0
next row
Return
level1:
m$[0] = "11111111111111111111111111111111"
m$[1] = "10000000000000010000000000000001"
m$[2] = "10000000000000010000000000000001"
m$[3] = "10000000000000000000000000000001"
m$[4] = "10000000000000000000000000000001"
m$[5] = "10000000000000000000000000000001"
m$[6] = "10000000000000000000000000000001"
m$[7] = "10000000000000000000000000000001"
m$[8] = "10000000000000000000000000000001"
m$[9] = "10000000000000000000000000000001"
m$[10] = "10001100000000010000000000110001"
m$[11] = "10000110000000101000000001100001"
m$[12] = "10000110000000010000000001100001"
m$[13] = "10001100000000000000000000110001"
m$[14] = "10000000000000000000000000000001"
m$[15] = "10000000000000000000000000000001"
m$[16] = "10000000000000000000000000000001"
m$[17] = "10000000000000000000000000000001"
m$[18] = "10000000000000000000000000000001"
m$[19] = "10000000000000000000000000000001"
m$[20] = "10000000000000000000000000000001"
m$[21] = "10000000000000010000000000000001"
m$[22] = "10000000000000010000000000000001"
m$[23] = "11111111111111111111111111111111"
Return
SetVirtualResolution(1024, 768)
Global btank, bframe, bx, by, speed
btank = 100: bframe = 6: bx = 0: by = 0: speed = 64
Dim m$[768]
` Load Sprites
LoadImage(2, "wall.png")
LoadImage(btank, "bTank.png")
CreateSprite(btank, btank): SetSpritePosition(btank, 64, 364)
SetSpriteAnimation (btank, 32, 32, 8): SetSpriteFrame(btank, 6): SetSpriteShape(btank, 3)
` Set Physics Properties
`SetPhysicsDebugOn()
SetSpritePhysicsOn(btank, 2)
SetPhysicsGravity(0, 0)
SetSpritePhysicsCanRotate(btank, 0)
SetSpritePhysicsRestitution(btank, 0)
` Setup The Level
Gosub level1
Gosub create_level
do
Gosub tankMoves
Gosub updatePlayers
if GetRawKeyPressed(27) then end
sync()
loop
` Routines & Functions
tankMoves:
key = GetRawKeyPressed(38) ` Blue Up
if key = 1
moveTank(btank, bframe)
endif
key = GetRawKeyPressed(40) ` Blue Down
if key = 1
stopTank(btank)
endif
key = GetRawKeyPressed(37) ` Blue Left
if key = 1
inc bframe: if bframe > 8 then bframe = 1
SetSpriteFrame (btank, bframe)
SetSpriteShape(btank, 3)
if bx <> 0 or by <> 0
moveTank(btank, bframe)
endif
endif
key = GetRawKeyPressed(39) ` Blue Right
if key = 1
dec bframe: if bframe < 1 then bframe = 8
SetSpriteFrame (btank, bframe)
SetSpriteShape(btank, 3)
if bx <> 0 or by <> 0
moveTank(btank, bframe)
endif
endif
Return
updatePlayers:
SetSpritePhysicsVelocity (btank, bx, by)
Return
Function moveTank(player, frame)
Select frame
case 1 ` North West
if player = btank
bx = -speed
by = -speed
endif
endcase
case 2 ` West
if player = btank
bx = -speed
by = 0
endif
endcase
case 3 ` South West
if player = btank
bx = -speed
by = speed
endif
endcase
case 4 ` South
if player = btank
bx = 0
by = speed
endif
endcase
case 5 ` South East
if player = btank
bx = speed
by = speed
endif
endcase
case 6 ` East
if player = btank
bx = speed
by = 0
endif
endcase
case 7 ` North East
if player = btank
bx = speed
by = -speed
endif
endcase
case 8 ` North
if player = btank
bx = 0
by = -speed
endif
endcase
EndSelect
EndFunction
Function stopTank(player)
if player = btank
bx = 0: by = 0
endif
EndFunction
create_level:
` Reads Map data from m$[] and builds the level
wx = 0: wy = 0: loc = 0: wSpr = 999
for row = 1 to 24
for col = 1 to 32
if mid(m$[loc], col, 1) = "1"
inc wSpr
CreateSprite(wSpr, 2)
SetSpritePosition(wSpr, wx, wy)
SetSpriteDepth(wSpr, 10)
SetSpritePhysicsOn( wSpr, 1 )
endif
inc wx, 32
next col
inc loc
inc wy, 32
wx = 0
next row
Return
level1:
m$[0] = "11111111111111111111111111111111"
m$[1] = "10000000000000010000000000000001"
m$[2] = "10000000000000010000000000000001"
m$[3] = "10000000000000000000000000000001"
m$[4] = "10000000000000000000000000000001"
m$[5] = "10000000000000000000000000000001"
m$[6] = "10000000000000000000000000000001"
m$[7] = "10000000000000000000000000000001"
m$[8] = "10000000000000000000000000000001"
m$[9] = "10000000000000000000000000000001"
m$[10] = "10001100000000010000000000110001"
m$[11] = "10000110000000101000000001100001"
m$[12] = "10000110000000010000000001100001"
m$[13] = "10001100000000000000000000110001"
m$[14] = "10000000000000000000000000000001"
m$[15] = "10000000000000000000000000000001"
m$[16] = "10000000000000000000000000000001"
m$[17] = "10000000000000000000000000000001"
m$[18] = "10000000000000000000000000000001"
m$[19] = "10000000000000000000000000000001"
m$[20] = "10000000000000000000000000000001"
m$[21] = "10000000000000010000000000000001"
m$[22] = "10000000000000010000000000000001"
m$[23] = "11111111111111111111111111111111"
Return