Code: Select all
REM
REM Space Voyage v3
REM It's not a big program but looks nice!
REM v2 - ported from my misoft code
REM v3 - fixed lighting and colors
REM please share.
REM iPhone 6 plus / 8.3 b2
REM
REM Enjoy!
sw=SCREEN_WIDTH()
sh=SCREEN_HEIGHT()
csw=sw/2
csh=sh/2
GOSUB init
loop:
refresh off
graphics clear 0,0,0
draw COLOR 1,1,1
GOSUB rotate
FOR a=7 TO polys
siz=6-(tz(a)/20)
fill COLOR 0,0,(siz*30)/255
fill RECT tx(a)-siz,ty(a)-siz to tx(a)+siz,ty(a)+siz
fill COLOR 170/255,170/255,(siz*30)/255
siz=siz-4
fill RECT tx(a)-siz,ty(a)-siz to tx(a)+siz,ty(a)+siz
y(a)=y(a)-2
IF y(a)<-40 THEN
y(a)=y(a)+80
END IF
NEXT a
burn=0
r=90
g=90
b=90
f1=1
f2=3
f3=5
GOSUB draw
f1=2
f2=1
f3=5
GOSUB draw
r=50
g=80
b=50
f1=1
f2=4
f3=3
GOSUB draw
f1=2
f2=4
f3=1
GOSUB draw
r=40
g=40
b=100
f1=4
f2=3
f3=6
GOSUB draw
f1=2
f2=4
f3=6
GOSUB draw
burn=1
fill COLOR (155+lol)/255,lol/255,lol/255
f1=3
f2=4
f3=5
GOSUB draw
fill COLOR (155+lol)/255,lol/255,lol/255
f1=4
f2=2
f3=5
GOSUB draw
lol=100*SIN(mm/4)
mm=mm+.5
draw COLOR 1,1,1
DRAW TEXT "Space Voyage " at 11,sh-19
draw COLOR 0,0,0
DRAW TEXT "Space Voyage " at 10,sh-20
refresh on
GOTO loop
draw:
'Draw A Face Of The Cube!
vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
IF (vx1*vy2-vx2*vy1)<0 THEN
light=-(tz(f1)+tz(f2)+tz(f3))*5
IF burn=0 THEN
fill COLOR (r+light)/255,(g+light)/255,(b+light)/255
END IF
'TRIANGLE tx(f1),ty(f1), tx(f2),ty(f2), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f2)
triy(1)=ty(f2)
trix(2)=tx(f3)
triy(2)=ty(f3)
fill poly trix,triy count 3
draw COLOR 0,0,0
'TRIANGLE tx(f1),ty(f1), tx(f2),ty(f2), tx(f3),ty(f3)
trix(0)=tx(f1)
triy(0)=ty(f1)
trix(1)=tx(f2)
triy(1)=ty(f2)
trix(2)=tx(f3)
triy(2)=ty(f3)
draw poly trix,triy count 3
END IF
RETURN
rotate:
' Rotate And Scale Each Point - Store Result
FOR a=1 TO polys
x1=x(a)
y1=y(a)
z1=z(a)
' X,Y,Z rotations!
xx=x1
yy=y1*cs(xr)+z1*sn(xr)
zz=z1*cs(xr)-y1*sn(xr)
y1=yy
x1=xx*cs(yr)-zz*sn(yr)
z1=xx*sn(yr)+zz*cs(yr)
zz=z1
xx=x1*cs(zr)-y1*sn(zr)
yy=x1*sn(zr)+y1*cs(zr)
'Apply Perspective!
dv=(zz/50)+1
xx=size*(xx/dv)+csw
yy=size*(yy/dv)+csh
tx(a)=xx
ty(a)=yy
tz(a)=zz
NEXT a
xr=xr+1
yr=yr+2
zr=zr+1
IF xr>720 THEN
xr=xr-720
END IF
IF yr>720 THEN
yr=yr-720
END IF
IF zr>720 THEN
zr=zr-720
END IF
RETURN
init:
'This Routine sets the program up.
'Open Gfx Screen
graphics
graphics clear 0,0,0
'Define the necessary variables!
str=41
size=15 ' how big do you want it?
polys=6+str 'The amount of polygons in the object
pi=3.1416 ' Pi
DIM x(polys+1) ' Original X co-ordinate store
DIM y(polys+1) ' Original Y co-ordinate store
DIM z(polys+1) ' Original Z co-ordinate store
DIM tx(polys+1) ' Transformed X co-ordinate store
DIM ty(polys+1) ' Transformed Y co-ordinate store
DIM tz(polys+1) ' Transformed Z co-ordinate store
DIM trix(4), triy(4)
xr=1 ' x rotation
yr=2 ' y rotation
zr=3 ' z rotation
'Define Sine Tables!!
DIM cs(722)
DIM sn(722)
FOR ang=1 TO 720
cs(ang)=COS(ang*(PI/360))
sn(ang)=SIN(ang*(PI/360))
NEXT ang
' Read in the object!
FOR a=1 TO polys
x(a)=-30+RND(60)
y(a)=-40+RND(80)
z(a)=-30+RND(60)
NEXT a
FOR a=1 TO polys-str
READ x(a),y(a),z(a)
NEXT a
'The Object Description As Data!
'The Data Below Describes A Cube.
DATA 0,10,0,10,-10,0,-10,-10,0
DATA 0,-12,5,0,-14,-5
DATA 0,0,2.3
RETURN