Challenge: 
Winner?: 
No
Code Snippet: 
` 'Aargh - not another Pong Clone!' by Ric.
if check display mode(1024,768,32)=1 then set display mode 1024,768,32
hide mouse
sync on
sync rate 50
autocam off
hide light 0
color backdrop rgb(0,0,0)
set ambient light 80
make light 1
position light 1,100,100,20
set light range 1,100000
color light 1,rgb(255,220,180)
fog on
fog color 0
fog distance 1000
`create green texture
for x=0 to 100
for y=0 to 100
ink rgb(0,x+y,0),0
dot x,y
next y
next x
get image 103,0,0,100,100
cls
`create purple texture
for x=0 to 100
for y=0 to 100
ink rgb(x+y,0,x+y),0
dot x,y
next y
next x
get image 102,0,0,100,100
cls
`create blue texture
for x=0 to 100
for y=0 to 100
ink rgb(0,0,x+y),0
dot x,y
next y
next x
get image 101,0,0,100,100
`create star texture
for x=0 to 100
for y=0 to 100
d=rnd(20)
ink rgb(100+rnd(100),100+rnd(100),rnd(100)+100),0
if d=1 then dot x,y
next y
next x
get image 1,0,0,100,100
`create tile texture
cls
ink rgb(0,0,255),0
box 0,0,10,10
box 10,10,20,20
get image 2,0,0,20,20
set text font "sf automaton_mod"
set text size 25
`create starsphere
make object sphere 1000,-1000,50,50
texture object 1000,1
scale object texture 1000,5,5
xrotate object 1000,-90
`player paddle
make object sphere 1,20,20,20
scale object 1,100,400,100
ghost object on 1
texture object 1,102
set object emissive 1,rgb(200,200,200)
set object specular 1,rgb(250,250,250)
set object specular power 1,10
set object fog 1,0
set object collision on 1
set object collision to boxes 1
 
`reflection of player paddle
clone object 302,1 `top
scale object 302,100,400,100
fade object 302,90
clone object 303,1 `bottom
scale object 303,100,400,100
fade object 303,90
`computer paddle
make object sphere 2,20,20,20
scale object 2,100,400,100
ghost object on 2
texture object 2,103
set object emissive 2,rgb(200,200,200)
set object specular 2,rgb(250,250,250)
set object specular power 2,10
set object fog 2,0
set object collision on 2
set object collision to boxes 2
`reflection of computer paddle
clone object 304,2 `top
scale object 304,100,400,100
fade object 304,90
clone object 305,2 `bottom
scale object 305,100,400,100
fade object 305,90
`ball
make object sphere 3,20,40,40
texture object 3,101
set object specular 3,rgb(200,200,200)
set object specular power 3,15
set object emissive 3,rgb(150,150,100)
set object ambient 3,0
set object collision on 3
set object fog 3,0
`reflection of ball
clone object 300,3 `top reflection
fade object 300,50
clone object 301,3 `bottom reflection
fade object 301,50
`bottom wall
make object plain 4,500,800
xrotate object 4,90
set object collision on 4
texture object 4,2
scale object texture 4,5,5
set object transparency 4,1
`top wall
make object plain 5,500,800
xrotate object 5,90
set object collision on 5
texture object 5,2
scale object texture 5,5,5
set object transparency 5,1
`back wall
make object plain 6,500,100
texture object 6,101
scale object texture 6,2,10
set object texture 6,2,0
set object transparency 6,1
set object fog 6,0
ghost object on 6
`position walls
position object 4,0,-150,100
position object 5,0,150,100
position object 6,0,0,300
`restart point for new game (the goto command is not dead yet!)
newgame:
for object=300 to 305
hide object object
next object
`zoom in
paddlex#=0
position object 1,-paddlex#,0,0
position object 2,paddlex#,0,0
position object 3,0,0,0
 
zrotate camera 0
camz#=-2000.0
position camera 0,0,0,camz#
while camz#<-500.0
inc camz#,5
position camera 0,0,camz#
sync
endwhile
position camera 0,0,0,-500
`set paddle positions
while paddlex#<180
inc paddlex#
position object 1,-paddlex#,0,0
position object 2,paddlex#,0,0
sync
endwhile
 
 
do
text screen width()/2-100,200,"Gravity on? (y/n)"
if inkey$()="y" then gravity=1:exit
if inkey$()="n" then gravity=0:exit
sync
loop
text screen width()/2-70,240,"GET READY!"
sync
wait 600
for object=300 to 305
show object object
next object
`set initial variables
level=1
pscore=0
cscore=0
pv#=10 `player paddle velocity
bvx#=10 `ball velocity
if gravity=1
cv#=3.5 `computer paddle velocity
g#=0.5
else
cv#=2
g#=0
endif
`restart point for new serve or new level
restart:
randomize timer()
wait 800
py#=-10+rnd(20) `player's initial y position
cy#=-10+rnd(20) `computer's initial y position
bx#=0 `ball x
by#=0 `ball y
bvy#=1.5+rnd(10)/10 `ball direction (in degrees:- horizontal=0)
bvx#=abs(bvx#)
`main loop
do
text 0,0,str$(screen fps())
`player input
remstart
if upkey()>0 and object collision (1,5)=0
py#=py#+pv#
endif
if downkey()>0 and object collision (1,4)=0
py#=py#-pv#
endif
remend
 
