VF游戏设计_贪吃蛇

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

游戏规则:移动“蛇”,使“蛇”
吃掉“食物”(即“蛇”与“食物”
重合)。

操作要求:单击“开始”按钮,
“蛇”开始移动。

游戏者可通过操作键
盘上的“↑”、“↓”、“←”、
“→”键来控制“蛇”的移动方向,使
“蛇”能够准确吃掉“食物”。

如果正
确吞吃一次,“蛇”身将会自动增长一
节,速度增加10s;反之,如果“蛇”
在移动过程中撞到活动界面的边界线或碰
到自己的身体,游戏结束。

通过游戏规则和操作要求的介绍,我
主要从以下四个方面来介绍该款游戏的设
计。

一、游戏界面部分的设计
“蛇”的活动界面是一个9×9的方
格。

这部分可利用容器控件Container1的
Init初始化事件在容器控件Container1中
增加9行9列81个标签控件对象lab1 ̄lab81
来实现。

容器控件Container1的Init事件代码
如下:
public lab[9,9]
for i=1 to 81
k=ALLT(STR(i))
this.addobject('lab&k','Label')
lab[i]=this.lab&k
endfor
for i=1 to 9
for j=1 to 9
with lab[i,j]
.left=25*(j-1)+2
.top=20*(i-1)+2
.height=20
.width=25
VF游戏设计——贪吃蛇
王宏宇 辽宁石油化工大学职业技术学院 113001
我们都知道Visual FoxPro 是一种数
据库管理语言,它简单、易学、易用,
并因其可视化编程技术的完美表现和SQL
语言功能的强大已成为编写数据库管理系
统的主要语言之一。

但也正是因为它在
数据库方面的广泛应用,使很多人认为
它就只能在数据库系统中进行存取数据和
管理资源的工作。

其实,利用它我们还
可以做很多其它的事情,现在我就给大
家介绍一款利用Visual FoxPro精美的控
件和丰富的程序语句编写的游戏——
“贪吃蛇”。

图1所表示的就是“贪吃蛇”的主
界面,“蛇”由黑色方块表示,“食
物”由深灰色方块表示。

.visible=.t.
.caption=''
.borderstyle=1
.forecolor=rgb(128,128,128)
.alignment=2
endwith
endfor
endfor
二、“蛇”的自动移动部分的设

“蛇”的移动是比较重要和较难设
计的部分,这一点我们主要从两方面考
虑,一是如何控制“蛇”的移动方向,
另一方面是如何使“蛇”自动移动。

1.“蛇”的移动方向部分设计
这部分可利用表单的键盘事件
KeyPress响应键盘上的“↑”、
“↓”、“←”、“→”键来控制
“蛇”的上、下、左、右四个方向。

表单Form1的KeyPress键盘事件代
码如下:
LPARAMETERS nKeyCode,
nShiftAltCtrl
do case
case nKeyCode=5
t=1
case nKeyCode=24
t=2
case nKeyCode=19
t=3
case nKeyCode=4
t=4
endcase
2.“蛇”的自动移动部分设计
“蛇”的移动可分为三种情况:
一是“蛇”向“食物”方向的移
动。

也就是如何根据“蛇”的移动方向图1 游戏主界面
使“蛇”向前移动。

二是“蛇”在移动过程中正确吞吃“食物”后的移动。

也就是当“蛇”与“食物”重合时,如何使“蛇”自动增长一节,并仍按原移动方向向前移动。

三是“蛇”在移动过程中碰到自己身体或活动界面的边界线后如何结束程序。

以上三种情况可以利用计时器控件Timer1的Timer计时事件每隔1秒循环执行来完成。

计时器控件Timer1的Timer事件代码如下:
do case case t=1 a1=a1-1 if a1=0 thisform.ts endifcase t=2 a1=a1+1 if a1=10 thisform.ts endif case t=3 a2=a2-1 if a2=0 thisform.ts endif case t=4 a2=a2+1 if a2=10 thisform.ts endifendcase
lab[a1,a2].backcolor=rgb(0,0,0)for i=1 to n
if b[1,a1]=b[1,i]andb[2,a2]=b[2,i] thisform.ts endifendfor
if a1=x1 and a2=x2 n=n+1 if n<100
this.interval=1000-s*10 thisform.n else
thisform.ts
endifelse
lab[b[1,n],b[2,n]].backcolor=rgb(236,233,216)
endif
for m=n to 2 step -1 b[1,m]=b[1,m-1] b[2,m]=b[2,m-1]endforb[1,1]=a1b[2,1]=a2
三、“食物”位置部分的设计
“食物”出现的位置应该是随机的,但必须注意的是“食物”出现的位置不能是上一次出现的位置,也不能与“蛇”重合(即在“蛇”身位置出现)。

这部分可利用计时器控件Timer1调用表单Form1的自定义方法aim来自动完成。

表单Form1的自定义方法aim的调用参见上一个程序,表单Form1的自定义方法aim的代码如下:
public x1public x2yes=1
do while yes=1 x1=int(rand()*8+1) x2=int(rand()*8+1) yes=0 for i=1 to n
if x1=b(1,i) and x2=b(2,i) yes=1 endif endforenddo
thisform.Timer2.enabled=.t.
四、结束程序部分的设计
当“蛇”在移动过程中碰到自己身体或活动界面的边界线时游戏结束。


戏结束时“蛇”应该停止移动,并且“食物”停止闪动。

而且为了告知游戏已结束,并能快速返回游戏开始界面我们还可以使用一个如图2所示的提示对话框,这样就可以一举两得了。

这部分也是利用计时器控件Timer1调用表单Form1的自定义方法end来实现的。

表单Form1的自定义方法end的调用参见第二部分,表单Form1的自定义方法end的代码如下:
thisform.Timer1.enabled=.f. thisform.Timer2.enabled=.f. mes=MESSAGEBOX("游戏结束!是否重新开始?",4+48+0,"提示")
 if mes=6 for i=1 to n
lab[b[1,i],b[2,i]].backcolor=rgb(212,208,200)
endfor
lab[x1,x2].backcolor=rgb(212,208,200)
a1=5 a2=3 n=3 t=4 p=1
this.command3.enabled=.f. else
thisform.releaseendif
this.Command2.caption="开始"以上所讨论的几点只是该游戏设计程序中的四个部分,其它部分可由读者自己来设计完成。

通过该游戏的介绍,我希望能够扩展读者的视野,增加学习Visual FoxPro的兴趣,真正了解Visual FoxPro各控件的属性和功能,灵活使用Visual FoxPro的编程语言,能够在娱乐的同时加强Visual FoxPro基础知识的掌握。

当然我的设计还可以进一步改进,例如可以增加一个速度调节控件,根据需要来增加和减缓“蛇”的移动速度;把“开始”、“结束”和“退出游戏”按钮改成菜单形式等,这里我只是起一个抛砖引玉的作用,其他的读者可根据需要再进一步完善。

图2 游戏结束界面。

相关文档
最新文档