没有合适的资源?快使用搜索试试~ 我知道了~
贪吃蛇程序程序设计报告 【1】游戏介绍 产生一个固定大小有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的 运动方向,用蛇头去吃随机分布在游戏区域内的食物;蛇的运动限制在游戏区域内,游 戏区域有边界,所以蛇在区域内作循环运动;蛇的运动方向为直线运动,只走横和竖的 方向,不走斜线;蛇身体的长度从4开始每吃掉一份食物就增加一个长度;食物的出现安 照随机分布的原则,蛇吃掉一份后随即在游戏区域内放一份新的食物;每吃掉一份食物 得分为1,游戏结束后统计全部的得分;游戏结束的条件为:在控制蛇的过程中蛇头碰到 蛇的身体的任何部位或者碰到四壁。 【2】基本概念,要点分析 蛇的活动区域是由若干个小方格组成的。当这些小方格呈现灰色时,便显示蛇身。设整 个区域由由m×n个方格组成,最左角上的方格坐标为(0,0),蛇由若干个相邻的方格组 成的,将这些方格的坐标依蛇头至蛇尾的次序存入到一个数组中便代表了蛇身。当蛇在 游戏区域中游动一格时,所对应的数组操作应该是将新的位置坐标插入到数组头部,同 时将数组中最后一个元素删除,这项工作可以用一个一般的数组来完成,但当进行插入 操作时需要自己移动数组中的元素;
资源推荐
资源详情
资源评论
vc++贪吃蛇实习报告
贪吃蛇程序程序设计报告
【1】游戏介绍
产生一个固定大小有边界的游戏区域,蛇从区域的中心开始,由玩家通过键盘控制蛇的
运动方向,用蛇头去吃随机分布在游戏区域内的食物;蛇的运动限制在游戏区域内,游戏
区域有边界,所以蛇在区域内作循环运动;蛇的运动方向为直线运动,只走横和竖的方向,
不走斜线;蛇身体的长度从 4 开始每吃掉一份食物就增加一个长度;食物的出现安照随机
分布的原则,蛇吃掉一份后随即在游戏区域内放一份新的食物;每吃掉一份食物得分为 1,
游戏结束后统计全部的得分;游戏结束的条件为:在控制蛇的过程中蛇头碰到蛇的身体的
任何部位或者碰到四壁。
【2】基本概念,要点分析
蛇的活动区域是由若干个小方格组成的。当这些小方格呈现灰色时,便显示蛇身。设
整个区域由由 m×n 个方格组成,最左角上的方格坐标为(0,0),蛇由若干个相邻的方格组
成的,将这些方格的坐标依蛇头至蛇尾的次序存入到一个数组中便代表了蛇身。当蛇在游
戏区域中游动一格时,所对应的数组操作应该是将新的位置坐标插入到数组头部,同时将
数组中最后一个元素删除,这项工作可以用一个一般的数组来完成,但当进行插入操作时
需要自己移动数组中的元素;也可以使用 CArray 来完成这些工作,CArray 的成员函数提
供了需要的操作,这样做更简单一些。
游戏使用四个方向键来控制它的前进方向,在 OnKeyDown 消息处理函数中,根据不
同的方向键设置成员变量 m_nDirect 的值。当在菜单中选择开始时,启动了定时器,游戏
开始,在定时器消息处理函数中,根据 m_nDirect 的值判断出蛇的下个位置,如果没有超
出边界或碰到自身,则它可以移到新的位置。如果吃到了食物,则在 CArray 中只插入而不
删除最后一个元素,蛇身长度增加。
另外值得注意的是,当蛇移动一格时,只有蛇头和蛇身的位置需要重绘,为此专门编
写了成员函数 ReDisplay 来刷新一个小格。
【3】程序概要设计
程序流程图如下:
vc++贪吃蛇实习报告
游戏载入内存并初
始化界面
判 断 游 戏 是
否开始
单击按钮
开始游戏
没有开始游戏,
就返回初始界面
贪吃蛇开始移动(初始方向向左)
根据键盘消息判断蛇头的运动方向
根据蛇头的坐标和食物的坐标判断蛇是
否已经得到食物
如果已经得到食物,则蛇的身
体加长,积分器加一
如果没有得到食物,则蛇的身
体不变,积分器不变
根据蛇头的坐标、蛇身体的坐标和墙壁
的坐标判断蛇是否已经撞墙或者自己咬
到自己
如果没有撞墙并且没有自己
咬到自己则程序继续进行
如果已经撞墙或者自己咬
到自己则程序终止
贪吃蛇程序结束
积分器开始计分
vc++贪吃蛇实习报告
【4】详细设计过程:
(1)新建工程 Snake,在 MFC 的向导第一步选择 Single Document,按 Finishi 结束。
(2)选择 Resource View 窗口,打开菜单编辑器,在顶层菜单上添加一个名为“游戏”
的弹出式菜单,该菜单下再添加一个名为“开始”的子菜单,其 ID 为 ID_GAME_START,
如下图所示。
(3)在 ClassWizard 中为刚才编辑好的菜单添加消息处理函数,打开 ClassWizard,
选 中 Message Maps 页 。 在 Class Name 中 选 择 CSnakeView , 在 Object ID 中 选 择
ID_Game_START,在 Messages 中选择 COMMAND,添加消息处理函数。
(4)在 ClassWizard 中添加键盘消息处理函数。打开 ClassWizard,选中 Message Maps
页。在 Class Name 中选择 CSnakeView,在 Object ID 中选择 CSnake View,在 Messages 中
选择 WM_KeyDown,添加消息处理函数。
(5)在 ClassWizard 中添加定时器消息处理函数。打开 ClassWizard,选中 Message
Maps 页 。 在 Class Name 中 选 择 CSnakeView , 在 Object ID 中 选 择 CSnake View, 在
Messages 中选择 WM_Timer , 添加消息处理函数。
(6)编辑生成代码,完成程序。
【5】 利用 MFC 类向导添加代码步骤如下:
(1)选择 Class View 窗口,双击 CSnake View 类,添加如下成员变量。并添加头文
件:
#include <Afxtempl.h>
class CSnakeView : public CView
{
private:
void ReDispilay(CPoint pPoint);
void IniAim();
void IniGame();
int m_nLeft,m_nTop,m_nWidth,m_nHeight,m_nSize; //起始坐标,宽高(格数
0),每格大小
int m_nDirect; //当前方向
CPoint m_pAim; //当前坐标
CArray<CPoint,CPoint> m_aBody; //蛇身
int m_nGameStatus; //游戏状态:0-未开始,1-开始
int m_nCount; //吃掉目标数
int m_nTime,m_nTime1; //用掉的时间
protected: // create from serialization only
CSnakeView();
DECLARE_DYNCREATE(CSnakeView)
// Attributes
public:
CSnakeDoc* GetDocument();
// Operations
public:
剩余10页未读,继续阅读
资源评论
小虾仁芜湖
- 粉丝: 85
- 资源: 9357
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功