Waves
Posted: Thu Apr 09, 2015 6:07 pm
Code: Select all
rem Waves - A wave simulation
rem iPhone 6 Plus / 8.3
rem Enjoy...
size=20 'size of wave plate
pi=3.1415
gosub initialize
loop:
refresh off
graphics clear 50/255,80/255,50/255
gosub drawfluid
if rnd(20)>18 then gosub drops
gosub fluctuate
refresh on
goto loop
return
fluctuate:
for x=0 to 10
for y=0 to 10
land(x,y)=land(x,y)+landd(x,y)
if land(x,y)>mid then
landd(x,y)=landd(x,y)-0.4
else
if land(x,y)<mid then
landd(x,y)=landd(x,y)+0.4
end if
end if
if landd(x,y)>20 then landd(x,y)=20
if landd(x,y)<-20 then landd(x,y)=-20
next y
next x
return
drops:
dropx=int(rnd(10))
dropy=int(rnd(10))
for x=dropx to dropx+1
for y=dropy to dropy+1
land(x,y)=land(x,y)-2
next y
next x
return
drawfluid:
for y=10 to 1 step -1
for x=1 to 10
x1=(x*size+y*size) '-sw/2+size
y1=(x*size/2-y*size/2)+sh/2
if (x+y)%2=0 then
fill color 150/255,150/255,150/255
else
fill color 50/255,50/255,100/255
end if
col1=land(x-1,y-1)+100
col2=land(x-1,y)+100
col3=land(x,y)+100
col4=land(x,y-1)+100
rem top
fill color 0,0,col1/255
'triangle x1,y1-15-land(x-1,y-1) to x1+30,y1-30-land(x-1,y) to x1+60,y1-15-land(x,y)
trix(0)=x1
triy(0)=y1-15-land(x-1,y-1)
trix(1)=x1+30
triy(1)=y1-30-land(x-1,y)
trix(2)=x1+60
triy(2)=y1-15-land(x,y)
fill poly trix,triy count 3
'triangle x1,y1-15-land(x-1,y-1) to x1+60,y1-15-land(x,y) to x1+30,y1+15-land(x,y-1)
trix(0)=x1
triy(0)=y1-15-land(x-1,y-1)
trix(1)=x1+60
triy(1)=y1-15-land(x,y)
trix(2)=x1+30
triy(2)=y1+15-land(x,y-1)
fill poly trix,triy count 3
if y=1 then
rem bottom left edge
fill color 0,0,0
'triangle x1,y1+30 to x1,y1-15-land(x-1,y-1) to x1+30,y1-land(x,y-1)
trix(0)=x1
triy(0)=y1+30
trix(1)=x1
triy(1)=y1-15-land(x-1,y-1)
trix(2)=x1+30
triy(2)=y1-land(x,y-1)
fill poly trix,triy count 3
'triangle x1,y1+30 to x1+30,y1-land(x,y-1) to x1+30,y1+45
trix(0)=x1
triy(0)=y1+30
trix(1)=x1+30
triy(1)=y1-land(x,y-1)
trix(2)=x1+30
triy(2)=y1+45
fill poly trix,triy count 3
end if
if x=10 then
rem bottom right edge
fill color 0,0,0
'triangle x1+30,y1+45 to x1+30,y1-land(x,y-1) to x1+60,y1-15-land(x,y)
trix(0)=x1+30
triy(0)=y1+45
trix(1)=x1+30
triy(1)=y1-land(x,y-1)
trix(2)=x1+60
triy(2)=y1-15-land(x,y)
fill poly trix,triy count 3
'triangle x1+30,y1+45 to x1+60,y1-15-land(x,y) to x1+60,y1+30
trix(0)=x1+30
triy(0)=y1+45
trix(1)=x1+60
triy(1)=y1-15-land(x,y)
trix(2)=x1+60
triy(2)=y1+30
fill poly trix,triy count 3
end if
next x
next y
return
initialize:
graphics
sw=screen_width()
sh=screen_height()
mid=10
dim land(11,11)
dim landd(11,11)
for x=0 to 10
for y=0 to 10
land(x,y)=mid
landd(x,y)=0
next y
next x
return