论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
搜索
登录
搜索
勇芳
累计撰写
330
篇文章
累计收到
0
条评论
首页
栏目
论坛的首页
勇芳的软件
教程和帮助
VisualFreeBasic编程文档
勇芳系列软件帮助说明教程
留言或交流
登录
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_5.2_针的旋转
针的起点坐标为中心(200,120),假设针的长度为lineLength,针的旋转角度为angle,则由三角函数可以求出针的末端坐标(xEnd,yEnd)。完整代码参看。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm Dim pi As Single = 3.1415926 / 180 Dim lineLength As Long = 100 ' 针的长度 Dim As Long xEnd, yEnd ' 针的末端坐标(针起始位置为圆心) Dim As Long angle = 300 '针的旋转角度 xEnd = 200 + lineLength *Cos(angle * pi) '计算针的末端坐标 yEnd = 120 + lineLength *Sin(angle * pi) gg.Pen 3, BGR(0, 0, 0) '线宽为3,这样针看起来更明显 gg.Brush '不填充色彩 gg.DrawLine 200, 120, xEnd, yEnd gg.Pen 2, BGR(255, 0, 0) '设置圆盘线条颜色为红色 gg.DrawEllipse 160, 80, 80, 80 End Sub 正弦函数sin()、余弦函数cos(),它的参数是弧度,并不是角度,因此 需要 Dim pi As Single = 3.1415926 / 180 来把角度转换成弧度。 程序运行后输出效果如图5-3所示。 进一步,假设针的旋转速度为rotateSpeed,在DO循环中让针的角度逐渐增加(angle = angle + rotateSpeed),即实现了针的旋转动画效果。完整代码参看 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm Dim pi As Single = 3.1415926 / 180 Dim lineLength As Long = 100 ' 针的长度 Dim As Long xEnd, yEnd ' 针的末端坐标(针起始位置为圆心) Dim As Long angle = 300 '针的旋转角度 gg.Brush '不填充色彩 Dim rotateSpeed As Long = 2 Do gg.Cls angle = angle + rotateSpeed '角度增加 xEnd = 200 + lineLength *Cos(angle * pi) '计算针的末端坐标 yEnd = 120 + lineLength *Sin(angle * pi) gg.Pen 3, BGR(0, 0, 0) '线宽为3,这样针看起来更明显 gg.DrawLine 200, 120, xEnd, yEnd gg.Pen 2, BGR(255, 0, 0) '设置圆盘线条颜色为红色 gg.DrawEllipse 160, 80, 80, 80 gg.Redraw Sleep 10 Loop End Sub 程序运行后,指针不停的转动 还有一个不容易发现的BUG,FB语言中的整数、浮点数均有值域,为了防止角度变量angle无限增大,设定当angle>360时,应当执行angle = 0。 Do gg.Cls angle = angle + rotateSpeed '角度增加 If angle > 360 Then angle = 0 xEnd = 200 + lineLength *Cos(angle * pi) '计算针的末端坐标 练习题5-1:编程绘制图5-5所示的sin(x)函数曲线。
2026年-1月-21日
55 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_5.1_绘制圆盘与针
输入并运行以下代码,可以在画面中间绘制一个圆表现圆盘、一条线段,用来表示一根针,圆心坐标及线段起点坐标均为(200,120)。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Pen 3, BGR(0, 0, 0) '线宽为3,这样针看起来更明显 gg.Brush '不填充色彩 gg.DrawLine 200,120,300,120 gg.Pen 2, BGR(255, 0, 0) '设置圆盘线条颜色为红色 gg.DrawEllipse 160,80,80,80 End Sub 其中,gg.Pen 3, BGR(0, 0, 0) 线宽度为3(线条默认宽度为1)颜色为黑。 程序运行后输出效果如图5-2所示。
2026年-1月-21日
49 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_第5章_“见缝插针”游戏
在本章我们将探讨如何实现一个“见缝插针”游戏。按下空格键后发射一根针到圆盘上,所有针逆时针方向转动;如果新发射的针碰到已有的针,游戏结束。如图5-1所示。 本章首先讲解了如何绘制圆盘与针,利用三角函数实现了针的旋转;然后介绍了一维数组的概念,并利用数组解析了如何实现多根针的效果;接着利用批量绘制函数分析了绘制效果改进方法;最后分析了针的发射与增加、游戏失败判断、得分与显示效果的改进方法。
2026年-1月-21日
47 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.7_按键切换效果
利用do循环和IsKeyPress()函数,可以实现每次按键后,重新生成随机颜色。另外,利用Randomize()函数对随机函数初始化,避免每次运行的随机颜色都一样。 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 0, 0 '设置线条为没有 Dim i As Long, j As Long, 度 As Long Do Randomize Dim h As Long = int(Rnd * 18) * 10 Dim color1 As COLORREF = HSBtoRGB_Gdi(HSB(h, 90, 80, 255)) Dim color2 As COLORREF = HSBtoRGB_Gdi(HSB(h + 180, 90, 80, 255)) For j = 110 To 30 Step -25 For i = 0 To 350 Step 18 画扇形(gg, 120, 120, j, i + 3 + 度, i + 0 + 度, BGR(0, 0, 0)) 画扇形(gg, 120, 120, j, i + 8 + 度, i + 3 + 度, color1) 画扇形(gg, 120, 120, j, i + 13 + 度, i + 8 + 度, BGR(255, 255, 255)) 画扇形(gg, 120, 120, j, i + 18 + 度, i + 13 + 度, color2) Next 度 += 9 Next gg.Redraw Do If IsKeyPress(VK_SPACE) Then Exit Do'按下了空格键" Sleep 100 Loop Loop End Sub 练习题4-4:gg.DrawLine (x1, y1, x2, y2)可以画一条直线,(x1,y1)、(x2,y2)为直线两个端点的坐标。尝试绘制图4-15所示的围棋棋盘。 练习题4-5:利用画线函数和循环语句,尝试绘制图4-16所示的错觉图片。其错觉原理和“旋转蛇”错觉原理一样,第1行、第3行图片好像在向左移动,第2行、第4行图片好像在向右移动。
2026年-1月-21日
41 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.6_HSB颜色模型
除了RGB颜色模型外,还有一种根据颜色的直观特性创建的颜色模型——HSB,如图4-12所示。 H是Hue的首字母,表示色调,取值范围为0~360,刻画不同的色彩,比如红色为0,绿色为120,蓝色为240;S是Saturation的首字母,表示饱和度,取值范围为 0% -- 100%,表示混合了白色的比例,值越高颜色越鲜艳;B 表示亮度度,取值范围为0% -- 100%,等于0时为黑色,等于100时最明亮。 输入并运行以下代码: Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 0, 0 '设置线条为没有 Dim i As Long For i = 0 To 350 Step 10 画扇形(gg, 120, 120, 110, i+10, i , HSBtoRGB_Gdi(HSB(i, 100, 100, 255))) Next End Sub 其中,HSB() 函数获得 HSB的颜色值。HSBtoRGB_Gdi( )函数可以将HSB颜色转换为RGB颜色,变量i的值从0变到360,HSBtoRGB_Gdi(i,100,100)则得到了光谱上各种单色的效果。如图所示。 利用随机数和HSV颜色模型,可以生成一组两种颜色的值: Randomize Dim h As Long = int(Rnd * 18)*10 Dim color1 As COLORREF = HSBtoRGB_Gdi(HSB(h, 90, 80, 255)) Dim color2 As COLORREF = HSBtoRGB_Gdi(HSB(h + 180, 90, 80, 255)) 其中,颜色1的色调h在0~180,颜色2的色调为h+180,修改代码,可以实现每个圆盘的随机颜色效果: 所有代码 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 0, 0 '设置线条为没有 Dim i As Long, j As Long, 度 As Long Dim As Long centerX, centerY For centerX = 70 To 310 Step 120 For centerY = 70 To 190 Step 120 Randomize Dim h As Long = int(Rnd * 18)*10 Dim color1 As COLORREF = HSBtoRGB_Gdi(HSB(h, 90, 80, 255)) Dim color2 As COLORREF = HSBtoRGB_Gdi(HSB(h + 180, 90, 80, 255)) For j = 60 To 20 Step -20 For i = 0 To 350 Step 18 画扇形(gg, centerX, centerY, j, i + 3 + 度, i + 0 + 度, BGR(0, 0, 0)) 画扇形(gg, centerX, centerY, j, i + 8 + 度, i + 3 + 度, color1) 画扇形(gg, centerX, centerY, j, i + 13 + 度, i + 8 + 度, BGR(255, 255, 255)) 画扇形(gg, centerX, centerY, j, i + 18 + 度, i + 13 + 度, color2) Next 度 += 9 Next Next Next End Sub 假如需要 HSB颜色,VFB已经直接提供 其中,A值是透明度。在画画中不支持HSB,需要转换函数转换为 RGB
2026年-1月-21日
54 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.5_循环的嵌套
for循环语句可以嵌套,输入并运行以下代码: Sub 游戏执行过程(hWndForm As hWnd) Dim As Long i, j Dim 输出 As String For i = 1 To 9 输出 = "" For j = 1 To 9 输出 &= Right(" " & Str(i*j),3) Next Print 输出 Next End Sub 在VFB上,点击工具栏最后一个,选择带控制台,这是为了更好的查看打印输出 程序运行后输出:(带控制台后,输出在控制台) 代码中有两重的for循环语句,首先对于外层循环,i的值初始化为1,内层循环j的取值范围为1~9,依次输出ij的值,因此首先输出第一行: 当内层循环j遍历结束后,输出一个换行符。回到外层i循环,i取值变为2,j取值范围为1~9,依次输出ij的值: 如此继续循环,直到输出完整的乘法表。 练习题4-2:尝试修改代码,打印出如下带表头的九九乘法表。 利用双重for循环语句,可以绘制出图4-9所示的多层圆盘。注意,需要先绘制半径大的扇形,再绘制半径小的扇形,因为先绘制的会被后绘制的遮挡。另外,不同半径的扇形之间有9度偏移量。 完整代码 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 0, 0 '设置线条为没有 Dim i As Long, j As Long, 度 As Long For j = 110 To 30 Step -25 For i = 0 To 350 Step 18 画扇形(gg, 120, 120, j, i + 3 + 度, i + 0 + 度, BGR(0, 0, 0)) 画扇形(gg, 120, 120, j, i + 8 + 度, i + 3 + 度, BGR(255, 0, 0)) 画扇形(gg, 120, 120, j, i + 13 + 度, i + 8 + 度, BGR(255, 255, 255)) 画扇形(gg, 120, 120, j, i + 18 + 度, i + 13 + 度, BGR(0, 255, 255)) Next 度 += 9 Next End Sub 进一步,对圆心坐标变量centerX、centerY用for循环遍历,就可以绘制出多个圆盘效果 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 0, 0 '设置线条为没有 Dim i As Long, j As Long, 度 As Long Dim As Long centerX, centerY For centerX = 70 To 310 Step 120 For centerY = 70 To 190 Step 120 For j = 60 To 20 Step -20 For i = 0 To 350 Step 18 画扇形(gg, centerX, centerY, j, i + 3 + 度, i + 0 + 度, BGR(0, 0, 0)) 画扇形(gg, centerX, centerY, j, i + 8 + 度, i + 3 + 度, BGR(255, 0, 0)) 画扇形(gg, centerX, centerY, j, i + 13 + 度, i + 8 + 度, BGR(255, 255, 255)) 画扇形(gg, centerX, centerY, j, i + 18 + 度, i + 13 + 度, BGR(0, 255, 255)) Next 度 += 9 Next Next Next End Sub 练习题4-3:尝试利用嵌套的for循环语句,绘制出图中的效果。
2026年-1月-21日
41 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.4_for循环语句
为了绘制完整的“旋转蛇”错觉图片,我们可以利用for循环语句。首先输入并运行以下代码 Sub 游戏执行过程(hWndForm As hWnd) Dim i As Long For i = 1 To 5 Print i Next End Sub 程序运行后输出: for语句中,首先执行i=1;。 然后判断i<=5是否满足,此时1<=5正确,执行print i 输出1,遇到 Next 回到For 执行,运行i=i+1;,此时i=2。 继续判断i<=5是否满足,此时2<=5正确,执行print i,输出2,运行i=i+1;,此时i=3。 继续循环,当i=5时,5<=5正确,执行print i输出5,运行i=i+1;,此时i=6。 继续判断i<=5是否满足,此时6<=5不正确,for循环结束。执行 Next 后面的语句。 利用for语句,以下代码可以绘制出多层同心圆: Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 1, BGR(229, 0, 0) '设置红色线 gg.Brush '无填充 Dim i As Long,x As Long ,y As Long For i = 5 To 100 Step 5 x = 120 - i y = 120 - i gg.DrawEllipse x,y,i*2,i*2 '画圆 Next End Sub 利用for语句绘制出20组扇形单元 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 1, BGR(229, 0, 0) '设置红色线 gg.Pen 0, 0 '设置线条为没有 Dim i As Long For i = 0 To 350 Step 18 画扇形(gg, 120, 120, 110, i+3, i+0, BGR(0, 0, 0)) 画扇形(gg, 120, 120, 110, i+8, i+3, BGR(255, 0, 0)) 画扇形(gg, 120, 120, 110, i+13, i+8, BGR(255, 255, 255)) 画扇形(gg, 120, 120, 110, i+18, i+13, BGR(0, 255, 255)) Next End Sub
2026年-1月-21日
47 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.3_绘制一个扇形单元
下图展示了“旋转蛇”错觉图片的一个基本单元,一般由两组共4种颜色组成。人脑处理高对比度颜色(比如,黑与白)的时间,要比处理低对比度颜色(比如,红与青)短很多。我们会先感知到图中的黑白图案,后感知到红青图案,这个时间差会让图片产生相对运动的效果,所以我们会有图片旋转的错觉。 先画一组: Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(180, 180, 180) 'GDI的颜色值。 gg.Pen 1, BGR(229, 0, 0) '设置红色线 gg.Pen 0, 0 '设置线条为没有 画扇形(gg, 120, 120, 110, 3, 0, BGR(0, 0, 0)) 画扇形(gg, 120, 120, 110, 8, 3, BGR(255, 0, 0)) 画扇形(gg, 120, 120, 110, 13, 8, BGR(255, 255, 255)) 画扇形(gg, 120, 120, 110, 18, 13, BGR(0, 255, 255)) End Sub
2026年-1月-21日
56 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.2_RGB颜色模型
当我们需要在代码中输入颜色时,点击这个按钮 出现的颜色对话框,点击一个颜色即可,颜色选择 RGB 会在代码处,自动插入代码 提示: 代码中函数是 BGR(r,g,b) 参数顺序是 r,g,b ,另外函数名 RGB(b,g,r) 需要反过来参数,结果是一样的。 因此我选择了,参数顺序习惯,用了 BGR(r,g,b) 根据三原色原理,任何色彩均可由红(Red)、绿(Green)、蓝(Blue)3种基本颜色混合而成,如图所示。 代码 Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm gg.Cls BGR(255,255,255) '使用白色为底色 gg.Pen 1, BGR(229, 0, 0) '设置红色线 gg.Brush '不填充 gg.DrawEllipse 10, 10, 220, 220 '画红线圆形 gg.Pen 0, 0 '设置线条为没有 画扇形(gg,120,120,110, 330,300,BGR(0,229,0) ) End Sub 绘制效果如图所示。 练习题4-1:尝试绘制出图所示的效果
2026年-1月-21日
70 阅读
0 评论
VisualFreeBasic编程文档
2026-1-21
VisualFreeBasic游戏趣味编程_4.1_绘制扇形
“旋转蛇”错觉图片可由不同颜色的扇形组合而成。 VFB里并没有画扇形,需要自己写一个过程,照抄下面代码即可。 Sub 画扇形(gg As yGDI, 圆心x As Long, 圆心y As Long, 半径 As Long, 开始角度 As Long, 结束角度 As Long, 填充颜色 As Long) Dim As Long 圆x, 圆y, 圆r, 圆b, 开始x, 开始y, 结束x, 结束y Dim pi As Single = 3.1415926 / 180 圆x = 圆心x - 半径 圆y = 圆心y - 半径 圆r = 圆心x + 半径 圆b = 圆心y + 半径 开始x = 圆心x + 半径 *Cos(开始角度 * pi) 开始y = 圆心y + 半径 *Sin(开始角度 * pi) 结束x = 圆心x + 半径 *Cos(结束角度 * pi) 结束y = 圆心y + 半径 *Sin(结束角度 * pi) gg.Brush 填充颜色 Pie gg.m_Dc,DpiScaleI(圆x), DpiScaleI(圆y), DpiScaleI(圆r), DpiScaleI(圆b), DpiScaleI(开始x), DpiScaleI(开始y), DpiScaleI(结束x), DpiScaleI(结束y) End Sub Sub 游戏执行过程(hWndForm As hWnd) Dim gg As yGDI = hWndForm 画扇形(gg,120,120,110, 0,90,BGR(255,26,26)) End Sub 输入并运行代码,即可绘制出所示的图形 提示: 代码中的 DpiScaleI(圆x),... 是为了支持自动响应 系统DPI ,让自己写的软件,不管拿到什么电脑上,都显示效果一样。
2026年-1月-21日
50 阅读
0 评论
VisualFreeBasic编程文档
11
12
13
14
15