rem boing
rem A box containing some balls that 
rem bounce around, colliding with each
rem other as well.
rem does snyone want to help me finish
rem the screen and shadow (commented out)?
rem iPhone 6 plus : 8.3 b1
pi=3.1415
gosub initialize
main_loop:
do
  refresh off
  graphics clear 0,0,0
  gosub drawbox
  gosub drawballs
  gosub moveballs
  refresh on
 until 1=2
return
drawbox:
 fill color 0,0,1
 
 'fill triangle bx(3),by(3) to bx(1),by(1) to bx(5),by(5)
trix(0)=bx(3)
triy(0)=by(3)
trix(1)=bx(1)
triy(1)=by(1)
trix(2)=bx(5)
triy(2)=by(5)
fill poly trix,triy count 3
 'fill triangle bx(1),by(1) to bx(2),by(2) to bx(6),by(6)
trix(0)=bx(1)
triy(0)=by(1)
trix(1)=bx(2)
triy(1)=by(2)
trix(2)=bx(6)
triy(2)=by(6)
fill poly trix,triy count 3
 'fill triangle bx(2),by(2) to bx(4),by(4) to bx(6),by(6)
trix(0)=bx(2)
triy(0)=by(2)
trix(1)=bx(4)
triy(1)=by(4)
trix(2)=bx(6)
triy(2)=by(6)
fill poly trix,triy count 3
 'fill triangle bx(3),by(3) to bx(4),by(4) to bx(8),by(8)
trix(0)=bx(3)
triy(0)=by(3)
trix(1)=bx(4)
triy(1)=by(4)
trix(2)=bx(8)
triy(2)=by(8)
fill poly trix,triy count 3
 'fill color 0,0,50
 'fill triangle bx(3),by(3) to bx(5),by(5) to bx(7),by(7)
trix(0)=bx(3)
triy(0)=by(3)
trix(1)=bx(5)
triy(1)=by(5)
trix(2)=bx(7)
triy(2)=by(7)
fill poly trix,triy count 3
 'fill triangle bx(1),by(1) to bx(5),by(5) to bx(6),by(6)
trix(0)=bx(1)
triy(0)=by(1)
trix(1)=bx(5)
triy(1)=by(5)
trix(2)=bx(6)
triy(2)=by(6)
fill poly trix,triy count 3
 'fill triangle bx(4),by(4) to bx(6),by(6) to bx(8),by(8)
trix(0)=bx(4)
triy(0)=by(4)
trix(1)=bx(6)
triy(1)=by(6)
trix(2)=bx(8)
triy(2)=by(8)
fill poly trix,triy count 3
 'fill triangle bx(3),by(3) to bx(7),by(7) to bx(8),by(8)
trix(0)=bx(3)
triy(0)=by(3)
trix(1)=bx(7)
triy(1)=by(7)
trix(2)=bx(8)
triy(2)=by(8)
fill poly trix,triy count 3
 fill color 0,0,50/255
 'fill triangle bx(7),by(7) to bx(5),by(5) to bx(6),by(6)
trix(0)=bx(7)
triy(0)=by(7)
trix(1)=bx(5)
triy(1)=by(5)
trix(2)=bx(6)
triy(2)=by(6)
fill poly trix,triy count 3
 'fill triangle bx(7),by(7) to bx(6),by(6) to bx(8),by(8)
trix(0)=bx(7)
triy(0)=by(7)
trix(1)=bx(6)
triy(1)=by(6)
trix(2)=bx(8)
triy(2)=by(8)
fill poly trix,triy count 3
 draw color 1,1,1
 draw line bx(1),by(1) to bx(5),by(5)
 draw line bx(2),by(2) to bx(6),by(6)
 draw line bx(3),by(3) to bx(7),by(7)
 draw line bx(4),by(4) to bx(8),by(8)
 draw rect bx(5),by(5) to bx(8),by(8)
return
drawball:
 
 ang=0
 do
  xo1=cosines(ang)*r
  yo1=sines(ang)*r
  xo2=cosines(ang+20)*r
  yo2=sines(ang+20)*r
  'fill triangle x,y to x+xo1,y+yo1 to x+xo2,y+yo2
