-
VisualFreeBasic游戏趣味编程_6.5_新圆半径最大化
为了进一步改进图案效果,在这一节中让生成的新圆半径尽量大。rmin为圆的最小半径,rmax为圆的最大半径。首先在随机位置(x,y)处生成半径为rmin的圆,如果生成的新圆和之前已生成的圆相交,如图6-6中“1”处所示,则放弃该圆,重新随机生成。如果生成的新圆和之前已生成的圆都不相交,如图6-6中“2”处所示,则不断增大新圆的半径,直至找到第一个与该圆相切的圆,或者达到rmax为止。While圆的个… -
VisualFreeBasic游戏趣味编程_6.4_函数的定义与应用
FB程序是由函数组成的,每一个FB程序都包含这样的结构:SubForm1_Shown(hWndFormAshWnd,UserDataAsInteger)ThreaddetachThreadCreate(Cast(AnyPtr,@游戏执行过程),hWndForm)EndSubSub游戏执行过程(hWndFormAshWnd)EndSub在之前的章节中,我们已经调用了很多函数,比如,print()函数… -
VisualFreeBasic游戏趣味编程_6.3_新圆不和已有圆相交
假设有两个圆,其圆心坐标分别为(x1,y1)、(x2,y2),半径分别为r1、r2,如图6-4所示。记录两个圆心之间距离的平方dist2=(x1−x2)(x1−x2)+(y1−y2)(y1−y2)。当两个圆正好相切时,圆心距离平方r2=(r1+r2)(r1+r2)。当dist2 -
VisualFreeBasic游戏趣味编程_6.2_每次增加一个随机圆
为了显示圆生成的过程,我们修改6-1的代码,实现每隔100毫秒,添加一个随机圆并绘制。完整代码参看Sub游戏执行过程(hWndFormAshWnd)DimggAsyGDI=hWndFormDim圆心x(99)AsLong'数组存储所有圆心的x坐标Dim圆心y(99)AsLong'数组存储所有圆心的y坐标Dim半径(99)AsLong'数组存储所有圆的半径Dim圆的个数AsLong=100Dim游戏… -
VisualFreeBasic游戏趣味编程_6.1_利用数组记录多个随机圆
本节讲解如何利用数组记录生成100个随机圆首先定义3个数组存储所有圆的圆心坐标、半径:Dim圆心x(99)AsLong'数组存储所有圆心的x坐标Dim圆心y(99)AsLong'数组存储所有圆心的y坐标Dim半径(99)AsLong'数组存储所有圆的半径设定圆的个数=100,在for循环中随机生成圆心坐标、半径,并存储在数组中:'生成圆,把数据保存在数组中DimiAsLongFori=0To圆的个… -
VisualFreeBasic游戏趣味编程_第6章_“见缝插圆”游戏
在本章我们将探讨如何绘制一些漂亮的随机图案,如图6-1所示,随机生成的圆互不相交且尽量填满画布,按空格键可以切换不同的绘制模式。本章首先分析了如何利用数组实现多个圆的生成和绘制,并使得圆和圆之间不相交;然后介绍了函数的概念、如何应用函数改进代码,以及如何实现添加新圆半径最大化的功能;最后讲解了如何利用函数封装多种绘制模式,并通过键盘按键进行互动。 -
VisualFreeBasic游戏趣味编程_5.7_得分与显示效果改进
定义整型变量记录游戏的得分,并初始化为0DimscoreAsLong'得分当用户按空格键并且游戏没有失败,则得分增加1:score=score+1'得分+1最后将score转换为字符串输出:gg.Font"黑体",14gg.SetColorBGR(0,178,0)'文字颜色gg.DrawString5,90,"得分:"&score'显示得分填充绘制圆盘,随着针数的增加,圆盘填充颜色越来越鲜艳:gg… -
VisualFreeBasic游戏趣味编程_5.6_游戏失败判断
当新增加的针和已有针发生碰撞时,游戏失败。在此设定当两根针的旋转角度差的绝对值小于0.5度时,认为两根针足够接近,即发生了碰撞,然后退出游戏循环IfIsKeyPress(VK_SPACE)Then'按下空格键IflineNum -
VisualFreeBasic游戏趣味编程_5.5_针的发射与新增
首先在画面左边绘制一根针,表示待发射针的位置:gg.DrawLine0,120,100,120假设初始状态下没有针在旋转:DimlineNumAsLong=0浮点数数组存储所有可能针的旋转角度,假设最多有1000根针DimAngles(999)AsSingle当用户按下空格键时,针的个数加1,并且新增加的针初始角度为PI。用户不断按下空格键,即可持续生成新的针IfIsKeyPress(VK_SPA… -
VisualFreeBasic游戏趣味编程_5.4_批量绘制函数
当绘制的元素较多时,会出现明显的画面闪烁,这时可以使用批量绘图函数。以上情况是在使用普通绘图必须要做的事情。然而我们用的是yGDI绘图类(可以查看VFB代码绘图篇)DimggAsyGDI有缓冲,绘图快。不需要考虑这些问题。