图3-5列出了小球和方块发生碰撞的3种边界情况,由图分析可认为小球和方块发生碰撞需同时满足以下3个条件。
(a)rect_left_x <= ball_x + radius(方块最左边在小球最右边的左侧或二者x坐标相同)。
(b)rect_left_x + rect_width >= ball_x - radius(方块最右边在小球最左边的右侧或二者x坐标相同)。
(c)height - rect_height <= ball_y + radius(方块最上边在小球最下边的上侧或二者y坐标相同)。

利用C语言提供的3种逻辑运算符:Not(非)、And(与)、Or(或),我们可以实现多个逻辑条件的组合。输入并运行如下代码:
Sub 游戏执行过程(hWndForm As hWnd)
Print 2 > 3
Print 5 < 6
Print Not(2 > 3)
Print 2 > 3 And 5 < 6
Print 2 > 3 Or 5 < 6
End Sub
程序运行后输出:
FB语言中0表示假,-1表示真,因此 print 2>3 输出0,print 5<6 输出-1。
逻辑非运算符 Not 会把真变成假,把假变成真。(2>3)为假,则Not(2>3)为真,print Not(2>3)输出-1。
逻辑与运算符 And 只有当两边的条件都是真时,组合条件才是真。(2>3)为假,(5<6)为真,则(2>3) And (5<6)为假,因此print (2>3) And (5<6) 输出0。
逻辑或运算符 Or 只要两边的条件有一个是真时,组合条件就是真。(5<6)为真,则 (2>3)Or(5<6)为真,因此print (2>3)Or(5<6) 输出-1。
利用逻辑与运算符,在3-3-2基础上添加如下代码,即可实现小球和方块的碰撞判断。当发生碰撞时,利用Sleep( )函数实现类似慢动作的效果:
'如果小球碰到方块
If ((rect_left_x <= ball_x + radius) And _
(rect_left_x + rect_width >= ball_x ) And _
(hh - rect_height <= ball_y + radius) ) Then
Sleep(200) ' 慢动作效果
Else
Sleep(10) '暂停10毫秒
End If
提示
可将过长的FB语言代码分成多行来写,便于规范化与阅读理解。如上面代码 And _ 后面下划线,表示多行。
作业: 以上碰撞代码,应该增加在什么地方?然后运行看效果。
评论一下?