trix(0)=x
triy(0)=y
trix(1)=x+xo1
triy(1)=y+yo1
trix(2)=x+xo2
triy(2)=y+yo2
fill poly trix,triy count 3
  'fill triangle x,y to x-xo1,y+yo1 to x-xo2,y+yo2
trix(0)=x
triy(0)=y
trix(1)=x-xo1
triy(1)=y+yo1
trix(2)=x-xo2
triy(2)=y+yo2
fill poly trix,triy count 3
  'fill triangle x,y to x-xo1,y-yo1 to x-xo2,y-yo2
trix(0)=x
triy(0)=y
trix(1)=x-xo1
triy(1)=y-yo1
trix(2)=x-xo2
triy(2)=y-yo2
fill poly trix,triy count 3
  'fill triangle x,y to x+xo1,y-yo1 to x+xo2,y-yo2
trix(0)=x
triy(0)=y
trix(1)=x+xo1
triy(1)=y-yo1
trix(2)=x+xo2
triy(2)=y-yo2
fill poly trix,triy count 3
  ang=ang+20
 until ang>90
return
drawshad:
 fill color 0,0,0
 ang=0
 do
  xo1=cosines(ang)*r
  yo1=sines(ang)*r2
  xo2=cosines(ang+30)*r
  yo2=sines(ang+30)*r2
  'fill triangle x,y to x+xo1,y+yo1 to x+xo2,y+yo2
trix(0)=x
triy(0)=y
trix(1)=x+xo1
triy(1)=y+yo1
trix(2)=x+xo2
triy(2)=y+yo2
fill poly trix,triy count 3
  'fill triangle x,y to x-xo1,y+yo1 to x-xo2,y+yo2
trix(0)=x
triy(0)=y
trix(1)=x-xo1
triy(1)=y+yo1
trix(2)=x-xo2
triy(2)=y+yo2
fill poly trix,triy count 3
  'fill triangle x,y to x-xo1,y-yo1 to x-xo2,y-yo2
trix(0)=x
triy(0)=y
trix(1)=x-xo1
triy(1)=y-yo1
trix(2)=x-xo2
triy(2)=y-yo2
fill poly trix,triy count 3
  'fill triangle x,y to x+xo1,y-yo1 to x+xo2,y-yo2
trix(0)=x
triy(0)=y
trix(1)=x+xo1
triy(1)=y-yo1
trix(2)=x+xo2
triy(2)=y-yo2
fill poly trix,triy count 3
  ang=ang+30
 until ang>90
return
drawballs:
 
 for ball=1 to numballs
  x=ballx(ball)
  y=bally(ball)
  z=ballz(ball)
  s=200/((z/focus)+1)
  x=x/((z/focus)+1)
  y=y/((z/focus)+1)
  tempx(ball)=x
  tempy(ball)=y
  tempz(ball)=z
  temps(ball)=s
 next ball
 for a=1 to numballs-1
  for b=a+1 to numballs
   if tempz(a)<tempz(b) then
    tx=tempx(a)
    ty=tempy(a)
    tz=tempz(a)
    ts=temps(a)
    tempx(a)=tempx(b)
    tempy(a)=tempy(b)
    tempz(a)=tempz(b)
    temps(a)=temps(b)
    tempx(b)=tx
    tempy(b)=ty
    tempz(b)=tz
    temps(b)=ts
   end if
  next b
 next a
 for ball=1 to numballs
  x=tempx(ball)
  z=tempz(ball)
  s=temps(ball)
  bri=128-(z/2)
  r=bri/5
  r2=r/2
  y=s+r
  'gosub drawshad
 next ball
 for ball=1 to numballs
  x=tempx(ball)
  y=tempy(ball)
  z=tempz(ball)
  s=temps(ball)
  bri=128-(z/2)
  r=bri/5
  fill color (bri+100)/255,(bri/2)/255,(bri/2)/255
  
  gosub drawball
 next ball
