c贪吃蛇实现完整流程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最近老有人问我那个俄罗斯方块游戏的代码,解释了半天,觉得麻烦,干脆再做一个更简单的小游戏,贪吃蛇,和俄罗斯方块是一样的思路,只不过游戏相对俄罗斯方块来说简单了很多,把这个小游戏给大伙讲一下,希望对一些C#的初学者有帮助。游戏很简单,通过WASD或上下左右几个按键控制贪吃蛇的前进方向,这个估计全世界都知道,先看一下游戏运行效果吧 其中黑色的事物,红色是贪吃蛇,由于考虑到越简单越好,就没有追求过多的美化和修饰 看一下程序结构吧 程序结构很简单,一个Form,两个Class FormMain是程序主界面,里面就一个PictureBox控件 Block类是“蛇块”类,我不知道怎么换个词来描述,这个类就是用于描述蛇身子一节一节的信息,从运行效果图上可以看到就是那一个一个小方块的信息,等价于俄罗斯方块里的砖块信息类 Palette类就是主画布,是游戏的主要代码,和俄罗斯方块里的画布是一样的作用。 从结构上可以看出,整个工程很简单,应该还算比较好理解吧。 下一篇给大伙从头到尾的把整个工程重现一遍。呵呵,如果是高手的话,请勿见笑,初学者的话大可以“拿来主义”一下。 上一篇我们简单介绍了一下程序结构,接下来我们从头到尾把整个游戏重现一下 1.新建一个Windows 应用程序,起名Snake吧 2.重命名Form1,改为FormMain。这是我的个人偏好,不改也行。 3.从工具栏里拖放一个picturebox到FormMain上面,设置属性 picturebox1的BorderStyle属性选择为FixedSingle,这样能显示边框 FormMain的KeyPreview属性设定为True,这样整个窗体可以响应键盘按键事件,这个在俄罗斯方块那个里面讲过了 设定完以后大概应该是整个样子 需要补充一下的是,这里面form的大小和picturebox的大小是不用刻意设置的,因为我们程序里面会根据设定贪吃蛇的大小和贪吃蛇的活动空间自动变大变小的,所以大致是整个样子就行了。 4.添加pictureBox1和FormMain的事件,添加的事件有 picturesBox1的Paint事件pictureBox1_Paint FormMain的KeyDown事件FormMain_KeyDown FormMain的Load事件FormMain_Load 至于这三个事件是干什么用的,估计大家大致也能猜的到,pictureBox1_Paint用于更新游戏画面,FormMain_KeyDown用于响应用户按键,FormMain_Load用于做一些初始化的工作 添加完成以后代码里应该是这个样子吧 5.添加两个类文件 Block类和Palette类 6.实现Block类 Block类用于描述蛇块信息,记录每个蛇块的坐标,颜色,以及大小这些信息,具体代码如下 这个类比较简单,Point p用于记录该蛇块的“坐标”,注意这里的坐标不是真正的坐标,由于蛇块是一个块,不是一个点,这里记录的是这个块的坐标,比如,如果是Point(3,2),那么就是表示第四列,第三行的那个块 Paint函数根据坐标以及蛇块大小计算出实际绘图的坐标,进行绘图,蛇块是一个正方形(矩形),我们用矩形绘制,在代码中我们看到,绘制的大小比size小1个像素,这么做的原因是为了突出蛇块与蛇块之间的间隙,也就是说蛇块与蛇块之间有1个像素的间隙,这就是我们看到游戏效果图中的蛇块是一段一段的原因 7.Palette类的实现 Palette类是真个游戏的核心处理类,里面定义了画布的大小,背景色,蛇块列表以及游戏速度,移动方向等属性 另外还提供了timer计时器,用于定时更新蛇块坐标位置,以及如何在画面上画图的函数,整个代码如下 从函数定义中我们可以大致了解一下这个类的功能以及实现方法了,类的属性定义就不再细说了,这些都是很明显的,接下来我们一步一步介绍各个函数的实现 7.1 Start函数 Start函数用于开始游戏,这个函数的内部其实就是设定食物,以及触发计时器。代码片段如下: 这里面定义了计时器的事件触发间隔,是通过level然后找到speed数组里的对应毫秒值设定的。 然后触发事件是OnBlockTimedEvent,这个函数后面再讲。 最后是启动计时器开始计时。 7.2 OnBlockTimedEvent函数 OnBlockTimedEvent函数是计时器的执行函数,这个函数用于更新蛇块信息列表,以及检测游戏是否结束等等,代码片段如下 可以看到,函数内部调用了两个函数,一个是Move函数,一个是CheckDead函数,从字面意思上我们就可以看出来是怎么个流程了。 7.3 CheckDead函数 checkDead函数用于检测游戏是否结束,具体检查规则如下 检测是否结束分两种情况,一种是撞上边界,即蛇头

文档评论(0)

131****9843 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档