VisualFreeBasic游戏趣味编程_3.4_小球和方块的碰撞判断

2026-1-21 / 0 评论 / 53 阅读

图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 _ 后面下划线,表示多行。

作业: 以上碰撞代码,应该增加在什么地方?然后运行看效果。

评论一下?

OωO
取消