《贪吃蛇VB程序代码》由会员分享,可在线阅读,更多相关《贪吃蛇VB程序代码(5页珍藏版)》请在金锄头文库上搜索。
1、题 目 : 贪 吃 蛇 游 戏难 度 : ( 一 )题目简介“贪吃蛇”是一种操作简单电子,较经典的游戏。基本的游戏玩法:一条蛇在格子上爬行,用方向键控制其运动;当蛇的头部碰到设定的数字时会将数字(15) “吃掉” ,蛇的身体会按相对应的数字变长。不同的数字代表得分,累加记录。选择障碍物类型,调节速度,开始游戏。蛇的头部撞到障碍物或自己身体时,游戏结束。游戏结束后会对所得的分数处理,若为最佳,则设为记录保持者,留下大名!( 二 )要求功能(1)程序启动时界面上棋盘由 20*20 个方格构成。开始时,蛇静止不动,位于地图设置好的初始位置。身体由一串共 5 个圆圈表示,代表头部的圆圈为绿色,身体黄色
2、,且有两个黑色眼睛。(2)按回车键开始游戏,蛇自动在棋盘上向前爬行,用户可以使用“ ”4 个方向键控制其拐弯以不至于碰到障碍物或自己。蛇身只可以向前走或向左右转 90 的弯,不能后退。蛇吃掉一个数字后,身体伸长的幅度对应于数字的大小。例如:吃掉“2”后,蛇身伸长 2 个圆圈。蛇身的伸长不是一下子完成的,而是在吃掉数字后一边爬行一边伸长的,这样是为了避免蛇的“尾巴”突然伸长撞到障碍物或蛇自己,以至死亡。(3)5 个数字(1- 5)的位置是随机的,并且互不重叠,且不能出现在障碍物和蛇的身上。当蛇吃掉一个数字时,同样的数字随机地出现在其他位置上,即棋盘上总保持有“1- 5” 5 个数字。(4)使用开
3、始键可以暂停或继续游戏。游戏进行时,窗体下部状态栏上显示出玩家的得分、游戏时间、速度调节和声音开关。(5)蛇在爬行时,如果其头部碰到墙壁或身体,则被“撞死” ,游戏结束。程序回到游戏开始状态,如果该用户的成绩超过了记录成绩,则显示对话 框,提示输入用户名,由排行榜显示成绩。 (6)通过程序菜单的“开始/暂停”命令,也可以暂停或继续游戏(与回车键的功能相同) 。选择“新开局”菜单可以从头进行游戏。(7)选择“设置”菜单命令,弹出对话框,可以进行各项设置,包括障碍物形状,颜色,背景颜色,设置完毕后单击确定按钮即可从头开始游戏。(8)选择“排行榜”菜单打开“排行榜”对话框,显示出每种障碍物下的最高成
4、绩。选择“清除”按钮可以将记录清空。更上一层楼(1)添加了多条命,总共有 3 条命。(2)添加了背景音乐,当开始,吃到食物,撞死的时候有不同的音乐。(3)在主界面上添加了几个控件来显示得分,用时。(4)添加了速度调节器,可以方便调节速度的大小。( 三 )设计思路(1) 结构分析:程序须拥有四个窗体:游戏主窗体、设置窗体、排行榜窗体和游戏说明窗体和一个标准模块(定义一些全局的量) 。(2) 主窗体 Frm Main:应用的功能:运行游戏,联系其他的窗体,实现操作-如图所示:主要是一个图片框,里面包含了必要的图形。设计图形有一到五 共五个彩色图标,分别代表食物的不同数值。蛇头的基本图形为一个圆形(
5、20*20 象素值) 。 两个黑的圆圈是蛇的眼睛,为两个圆,其大小与蛇头相匹配。两条线是“line”控件数组,应用其画线,即绘制 20*20 的方格。其中有一个音乐图片,目的是指示音乐选择键的位置!设置主要控件:“line” “checkbox” “command button” “timer” “HScrollbar”“label”以及 “菜单编辑器” 。“timer” 设计须两个控件,一个记录用时!一个应用于控制蛇的运行情况。“check box” 是为了利用它的“VALUE”属性作为音效开关。“label” 主要是起到说明的作用,指示如何控制游戏。“command button” 分别利
6、用语句记录用时,与时间。“HScrollbar” 利用其“VALUE”属性附值于“timer”的时间间隔,用于调节蛇爬行的速度。“菜单编辑器” 用于联系其他的窗体,构成一个整体。可以调用另外的窗体,可以查看排行榜,进行选项设置。(2)设置窗体 Frmsetup:左图为窗体样图。 设置窗体主要是为了提供各个玩者不同选择,只是对一些“环境”信息进行修改,并不涉及主要的运行情况。按照功能要求:需列表框显示障碍物类型,图片框来绘制示例图形。另外要拥有颜色设置,有一个控件“CommonDialog”来提供颜色!设计的两个命令按钮起到“联系”的作用:确定,取消均进入主界面。“Listbox”控件:应用其添
7、加及删除信息条目的功能,从文件中读取信息。利用其“INDEX”属性进行条目的识别,从而把文字“代码化” ,方便了下面的编程。(4)排行窗体 Frmrecord:样图如主要功能是记录各个障碍物类型的最高的分,清除历史记录等。主要应用的控件是“Label”控件数组。利用到数组同名但是“INDEX”的特点,分别记录各个类型障碍物的相关信息,与设置窗体中的“Listbox”控件的“INDEX”属性相对应。其他一些是说明性文字, “关闭”是为了回到主界面中去,也是起到一种联系的作用。(5)说明窗体 Frmhelp:说明一下游戏规则。加图片为了美观,一个通过设置属性可以多行显示的文本框。“确定”按钮为了回
8、到主窗体, “联系”作用。(四)游戏的运行(代码):蛇身的长度起始设置为五段,如左图为游戏初始化准备:利用 Form_Load()事件Private Sub Form_Load()设置初始的一些运行的信息:life = 3 生命为 3hs.Value = 15000 Pic.BackColor = lngBackColorPic.Left = 20 位置信息 Pic.Top = 20 打开所须的文件调以便用其过程读取信息如:Call OpenMaze 打开关于障碍的文件 Call OpenRecord 打开关于记录的文件Call DrawMaze 画出障碍物 Call DrawSnake 画出
9、蛇Call ShowNumberAll 画出所有的食物(数字 1-5)还有其他一些,暂不列举!游戏开始运行 : 应用的是“Timer”事件确定时间的间隔,利用循环语句进行运行直到满足一定的条件才可以进行主要程序语句。 蛇的移动有已经定义好了的关于方向的函数控制。每次移动的单位距离为一个定值,利用的是“Select Case”语句进行选择方向。其中对于移动到了边界都做了分析处理,用“If shp(i).Left 19 * Twenty Then shp(i).Left = 0”等四条语句。For i = sheNum To 2 Step -1sheDirect(i) = sheDirect(i
10、- 1)Next 利用循环进行将运动传递下去,让每节蛇身均跟随运动。吃到数字:应用的依然是循环,以便包括所有的情况。通过蛇头位置的判断,与数字位置的比较,利用循环囊括五个数字;吃到食物便会增加得分,增长蛇身段数,运行音乐片段等等。游戏结束:- 如图是一种死亡的情况,蛇吃到了自己的身体。另外遇到障碍物也是回损失一次生命。当生命结束时给予一个对话框内容为“游戏结束,欢迎下次再玩” (效果如左图) ,生命值不为零则内容为“ 失去一条命,下次要小心!” 。处理过程首先是定义了一个“BOOLEAN”型变量“game_over”用于判断是否死亡;定义“LIFE”判断是否生命值为零(结束游戏) 。结束会再次
11、为初始化做准备,可以在开始游戏。( 五 )主要难点,问题解决(1)关于画格子的问题:开始是在必然要运行的“form_load”事件中编写了对于“PIC”的画线语句,最终没画出来。便想其他的方法,参照借来的书本知道有“LINE”可以用,但是画多个格子又把“LINE”设置为控件数组,仿照例子编写,得以画出图形(网格,大小问题没解决) 。后来我把Autoredraw 属性设为“True”时, “PIC”也可以画出图形,但还是选择了用“LINE”感觉方便些。大小的解决为了方便把图片框中的单位设置为象素,这样 20 个象素大小与题目要求相符,大小也合适!(2)放置食物(数字):最初用的是“DO LOOP”语句循环,有时候会死循环或者是食物出现在不当的地方。很多循环嵌套,我重新改写了这段代码。利用到了“GO TO”语句,解决了问题,语句也不是很麻烦。(3)各数组打开,读写文件信息 : 这是我遇到的最难的问题,一直很难,问了别人,也查找了一些相关的程序代码和得以完成。也直接借用了一些文本资源。其过程很复杂,数组的利用多是二维数组,相对应的关系老是出错。