@CP
Quote: "Make it rotate, Spin it around."
As you requested.
Try and catch the cubes with the arrow keys.
Use SHIFT and CONTROL to change perspective.
`--------------------------------
`2D CUBE CATCHER!
`--------------------------------
`--------------------------------
` SETUP
`--------------------------------
randomize timer()
hide mouse
`world Boundaries
Wx1 = 15 : Wx2 = 320
Wy1 = 200 : Wy2 = 30
Wz1 = 0 : Wz2 = 160
`perspective
Vx# = 0.5 : Vy# = 1-Vx#
`Cube position
Cx = rnd(Wx2-Wx1)+Wx1
Cy# = Wy2
Cz = rnd(Wz2-Wx1)+Wx1
Cs# = 1
`Cube volume
Cvx = 10
Cvy = 10
Cvz = 10
`player plain
Px = Wx1
Py = Wy1
Pz = Wz1
`plain volume
Pvx = 0
Pvz = 0
sTime# = timer() : `start time
`--------------------------------
` MAIN LOOP
`--------------------------------
sync on
DO
cls
gosub Axis
gosub Cube
gosub Player
gosub control
gosub cube_fall
gosub bind
gosub HUD
sync
LOOP
`--------------------------------
` GOSUBS
`--------------------------------
axis:
`x-line
ink rgb(255,0,0),0
line 15,200,320,200
`y-line
ink rgb(0,255,0),0
line 15,200,15,20
`z-line (X+Y/2)
ink rgb(0,0,255),0
line 15,200,15+(145*Vx#),200-(145*Vy#)
RETURN
`------
cube:
`Colour the cube to plain position
if Cy# < Wy1-5
ink rgb(255,255,255),0
else
if ABS( (Px+(pvx/2)) - (Cx+(Cvx/2)) ) < Pvx and ABS( (Pz+(pvz/2)) - (Cz+(Cvz/2)) ) < Pvz
ink rgb(0,255,0),0
else
ink rgb(255,0,0),0
endif
endif
`* FG Square
`Fore Bottom Horizontal
line (Cx+(Vx#*Cz)),(Cy#-(Vy#*Cz)), (Cx+(Vx#*Cz))+Cvx,(Cy#-(Vy#*Cz))
`Fore Top Horizontal
line (Cx+(Vx#*Cz)),(Cy#-(Vy#*Cz))-Cvy, (Cx+(Vx#*Cz))+Cvx,(Cy#-(Vy#*Cz))-Cvy
`Fore Left Vert
line (Cx+(Vx#*Cz)),(Cy#-(Vy#*Cz)), (Cx+(Vx#*Cz)),(Cy#-(Vy#*Cz))-Cvy
`Fore Right Vert
line (Cx+(Vx#*Cz))+Cvx,(Cy#-(Vy#*Cz)), (Cx+(Vx#*Cz))+Cvx,(Cy#-(Vy#*Cz))-Cvy
`* BG Square
`Fore Bottom Horizontal
line (Cx+(Vx#*Cz))+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Vy#*Cvz), (Cx+(Vx#*Cz))+Cvx+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Vy#*Cvz)
`Fore Top Horizontal
line (Cx+(Vx#*Cz))+(Vx#*Cvz),(Cy#-(Vy#*Cz))-Cvy-(Vy#*Cvz), (Cx+(Vx#*Cz))+Cvx+(Vx#*Cvz),(Cy#-(Vy#*Cz))-Cvy-(Vy#*Cvz)
`Fore Left Vert
line (Cx+(Vx#*Cz))+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Vy#*Cvz), (Cx+(Vx#*Cz))+(Vx#*Cvz),(Cy#-(Vy#*Cz))-Cvy-(Vy#*Cvz)
`Fore Right Vert
line (Cx+(Vx#*Cz))+Cvx+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Vy#*Cvz), (Cx+(Vx#*Cz))+Cvx+(Vx#*Cvz),(Cy#-(Vy#*Cz))-Cvy-(Vy#*Cvz)
`* Connectors
`LB
line (Cx+(Vx#*Cz)),(Cy#-(Vy#*Cz)), (Cx+(Vx#*Cz))+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Vy#*Cvz)
`RB
line (Cx+(Vx#*Cz))+Cvx,(Cy#-(Vy#*Cz)), (Cx+(Vx#*Cz))+Cvx+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Vy#*Cvz)
`LT
line (Cx+(Vx#*Cz)),(Cy#-(Vy#*Cz))-Cvy, (Cx+(Vx#*Cz))+(Vx#*Cvz),(Cy#-(Vy#*Cz))-Cvy-(Vy#*Cvz)
`RT
line (Cx+(Vx#*Cz))+Cvx,(Cy#-(Vy#*Cz))-Cvy, (Cx+(Vx#*Cz))+Cvx+(Vx#*Cvz),(Cy#-(Vy#*Cz))-Cvy-(Vy#*Cvz)
`* Y height line (ground up)
ink rgb(0,255,0),0
line (Cx+(Vx#*Cz))+(Cvx/1.6)+(Vx#*Cvz),(Wy1-(Vy#*Cz)), (Cx+(Vx#*Cz))+(Cvx/1.6)+(Vx#*Cvz),(Cy#-(Vy#*Cz))-(Cvy/1.6)
RETURN
`------
player:
if onfire = 0 then ink rgb(0,0,255),0
if onfire = 1 then ink rgb(255,0,0),0
`FG Horizontal
line (Px+(Vx#*Pz)),(Py-(Vy#*Pz)), (Px+(Vx#*Pz))+Pvx,(Py-(Vy#*Pz))
`BG Horizontal
line (Px+(Vx#*Pz))+(Vx#*Pvz),(Py-(Vy#*Pz))-(Vy#*Pvz), (Px+(Vx#*Pz))+Pvx+(Vx#*Pvz),(Py-(Vy#*Pz))-(Vy#*Pvz)
`LB
line (Px+(Vx#*Pz)),(Py-(Vy#*Pz)), (Px+(Vx#*Pz))+(Vx#*Pvz),(Py-(Vy#*Pz))-(Vy#*Pvz)
`RB
line (Px+(Vx#*Pz))+Pvx,(Py-(Vy#*Pz)), (Px+(Vx#*Pz))+Pvx+(Vx#*Pvz),(Py-(Vy#*Pz))-(Vy#*Pvz)
RETURN
`------
control:
if rightkey() = 1 then inc Px,2
if leftkey() = 1 then dec Px,2
if upkey() = 1 then inc Pz,1
if downkey() = 1 then dec Pz,1
`Change perspective
if Shiftkey() = 1 then inc Vx#,0.1
if Controlkey() = 1 then dec Vx#,0.1
if Vx# < 0.0 then Vx# = 0.0
if Vx# > 1.0 then Vx# = 1.0
Vy# = 1-Vx#
RETURN
`------
cube_fall:
inc Cy#,Cs#
if Cy# >= Wy1
if ABS( (Px+(pvx/2)) - (Cx+(Cvx/2)) ) < Pvx and ABS( (Pz+(pvz/2)) - (Cz+(Cvz/2)) ) < Pvz
inc Pscore,1
inc roll,1
if roll = 3 then onfire = 1
else
roll = 0
onfire = 0
endif
Cx = rnd(Wx2-Wx1)+Wx1
Cy# = Wy2
Cz = rnd(Wz2-Wx1)+Wx1
Cvx = rnd(10)+5 : Cvy = rnd(10)+5 : Cvz = rnd(10)+5
Cs# = rnd(15)
Cs# = (Cs# /10)+0.5
else
if onfire = 0
if (Pvx-Cvx) <> 0 then dec Pvx,(Pvx-Cvx)/ABS(Pvx-Cvx)
if (Pvz-Cvz) <> 0 then dec Pvz,(Pvz-Cvz)/ABS(Pvz-Cvz)
else
Pvx = 30 : Pvz = 15
endif
endif
RETURN
`------
bind:
if Cx < Wx1 then Cx = Wx1
if Cx > Wx2 then Cx = Wx2
if Cy# > Wy1 then Cy# = Wy1
if Cy# < Wy2 then Cy# = Wy2
if Cz < Wz1 then Cz = Wz1
if Cz > Wz2 then Cz = Wz2
if Px < Wx1 then Px = Wx1
if Px > Wx2 then Px = Wx2
if Pz < Wz1 then Pz = Wz1
if Pz > Wz2 then Pz = Wz2
RETURN
`------
HUD:
set cursor 20,320
rTime# = 60-(Timer()-sTime#)/1000
print "Time Remaining: "; rTime#
print "Score: "; Pscore
if onfire = 1 then print "YOU'RE ON FIRE!!!"
print "Cube Speed: "; Cs#
if rTime# <= 0
cls
center text 320,240,"You scored " + str$(Pscore) + "pts!"
wait key
sync
end
endif
RETURN
I think you owe me an apology.
I am king of the noobs!