py#=py#-mousemovey()
if py#>110 then py#=110
if py#<-110 then py#=-110
`move player paddle
position object 1,-180,py#,100
position object 302,-180,-py#-300,100
position object 303,-180,-py#+300,100
`position object 401,-180,py#,100
`ball motion
bvy#=bvy#+g#
bx#=bx#+bvx#
by#=by#-bvy#
`collision with court
if by#>140
by#=by#-10
bvy#=bvy#*-1
endif
if by#<-140
by#=by#+10
bvy#=bvy#*-1
endif
`collision with player paddle
if object collision (3,0)=1
bvx#=bvx#*-1 `reverse velocity
bx#=-150 `prevent embedding
`measure offset between player paddle and ball and adjust direction
po#=by#-py#
bvy#=bvy#-po#*0.15
endif
`and same for computer paddle.....
if object collision (3,0)=2
bvx#=bvx#*-1
bx#=150
co#=by#-cy#
bvy#=bvy#-co#*0.15
endif
if bvy#>15.0 then bvy#=15.0
if bvy#<-15.0 then bvy#=-15.0
`new ball position
position object 3,bx#,by#,100
position object 300,bx#,-by#+300,100
position object 301,bx#,-by#-300,100
`computer paddle A.I.
`return to middle
if bvx#<0
if cy#>2 then a#=-cv#
if cy#<2 then a#=cv#
if cy#<=2 and cy#>=-2 then a#=0
cy#=cy#+a#
endif
`move towards ball
if bvx#>0
if by#>cy# then a#=cv#
if by#<cy# then a#=-cv#
cy#=cy#+a#
endif
position object 2,180,cy#,100
position object 304,180,-cy#+300,100
position object 305,180,-cy#-300,100
`win or lose
if object position x(3) < -250
cscore=cscore+1
vb#=vb#*-1
goto restart
endif
if object position x(3) > 250
pscore = pscore +1
goto restart
endif
`print score
text screen width()/2-20,screen height()/2-12,str$(pscore)+" : "+str$(cscore)
`goto next level, increase difficulty and reset scores
if pscore>2
bv#=bv#+1
pv#=pv#+0.3
cv#=cv#+0.5
level=level+1
pscore=0
cscore=0
goto restart
endif
`display level
text screen width()/2-40,screen height()/2-100,"Level "+str$(level)
 
`game over text
if cscore>2
set text font "impact"
ink rgb(0,200,0),0
text screen width()/2-50,screen height()/2+200,"Game Over"
text screen width()/2-80,screen height()/2+250,"You reached level "+str$(level)
text screen width()/2-100,screen height()/2+280,"Press any key to restart"
sync
wait key
set text font "sf automaton_mod"
ink rgb(0,0,255),0
goto newgame
endif
if inkey$()="q" then goto restart
if level>3
`scroll textures
scroll object texture 1000,0,-0.014
scroll object texture 4,0,0.08
scroll object texture 5,0,0.08
if clockwise=1 then roll camera right 0.1
if camera angle z()>30 then clockwise=0:turn camera left 0.1
if clockwise=0 then roll camera left 0.1
if camera angle z()<-30 then clockwise=1:turn camera right 0.1
else
`scroll textures
scroll object texture 1000,0,-0.004
scroll object texture 4,0,0.004
scroll object texture 5,0,0.004
endif
sync
loop