| Posted: 06:58pm 31 May 2026 |
|
|
|
Soap bubbles

MODE 3 Dim c(15)=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) Colour Map c(),c()
Type Bubble x As INTEGER y As INTEGER dx As INTEGER dy As INTEGER r As INTEGER c As INTEGER act As INTEGER pop As INTEGER End Type
Const maxBubbles = 20 Dim b(maxBubbles) As Bubble
For i=1 To maxBubbles InitBubble(i) Next
Do For i=1 To maxBubbles Circle b(i).x, b(i).y, b(i).r,,,0,0 If b(i).act=1 Then b(i).x=b(i).x+b(i).dx b(i).y=b(i).y+b(i).dy If b(i).x-b(i).r<0 Or b(i).x+b(i).r>MM.HRES Then b(i).dx=-b(i).dx EndIf If b(i).y-b(i).r<0 Or b(i).y+b(i).r>MM.VRES Then b(i).dy=-b(i).dy EndIf For j=i+1 To maxBubbles If b(j).act=1 Then dist!=Sqr((b(i).x-b(j).x)^2+(b(i).y-b(j).y)^2) minDist!=b(i).r+b(j).r If dist!<minDist! Then t=b(i).dx: b(i).dx=b(j).dx: b(j).dx=t t=b(i).dy: b(i).dy=b(j).dy: b(j).dy=t If Int(Rnd*10)=0 Then b(i).act=2 b(i).pop=5 EndIf EndIf EndIf Next j
If Int(Rnd*1000)=0 Then b(i).act=2 b(i).pop=5 EndIf Circle b(i).x, b(i).y, b(i).r,2,,b(i).c t=310-b(i).x\16 Arc b(i).x, b(i).y, b(i).r-8,,t,50+t,b(i).c
ElseIf b(i).act=2 Then For p=1 To 8 angle!=p*0.785 px=b(i).x+(b(i).r+(5-b(i).pop)*3)*Cos(angle!) py=b(i).y+(b(i).r+(5-b(i).pop)*3)*Sin(angle!) Pixel px,py,b(i).c Next p b(i).pop=b(i).pop-1 If b(i).pop <=0 Then t=b(i).r*10: Play Tone t,t,20 Circle b(i).x, b(i).y, b(i).r+15,,,0,0 InitBubble(i) EndIf EndIf Next i Loop While Inkey$=""
Sub InitBubble(i As INTEGER) b(i).r=Int(Rnd*40)+15 b(i).x=Int(Rnd*(MM.HRES-2*b(i).r))+b(i).r b(i).y=Int(Rnd*(MM.VRES-2*b(i).r))+b(i).r b(i).dx=(Rnd*4)-2: If b(i).dx=0 Then b(i).dx=1 b(i).dy=(Rnd*4)-2: If b(i).dy=0 Then b(i).dy=1 b(i).c=c(Int(Rnd*14)+1) b(i).act=1 b(i).pop=0 End Sub |