论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
搜索
登录
搜索
勇芳
累计撰写
330
篇文章
累计收到
0
条评论
首页
栏目
论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
自定义幻灯片
最新文章
2026-1-21
VisualFreeBasic游戏趣味编程_3.5_随机方块的速度和高度
为了增加游戏的趣味性,可以添加一定的随机性。首先输入并运行代码 Sub 游戏执行过程(hWndForm As hWnd) Print Rnd Print Rnd Print Rnd End Sub rnd()函数可以生成随机数,程序运行后输出一些随机数: 为了得到设定范围内的随机数(比如:0~100),我们需要乘法。输入并运行代码 Sub 游戏执行过程(hWndForm As hWnd) Print Rnd *100 Print Rnd *100 Print Rnd *100 End Sub 程序运行后输出(是 0 和 100之间,但不包括 0 和 100) 最后会发现,随机数,运行一次软件,第一个,第二个 数 都是一样的,为了每次都不一样,需要初始化 Randomize Sub 游戏执行过程(hWndForm As hWnd) Randomize Print Rnd * 100 Randomize Print Rnd * 100 Randomize Print Rnd *100 End Sub 现在每次都不一样了。 如果不需要小数,需要整数,就增加转换函数:Int Sub 游戏执行过程(hWndForm As hWnd) Randomize Print Int(Rnd * 100) Randomize Print Int(Rnd * 100) Randomize Print Int(Rnd * 100) 运行结果,整数是结果是 0~99 ,就是 Rnd *100 结果是永远不会出现 100 。 当方块重新出现时,添加代码设置其随机高度范围为height/4到height/2,随机速度为-3到-7,添加代码如下: If (rect_left_x <= -20) Then '如果方块跑到最左边 rect_left_x = ww ' 在最右边重新出现 Randomize rect_height = Int(Rnd * (hh / 2 - hh / 4)) + hh / 2 Randomize rect_vx = - (Int(Rnd * 4) + 3) ' 3 到 7 之间 rect_top_y = hh - rect_height '方块顶部y坐标 End If 好了,把代码复制去使用吧。
2026年-1月-21日
51 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_3.4_小球和方块的碰撞判断
图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 _ 后面下划线,表示多行。 作业: 以上碰撞代码,应该增加在什么地方?然后运行看效果。
2026年-1月-21日
56 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_3.3_方块的绘制与移动
函数gg.DrawFrame(x,y,w,h)可以绘制矩形,其中(x,y)为矩形左上角的(x,y)坐标,(w,h)为矩形的宽度和高度,单位全部是像素。在3-2的基础上添加以下代码: Dim As Single rect_left_x, rect_top_y, rect_width, rect_height ' 方块障碍物的相关参数 rect_height = 100 ' 方块高度 rect_width = 20 ' 方块宽度 rect_left_x = ww * 3 / 4 ' 方块左边x坐标 rect_top_y = hh - rect_height '方块顶部y坐标 '画方块 gg.DrawFrame(rect_left_x, rect_top_y, rect_width, rect_height) 进一步,添加变量rect_vx记录方块在x方向上的速度,并初始化为-3。在ddo语句中,让方块从右向左移动。当方块到达窗口最左边时,再让其从最右边出现。 完整代码 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm Dim As Single ww, hh, gravity '重力加速度 Dim As Single ball_x, ball_y, ball_vy, radius '小球坐标、y方向速度、直径 ww = DpiUnScaleF(Form1.ScaleWidth) '游戏画面宽度 hh = DpiUnScaleF(Form1.ScaleHeight) '游戏画面高度 radius = 20 '小球直径 ball_x = ww / 4 '小球x位置 ball_y = hh - radius '小球y位置 ball_vy = 0 ' 小球初始y速度为0 Dim As Single rect_left_x, rect_top_y, rect_width, rect_height,rect_vx ' 方块障碍物的相关参数 rect_height = 100 ' 方块高度 rect_width = 20 ' 方块宽度 rect_left_x = ww * 3 / 4 ' 方块左边x坐标 rect_top_y = hh - rect_height '方块顶部y坐标 rect_vx = -3 '方块x方向速度 Do If IsKeyPress(VK_SPACE) Then '按下了空格键" ball_vy = -16 ' 给小球一个向上的初速度 End If ball_vy = ball_vy + gravity ' 根据重力加速度更新小球y方向速度 ball_y = ball_y + ball_vy ' 根据小球y方向速度更新其y坐标 If (ball_y >= hh - radius) Then '如果小球落到地面上 ball_vy = 0 'y速度为0 ball_y = hh - radius ' 规范其y坐标,避免落到地面下 End If If ball_y < 0 Then '小球跳起到顶部,让小球掉下来 ball_y = 0 ball_vy = 2 gravity = 0.5 End If gg.Brush(&HFF0000) '球的颜色 gg.DrawEllipse(100, ball_y, radius, radius) '画小球 rect_left_x = rect_left_x + rect_vx ' 方块向左移 If (rect_left_x <= -20) Then '如果方块跑到最左边 rect_left_x = ww ' 在最右边重新出现 End If gg.Brush(BGR(204,0,0)) '方块的颜色 gg.DrawFrame(rect_left_x, rect_top_y, rect_width, rect_height) '画方块 gg.Redraw '刷新显示画面 Sleep(10) '暂停10毫秒 gg.Cls() '清空画面 Loop End Sub
2026年-1月-21日
53 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_3.2_按空格键控制小球起跳
结合2-9与3-1,以下代码让小球初始在地面上,按下空格键后起跳,落地后小球静止。在2-9的基础上,把窗口宽度、高度、小球半径等数值均用变量表示,这样代码更易阅读与调整,如3-2所示。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) '球的颜色 Dim As Single ww, hh, gravity '重力加速度 Dim As Single ball_x, ball_y, ball_vy, radius '小球坐标、y方向速度、直径 ww = DpiUnScaleF(Form1.ScaleWidth) '游戏画面宽度 hh = DpiUnScaleF(Form1.ScaleHeight) '游戏画面高度 radius = 20 '小球直径 ball_x = ww / 4 '小球x位置 ball_y = hh - radius '小球y位置 ball_vy = 0 ' 小球初始y速度为0 Do If IsKeyPress(VK_SPACE) Then '按下了空格键" ball_vy = -16 ' 给小球一个向上的初速度 End If ball_vy = ball_vy + gravity ' 根据重力加速度更新小球y方向速度 ball_y = ball_y + ball_vy ' 根据小球y方向速度更新其y坐标 If (ball_y >= hh - radius) Then '如果小球落到地面上 ball_vy = 0 'y速度为0 ball_y = hh - radius ' 规范其y坐标,避免落到地面下 End If If ball_y < 0 Then '小球跳起到顶部,让小球掉下来 ball_y =0 ball_vy = 2 gravity = 0.5 End If gg.DrawEllipse(100, ball_y, radius, radius) '画小球 gg.Redraw '刷新显示画面 Sleep(10) '暂停10毫秒 gg.Cls() '清空画面 Loop End Sub 程序运行后输出如图所示:
2026年-1月-21日
68 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_3.1_字符
除了整型(Long)、浮点型(Single),C语言还提供了字符型(String)数据类型。输入并运行以下代码: Sub 游戏执行过程(hWndForm As hWnd) Print "文字" Dim c As String c = "中文" Print c End Sub 程序运行后输出: 提示 当输出区内容很多,不利于我们查看打印输出内容,可以点清除按钮,清除内容。 不清除,每次输出的内容都会被保留,最多保留最近1000个 常见的字符包括英文字母、数字、标点符号、空格、回车等。双引号包含的一个字符,如“a”、“B”、“1”、“@” 、“ ”(空格)等都为字符常量。 String 为定义字符型变量的关键词,Dim c As String定义了字符型变量c,c = "中文"对字符型变量进行赋值。 检测按键被按下 Sub 游戏执行过程(hWndForm As hWnd) Do If IsKeyPress(VK_SPACE) Then Print "按下了空格键" Sleep 100 Loop End Sub IsKeyPress 是检查按键是否被按下函数,什么按键对应什么参数,需要查看微软网站。 https://learn.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes 运行软件后,按下 空格键 ,看看是否有打印输出
2026年-1月-21日
53 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_第3章_“别碰方块”游戏”
在本章我们将探讨如何实现一个小球跳跃躲避方块的游戏,如图3-1所示。 本章首先介绍了字符的知识,按空格键控制小球起跳;然后介绍了矩形的绘制,并利用逻辑运算符解析如何实现小球和方块的碰撞判断;接着介绍了整除、取余和类型转换,以及如何利用随机数增加游戏的趣味性;最后分析了得分的计算显示实现方式,解决了小球在空中起跳的问题。
2026年-1月-21日
53 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_2.9_小球加速下落
在现实物理世界中,自由落体的物体会受重力影响加速下落。为了在FB语言中处理数值为小数的重力加速度,我们可以利用一种新的数据类型—— Single(浮点型)。 Sub 游戏执行过程(hWndForm As hWnd) Dim g As Single g = 9.8 Print g End Sub 浮点型的关键词为Single,Dim g As Single定义了一个浮点型的变量g。FB语言中的小数被自动认为是浮点型常量,并可以赋值给浮点型变量。print()函数可以输出浮点型常量或变量。浮点型数值之间也可以进行四则运算。 首先将y、vy改成浮点型变量。小球y坐标初始化为0,y方向的速度vy初始化为0。增加浮点型变量g描述重力加速度,设为0.5。在do循环语句中,首先根据重力加速度g增加速度vy,然后利用vy更新y坐标,碰到地面后速度vy反向。如此重复运行,即实现了小球加速下落、触底反弹的循环动画效果。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) Dim y As Single = 0 Dim vy As Single = 0 Dim g As Single = 0.5 Do vy = vy + g y = y + vy If y <= 0 Or y >= 240 Then vy = - vy gg.DrawEllipse(100, y, 20, 20) gg.Redraw : Sleep(10) : gg.Cls() If y > 284 Then vy = 0 : y = 0 '这是重新开始 Loop End Sub 现实世界中的物体会受阻力的影响,运动速度逐渐减小。我们可以在小球每次落地反弹时,速度变成之前的0.95倍。另外让小球最后静止时正好停止在地面上,防止小球穿过地面。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) Dim y As Single = 0 Dim vy As Single = 0 Dim g As Single = 0.5 Do vy = vy + g y = y + vy If y <= 0 Or y >= 240 Then vy = - 0.95*vy gg.DrawEllipse(100, y, 20, 20) gg.Redraw : Sleep(10) : gg.Cls() If y > 250 Then Exit Do Loop gg.DrawEllipse(100, 240, 20, 20) End Sub 当代码比较多时,可以适当加一些注释。所谓注释,就是一些说明的文字,不参与程序运行,格式一般是 ‘注释文字”。以下为加上注释的完整代码,这样读者可以比较清楚地了解代码的功能、变量的含义等。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) '球的颜色 Dim y As Single = 0 '小球的y坐标 Dim vy As Single = 0 '小球y方向速度 Dim g As Single = 0.5 '小球加速度,y方向 Do vy = vy + g '利用加速度g更新vy速度 y = y + vy '利用y方向速度vy更新y坐标 If y <= 0 Or y >= 240 Then '当碰到地面时和反弹到最高时 vy = - 0.95 *vy ' y方向速度改变方向,并受阻力影响,绝对值变小 End If gg.DrawEllipse(100, y, 20, 20) '画小球 gg.Redraw '刷新显示画面 Sleep(10) '暂停10毫秒 gg.Cls() '清空画面 If y > 250 Then Exit Do '超过范围,不再反弹,退出循环 Loop gg.DrawEllipse(100, 240, 20, 20) '画一个在地面的小球 End Sub 提示 当代码逐渐复杂时,一般不要把数值写死在代码中,而是用变量替代。这样代码的可读性更好(阅读有意义的变量名称,而不是阅读没有含义的数字),也方便之后修改参数(只需要修改一次变量,而不是修改多次数值)。 练习题2-8:增加变量x表示小球的x坐标,vx表示x方向的速度,vx初始化为1。尝试实现小球抛物线运动,如图所示。并实现小球在窗口中四处反弹的效果
2026年-1月-21日
56 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_2.8_小球落地反弹
在本节我们尝试实现小球落地反弹的效果。首先在小球逐渐下落代码的基础上,设定变量vy记录小球在y轴方向上的速度,vy初始化为3。在do 循环语句中,小球的y坐标每次增加vy。 提示 do 是无限循环语句 for 是有限循环语句 一直向下运动效果 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) Dim y As Long = 10 Dim vy As Long = 2 Do y = y + vy If y > 280 Then y = -20 gg.DrawEllipse(100, y, 20, 20) gg.Redraw : Sleep(10) : gg.Cls() Loop End Sub 提示 循环都必须有一个配套使用,For 和 Next 配套,Do 和 Loop 配套 ,因为需要无限循环运动,因此用 Do 循环更适合。 上下反弹运动效果 当小球落地时,即小球刚和窗口最底部接触时,小球y坐标恰好等于240。为了实现小球落地时反弹,只需将其y轴上的速度反向(vy = – vy),执行y = y+ vy就相当于将y逐渐变小,即实现了小球向上反弹。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) Dim y As Long = 10 Dim vy As Long = 2 Do y = y + vy If y <=0 Or y>=240 Then vy = -vy gg.DrawEllipse(100, y, 20, 20) gg.Redraw : Sleep(10) : gg.Cls() Loop End Sub
2026年-1月-21日
54 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_2.7_利用if语句实现小球重复下落
2-6中小球落到窗口底部后就消失了,在这一节我们增加2-7代码,得到小球重复下落的效果。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) Dim y As Long For y = 10 To 300 Step 2 If y > 280 Then y = -20 gg.DrawEllipse(100, y, 20, 20) gg.Redraw : Sleep(10) : gg.Cls() Next End Sub 添加的代码叫if语句,也叫选择判断语句。If y > 280 Then表示当y的值大于280时,执行后面的语句y = –20,即将小球的y坐标设为–20。 提示 当圆 y坐标为280时,下落的小球刚好从窗口底部完全消失。此时将y的值设为–20,即小球从窗口顶部开始出现。 有了if语句,我们就可以让计算机进行一些智能处理了,比如判断两个数字的大小: Sub 游戏执行过程(hWndForm As hWnd) Dim x As Long = 3 Dim y As Long = 5 If x > y Then Print "x大" If x < y Then Print "y大" If x = y Then Print "x与y一样大" End Sub 程序运行后输出: FB语言中有>,<,=,<>,>=,<= 6种运算符用来判断两个数字的大小关系,如表2-1所示。 表2-1 表 达 式 含 义 x > y x是否大于y x < y x是否小于y x = y x是否等于y x <> y x是否不等于y x >= y x是否大于或等于y x <= y x是否小于或等于y 提示 x=y是赋值语句,表示把y的值赋给x。if (x=y) then表示如果x和y值相等,就执行if(x=y) then后的语句。 练习题2-6:编程计算12×14×16×18,并用if语句判断结果是否大于50000。
2026年-1月-21日
55 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_2.6_利用For实现小球下落动画
在本节我们讲解For循环语句,用较少的代码实现小球连续运动的动画。首先,输入并运行以下代码: Sub 游戏执行过程(hWndForm As hWnd) Dim i As Long For i = 1 To 10 Print 10 Next End Sub 程序将重复输出整数10: For i = 1 To 10 表示从 1 开始 到 10 ,重复执行 Print 10 10次 For 和 Next 需要配套使用,中间部分是循环体,就是循环执行的代码 利用For语句,我们可以实现小球连续下落的动画效果: Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Brush(&HFF0000) Dim y As Long For y = 10 To 300 Step 2 gg.DrawEllipse(100, y, 20, 20) gg.Redraw : Sleep(10) : gg.Cls() Next End Sub For y = 10 To 300 Step 2 小球的初始 y = 10 y坐标为10,For循环语句中Step 2y坐标每循环1次增加2、清空屏幕、绘制新位置的圆、暂停10毫秒。如此重复执行,即实现了小球连续下落的动画效果。 练习题2-5:利用For语句,实现小球半径逐渐变大的动画效果,如图所示。
2026年-1月-21日
41 阅读
0 评论
VisualFreeBasic编程文档
13
14
15
16
17