为了进一步改进图案效果,在这一节中让生成的新圆半径尽量大。
rmin为圆的最小半径,rmax为圆的最大半径。首先在随机位置(x,y)处生成半径为rmin的圆,如果生成的新圆和之前已生成的圆相交,如图6-6中“1”处所示,则放弃该圆,重新随机生成。
如果生成的新圆和之前已生成的圆都不相交,如图6-6中“2”处所示,则不断增大新圆的半径,直至找到第一个与该圆相切的圆,或者达到rmax为止。

While 圆的个数 < 100 '当圆的个数小于100时,循环运行
isNewCircleOK = 0 ' 假设开始不OK
While isNewCircleOK = 0 ' 当新生成的圆不OK时,重复生成新圆进行比较
x = Int(Rnd *游戏W) '新圆的圆心x坐标
y = Int(Rnd *游戏H) '新圆的圆心y坐标 '
r = 圆的最小半径
For i = 0 To 圆的个数 -1
If isTwoCirclesIntersect(圆心x(i), 圆心y(i), 半径(i), x, y, r) Then Exit For ' 如果已有圆和新圆相交跳出循环,此时i<圆的个数
Next
If (i = 圆的个数) Then ' 如果上面for语句都不跳出,说明i等于circleNum
isNewCircleOK = 1 ' 这个新生成的圆和已有圆都不相交
End If
Wend
isNewCircleOK = 0 ' 继续设为不OK,下面要让这个新圆的半径最大
While isNewCircleOK = 0 And r < 圆的最大半径 ' 当不OK,并且新圆的半径小于最大半径时
r += 1
For i = 0 To 圆的个数 -1
If isTwoCirclesIntersect(圆心x(i), 圆心y(i), 半径(i), x, y, r) Then
isNewCircleOK = 1 ' 一旦和一个旧圆相交,这时新圆OK
Exit For ' 因为新圆半径已经达到最大的情况,这时跳出循环
End If
Next
Wend
圆心x(圆的个数) = x '把新圆的圆心坐标添加到数组中
圆心y(圆的个数) = y
半径(圆的个数) = r '把新圆的半径添加到数组中
圆的个数 += 1 '圆的个数+1
Wend
程序运行后输出如图所示。

提示
While 条件 是一个条件循环语句,只要条件为真,那么一直循环,一直到条件为假才退出循环。
评论一下?