return
moveballs:
 for a=1 to numballs
  x=ballx(a)!xd=ballxd(a)
  y=bally(a)!yd=ballyd(a)
  z=ballz(a)!zd=ballzd(a)
  x=x+xd!y=y+yd!z=z+zd
  if xd>8 then xd=xd-1 
  if xd<-8 then xd=xd+1 
  if zd>8 then zd=zd-1 
  if zd<-8 then zd=zd+1 
  yd=yd+1
  if yd=0 then yd=1 
  if yd>20 then yd=20
  if x<0 or x>400 then
   xd=-xd
   if x<0 then x=0 
   if x>400 then x=400 
  end if
  if y<0 or y>400 then
   yd=-yd
   if y<0 then
    y=0
   end if
   if y>400 then
    y=400
    if yd<0 then yd=yd+3 
   end if
  end if
  if z<-100 or z>200 then
   zd=-zd
   if z<-100 then z=-100 
   if z>200 then z=200 
  end if
  if a<numballs then
   for b=a+1 to numballs
    dx=x-ballx(b)
    dy=y-bally(b)
    dz=z-ballz(b)
    d=sqr(dx^2+dy^2+dz^2)/10
    if d<5 then
     xd=xd+dx/d
     yd=yd+dy/d
     zd=zd+dz/d
     ballxd(b)=ballxd(b)-dx/d
     ballyd(b)=ballyd(b)-dy/d-int(rnd(20))
     ballzd(b)=ballzd(b)-dz/d
    end if
   next b
  end if
  ballx(a)=x
  bally(a)=y
  ballz(a)=z
  ballxd(a)=xd
  ballyd(a)=yd
  ballzd(a)=zd
 next a
return
initialize:
 graphics 
 sw=screen_width()
 sh=screen_height()
 curbuf=0
 numballs=6
 dim cosines(361)
 dim sines(361)
 dim trix(4),triy(4)
 for angle=0 to 360
  cosines(angle)=cos(angle*(pi/180))
  sines(angle)=sin(angle*(pi/180))
 next angle
 dim ballx(numballs+1)
 dim bally(numballs+1)
 dim ballz(numballs+1)
 dim ballxd(numballs+1)
 dim ballyd(numballs+1)
 dim ballzd(numballs+1)
 dim tempx(numballs+1)
 dim tempy(numballs+1)
 dim tempz(numballs+1)
 dim temps(numballs+1)
 for a=1 to numballs
  ballx(a)=int(rnd(300))-100
  bally(a)=int(rnd(300))-100
  ballz(a)=int(rnd(300))-100
  ballxd(a)=int(rnd(6))+2
  ballyd(a)=int(rnd(6))+2
  ballzd(a)=int(rnd(6))+2
 next a
 focus=800
 dim bx(9)
 dim by(9)
 for a=1 to 8
  read x
  read y
  read z
  x=x/((z/focus)+1)
  y=y/((z/focus)+1)
  bx(a)=x
  by(a)=y
 next a
return
data 10,10,10
data 320,10,10
data 10,sh,10
data 320,sh,10
data 100,100,400
data 400,100,400
data 100,400,400
data 400,400,400
data 0,0,0
data 400,0,0
data 0,400,0
data 400,400,0
data 0,0,400
data 400,0,400
data 0,400,400
data 400,400,400
data -200,-200,-200
data 200,-200,-200
data -200,200,-200
data 200,200,-200
data -200,-200,200
data 200,-200,200
data -200,200,200
data 200,200,200
			
							3d boing balls
- 
				DrChip
 - Posts: 167
 - Joined: Wed Oct 22, 2014 3:26 pm
 - My devices: iPhone 4 to 6+,iPad mini to iPad air 2
 
3d boing balls
- Attachments
 - 
			
		
				
- image.jpg (139.58 KiB) Viewed 1485 times
 
 - 
			
		
				
- image.jpg (159.6 KiB) Viewed 1485 times
 
 - 
			
		
				
- image.jpg (149.45 KiB) Viewed 1485 times
 
 - 
			
		
				
- image.jpg (151.25 KiB) Viewed 1485 times
 
 
- Mr. Kibernetik
 - Site Admin
 - Posts: 4794
 - Joined: Mon Nov 19, 2012 10:16 pm
 - My devices: iPhone, iPad, MacBook
 - Location: Russia
 - Flag: 

 
Re: 3d boing balls
Cool jumping!