-
VisualFreeBasic游戏趣味编程_7.6_失败判断与显示
定义全局变量isFailure表示游戏是否失败,初始化为0:DimSharedisFailureAsLong'是否游戏失败当小蛇碰到画面边界时,则认为游戏失败。由于每次只有蛇头是新生成的位置,所以在moveSnake()函数中只需判断蛇头是否越过边界:IfnewHead_i>=BLOCK_HEIGHTOrnewHead_i=BLOCK_WIDTHOrnewHead_j0ThenisFailure=… -
VisualFreeBasic游戏趣味编程_7.5_时间控制的改进
之前代码通过在updateWithoutInput()函数中调用Sleep()函数来降低小蛇的移动速度。然而Sleep()函数运行时,整个程序都会暂停,包括用户输入模块。用户会感觉到卡顿,明明按了键,小蛇却没有反应。为了解决这一问题,这一节介绍动态变量、静态变量的概念。输入并运行以下代码:Subfun()DimmAsLongm+=1PrintmEndSubSub游戏执行过程(hWndFormAsh… -
VisualFreeBasic游戏趣味编程_7.4_控制小蛇向4个方向移动
变量oldHead_i、oldHead_j存储移动前的蛇头位置(对应元素在二维数组中的行号、列号),newHead_i、newHead_j存储移动后的蛇头位置。小蛇向上移动,只需把新蛇头的坐标设为旧蛇头的上方即可,如图7-6所示。在7-3代码的基础上修改代码就可以让小蛇向上移动:newHead_i=oldTail_j-1'向上移动进一步,我们让玩家用键盘控制小蛇的移动。除了上、下、左、右键外,很多… -
VisualFreeBasic游戏趣味编程_7.3_小蛇向右移动
实现小蛇的移动功能是“贪吃蛇”游戏的开发难点,图7-4列出了小蛇向右移动前后二维数组的元素值,虚线框内为对应代码的实现步骤:假设小蛇初始元素值为54321,其中1为蛇头、5432为蛇身、最大值5为蛇尾。首先将二维数组中所有大于0的元素加1,得到65432;然后将最大值6变为0,即去除了原来的蛇尾;最后将2右边的元素由0变成1,即实现了小蛇向右移动。定义函数moveSnake()处理小蛇移动的相关操… -
VisualFreeBasic游戏趣味编程_7.2_基于二维数组的游戏地图
为了实现图7-1中网格状的游戏地图效果,这一节介绍二维数组的概念。首先输入并运行以下代码:Sub游戏执行过程(hWndFormAshWnd)Dima(2,4)AsLongDimiAsLong,jAsLongFori=0To2Forj=0To4a(i,j)=i*10+jNextNextFori=0To2Forj=0To4Printa(i,j)NextNextEndSub其中,Dima(2,4)AsL… -
VisualFreeBasic游戏趣味编程_7.1_变量作用域与游戏框架
在程序中变量起作用的范围,称为变量的作用域。根据作用域的不同,FB语言中的变量可分为局部变量和全局变量。在函数内部定义的变量称为局部变量,其作用域从变量定义处开始,到}处结束。Subfun()DimaAsLong'局部变量,仅能在fun函数内部使用a=10EndSubSub游戏执行过程(hWndFormAshWnd)DimxAsLong'局部变量,仅能在函数内部使用x=1EndSub在以上代码中,… -
VisualFreeBasic游戏趣味编程_第7章_“贪吃蛇”游戏
在本章我们将探讨如何编写“贪吃蛇”游戏,效果如图7-1所示。键盘控制小蛇上、下、左、右移动,吃到食物后长度加1;蛇头碰到自身或窗口边缘,游戏失败。本章首先探讨了如何利用全局变量和函数的知识,设计一个游戏开发框架;然后介绍了二维数组的知识,构造地图和小蛇的方法,解析了如何实现小蛇向4个方向移动;接着讲解了静态变量的概念,以及如何进行时间控制的改进;最后讲解了如何实现失败判断与显示、吃食物增加长度的功… -
VisualFreeBasic游戏趣味编程_6.7_按键互动
当按下空格键后,将circleNum设为0,相当于清除所有已有的圆;将drawMode加1,从而切换为下一种绘图模式:DoIfIsKeyPress(VK_SPACE)Then'按下空格键drawMode+=1IfdrawMode>4ThendrawMode=1ExitDoEndIfSleep100Loop全部代码Sub游戏执行过程(hWndFormAshWnd)DimggAsyGDI=hWndFo… -
VisualFreeBasic游戏趣味编程_6.6_函数封装多种绘制效果
对于圆心坐标(x,y)、半径r的圆,定义4个函数,可以实现不同的绘制效果:'填充黄色圆绘制SubDrawCircles1(ggAsyGDI,xAsLong,yAsLong,rAsLong)gg.Pen1,BGR(105,105,105)'GDI的颜色值。gg.BrushBGR(204,204,0)'GDI的颜色值。gg.DrawEllipsex-r,y-r,r*2,r*2EndSub'填充随机颜色… -
VisualFreeBasic游戏趣味编程_6.5_新圆半径最大化
为了进一步改进图案效果,在这一节中让生成的新圆半径尽量大。rmin为圆的最小半径,rmax为圆的最大半径。首先在随机位置(x,y)处生成半径为rmin的圆,如果生成的新圆和之前已生成的圆相交,如图6-6中“1”处所示,则放弃该圆,重新随机生成。如果生成的新圆和之前已生成的圆都不相交,如图6-6中“2”处所示,则不断增大新圆的半径,直至找到第一个与该圆相切的圆,或者达到rmax为止。While圆的个…