手把手教你用MFC编写贪吃蛇_第1页
手把手教你用MFC编写贪吃蛇_第2页
手把手教你用MFC编写贪吃蛇_第3页
手把手教你用MFC编写贪吃蛇_第4页
手把手教你用MFC编写贪吃蛇_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

贪吃蛇是一款经典的小游戏 它玩法非常简单 对于 MFC 的初学者来说 也是一个非常好的练手项目 这篇 文章 将从项目创建开始来一步一步教你如何制作一个贪吃蛇小游戏 我用的是 visual studio2013 使用其他版本 的朋友也可以参考 差别并不大 话不多说 直接切入正题吧 启动 vs2013 新建项目 如图 选择一个 MFC 应用程序 下面填上名称以及项 目的位置 确定 在应用程序向导中选择基于对话框的应用程序 完成 在资源视图中 把向导为我们生成的控件统统删掉 然后按 F5 运行一下程序 运行结果如下 一个空白的对话框 下面就要开始在这个对话框上面制作我们的游戏界面了 首先 我们需要做一下游戏界面的规划 在这里 我将贪吃蛇的运动范围限制在一个 30 30 的矩形地图里面 而每一个 1 1 的正方形方格代表一个位置 方格的边长设为 20 那么总的地图大小就需要一个 600 600 的矩形 我们把这些参数在程序中定义好 在 贪吃蛇 Dlg cpp 文件最上面添加如图所示代码 定义完这些参数以后 就要利用这些参数修改游戏界面了 在 C 贪吃蛇 Dlg 类的 OnInitDialog 函数 中添加如 下代码 实现界面大小的修改 然后 F5 运行一下程序 发现游戏界面已经改成我们希望的尺寸了 接下来 在 OnPaint 函数中修改掉游戏的背景颜色为白色 F5 运行一下 发现背景色已经变成白色了 下面 我们要做出食物和蛇 因为食物相对简单 我们先做一个食物 并让它显示到地图中 由于食物的产 生是随机的 因此我们需要产生两个随机数 分别代表食物的横纵坐标 对于随机数的产生 我已经将随机数的 产生封装到了一个随机数类当中 可以方便的产生任意种类的随机数 下载地址 将解压后的两个文放 到项目的文件目录 如图所示 然后把这两个文件添加到我们的项目里 在 解决方案资源管理器 中右击 贪吃蛇 添加 现有项 选中刚刚的两个文件之后 添加进去 然后在贪吃蛇 Dlg cpp 中包含随机数类的头文件 就可以使用这个类了 接下来 我们添加一个函数用来产生食物 在此之前 我们需要为 C 贪吃蛇 Dlg 添加一个成员变量来保存食物 的位置 如图所示 然后添加一个函数 进入这个函数 添加如下代码 这时便生成了一个食物 下面需要一个函数来将这个食物画出来 在用同样的方法添加一个 DrawFood 函数 函数中添加如下代码 同样的方式添加另外一个函数 StartGame 用于启动游戏 然后在 StartGame 中调用CreateFood 紧接着 我们再到OnInitDialog 中调用 StartGame 来启动游戏 现在 按 F5 看看我们的成果吧 什么 没有任何效果 哈哈 不要担心 我们到OnPaint 函数里 调用一下 DrawFood 函数 然后再按 F5 效果如图 已经产生了一块食物 但是 现在的程序有一个缺陷 就是每次启动的时候 食物都产生在这个固定的位置 而并不是随机的一个位置 为什么呢 因为这个随机数类需要初始化 我们在 OnInitdialog 中加上下面这样一句话就行啦 现在 每次启动产生的食物都在不同的地方了 下面我们就要开始着手制作我们的主角了 蛇 我们需要一个类来将这条蛇封装起来 如下图步骤添加一个类 类名为 Snack 完成 在这个类中 我们采用链表的数据结构来存储这条蛇 我们在类中添加一个成员变量 m body 来保存蛇的身体 然后添加一个成员变量 m direction 来保存蛇的运动方向 这里运动方向我们采用一个 CPoint 来表示 因为 CPoint 有 x 和 y 可以代表一个向量 例如 1 0 就代表方向向左 如下图 然后在 Snake 的构造函数中 初始化这个蛇 接着 在对话框的类中添加一个 Snake 的成员变量 m snake 然后为这个对话框添加一个函数用来把蛇绘制出来 要绘制这条蛇 首先要获取到蛇的位置 我们先为 Snack 类添加一个成员函数来获取蛇的身体 下面 再为对话框类添加一个成员函数DrawSnake用来绘制蛇 然后 在OnPaint函数中调用 DrawSnake 来画出这条蛇 放在 DrawFood 这里 然后 F5 执行一下程序 发现蛇已经画出来了 看着都有点小激动呢 下面就应该让我们的蛇运动起来 但是现在还不是时候 因为问题来了 现在我们的程序有一个小小的隐患 那就是有一种极小的可能性 我们现在产生的食物有可能会落在蛇的身体上 也就是程序刚刚启动的时候 食物的位置落在了蛇的身体所在的位置 虽然这种可能性发生的概率极小 但是随 着玩家玩到后面 蛇越来越长 这种事情发生的概率就会越来越大 这时我们需要再为 Snack 类添加一个成员函数 用来判断食物是不是落在了在蛇的身体上 事实上 这个函数到 后面还会有另外一个重要的作用 我们先添加这个判断函数 然后我们需要改写一下 CreateFood 这个函数 让它避免产生一个蛇身上的食物 在后面加一个 while 循环就行了 再 F5 运行一下程序 现在不管运行多少次 都不会出现上述问题了 下面就该让蛇运动起来了 首先我们为蛇添加一个 Move 函数 并将食物的位置传进去 该函数返回一个 bool 类型 如果移动成功就返回 true 否则返回 false 然后在对话框类中添加一个函数 SnackMove 它调用 Snake 的 move 函数来实现蛇的移动 并且重绘蛇 然后在 StartGame 中设置一个定时器 让蛇每隔 1000 毫秒运动一次 在类向导中 添加定时器消息的响应函数 如下图所示 在 OnTimer 中调用 SnakeMove 现在按下 F5 蛇已经可以移动了 下面为游戏增加控制功能 对话框类上右键 类向导 重载这个虚函数 这个就是用来响应键盘消息的 在这个函数中 我们先写好这样一段话 然后在 Snake 类中添加一个函数 DirectionChange 提供一个用于操作运动方向的用户接口 接下来 我们在 PreTranslateMessage 中调用这个函数实现蛇的转向 至此 贪吃蛇程序已经基本上完成了 按下 F5 启动游戏 这个游戏目前还没有积分以及游戏的难度递增功能 这个功能要添加进去也非常简单 首先 为 Dialog 类添加一 个成员变量 m score 用来存储分

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论