vc++实现贪吃蛇的实验报告

上传人:第*** 文档编号:56885198 上传时间:2018-10-16 格式:DOCX 页数:21 大小:111.56KB
返回 下载 相关 举报
vc++实现贪吃蛇的实验报告_第1页
第1页 / 共21页
vc++实现贪吃蛇的实验报告_第2页
第2页 / 共21页
vc++实现贪吃蛇的实验报告_第3页
第3页 / 共21页
vc++实现贪吃蛇的实验报告_第4页
第4页 / 共21页
vc++实现贪吃蛇的实验报告_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《vc++实现贪吃蛇的实验报告》由会员分享,可在线阅读,更多相关《vc++实现贪吃蛇的实验报告(21页珍藏版)》请在金锄头文库上搜索。

1、 题目:利用 VC+实现贪吃蛇小游戏1、题目:利用题目:利用 VC+实现贪吃蛇小游戏实现贪吃蛇小游戏利用 VC+实现的贪吃蛇小游戏更加注重可视化。一条蛇在封闭的围墙内, 在围墙内会随机出现一个食物,通过键盘上的 W S A D 四个键控制它向上,下, 左,右四个方向移动。当蛇头撞到食物时表示将食物吃掉,这时蛇身增长一节, 得分加一。接着随机生成食物,等待被蛇吃掉。如果在移动过程中撞到墙壁或 者自己的身体,则游戏结束。游戏过程中,可以在菜单中选择暂停或者结束游 戏,对游戏进行暂停或者退出。2、编程要点(或基本思路、算法分析与说明):编程要点(或基本思路、算法分析与说明):本次游戏设计包含两大模块

2、,一个模块是贪吃蛇游戏本身算法的设计,完 成了贪吃蛇的食物产生,获取食物,蛇的移动等功能。另一个模块是利用 MFC 完成贪吃蛇的可视化显示,产生了一个对话框,在对话框可以控制游戏及游戏 的显示。1.贪吃蛇游戏算法设计包括:果实出现的设计思路:(1)采用随机数生成果实出现坐标(2)判断当前生成的果实是否在贪吃蛇身体范围内。(3)如果在,重新生成直到不在为止。如果不在,则把坐标位置返回给 调用对象。贪吃蛇更新的算法设计(1)接收玩家按下的方向键消息,并保存到方向变量中。(2)定义一个时间定时器,用来控制蛇运动的速度。(3)当每次时间间隔到达时,则根据方向变量来更新贪吃蛇 curr(即贪 吃蛇身体)

3、向量。(4)判断 curr 向量的第一个元素中的坐标数据是否碰到边界或者蛇身, 如果有,则游戏结束。否则,进行下一步。(5)判断 curr 向量的第一个元素中的坐标数据是否与当前果实重合,如 果有,表示贪吃蛇已经吃到果实。这时就向贪吃蛇 curr 向量添加一个元素,并 重新生成一个果实。(6)吃到食物后,得分会同步增加。2.利用 MFC 完成贪吃蛇的可视化显示:首先初始对话框,完成游戏的整体框架的显示。然后游戏玩家在菜单栏 里选择开始,暂停,结束等,控制游戏状态。游戏开始后,玩家通过键盘上的 消息控制蛇的运动。在函数 DrawSnake(CDC *pDC,Snake snake),和 Draw

4、Food(CDC *pDC,SnakeFood f)完成对蛇和食物的重绘,从而显示出蛇的运 动和对食物的获取。在 OnPaint()函数中完成得分和游戏操作提示的显示。本次游戏设计的主要功能函数如下:OnGameStart()(游戏开始函数), OnGamePauseStart()(游戏暂停函数) OnGameExit()(游戏退出函数),OnPaint()(游戏界面的显示函数), AddSnake(Snake *snake)(增加蛇身长度函数),DrawFood(CDC *pDC, SnakeFood f)(画食物函数),DrawSnake(CDC *pDC,Snake snake)(画蛇函

5、数), MoveSnake(Snake *snake)(蛇的移动函数),InitSnake(Snake *snake)(初始化 蛇函数),UnDrawSnake(Snake snake)(更新蛇函数),GameOver()(游戏结束函数)三、实现过程:三、实现过程:(1)流程图流程图否是定时器启动载入游戏并初始化判断游戏是否开始移动蛇(初始化向右运动)根据键盘控制蛇移动方向否是否是判断蛇是否吃到食物随机生成下一个食物,并记录得分判断蛇头坐标和自身或者墙是否重合游戏结束(2)(2) 主要功能程序代码主要功能程序代码:typedef struct SnakeNode /定义蛇结点 int x; /

6、蛇每个节点的横纵坐标 int y;SnakeNode; typedef struct Snake /定义蛇的身体SnakeNode data100; /用数组来表示蛇身体的每一节int curr; /移动指向蛇的每一节并统计蛇的 长度Snake;typedef struct food /定义食物结构体int x; /食物的横坐标int y; /食物的纵坐标SnakeFood;Snake snake;SnakeFood food;int x, y; /定义横纵坐标int direct; /定义方向变量int nGameState; /定义游戏的状态int score; /定义分数变量int sp

7、eed; /定义速度变量int d; /该变量用于控制蛇身不能后 退void InitSnake(Snake *snake); /初始化蛇void MoveSnake(Snake *snake); /蛇的移动void AddSnake(Snake *snake); /增加蛇的身体长度void DrawSnake(CDC *pDC , Snake snake); /绘制蛇void UnDrawSnake(Snake snake); /绘制蛇的显示框void DrawFood(CDC *pDC, SnakeFood f); /绘制食物 int GameOver(); /游戏结束/完成与对话框的数据

8、交互void CSnakeDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CSnakeDlg)/ NOTE: the ClassWizard will add DDX and DDV calls here/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CSnakeDlg, CDialog)/AFX_MSG_MAP(CSnakeDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_COMMAND(IDM_H

9、ELP_ABOUT, OnHelpAbout)ON_WM_TIMER()ON_COMMAND(IDM_GAME_START, OnGameStart)ON_WM_KEYDOWN()ON_COMMAND(IDM_GAME_PAUSE_START, OnGamePauseStart)ON_COMMAND(IDM_GAME_EXIT, OnGameExit)/AFX_MSG_MAPEND_MESSAGE_MAP()/ / CSnakeDlg message handlersvoid CSnakeDlg:OnGameStart() /游戏开始函数/ TODO: Add your command han

10、dler code hereSetTimer(1,speed,NULL); /SetTimer 一种 API 函数, 定时器InitSnake(nGameState=1; /游戏开始时为 1void CSnakeDlg:OnGamePauseStart() /游戏暂停函数/ TODO: Add your command handler code hereCDC *pDC =GetDC();if(nGameState=0)if(!GameOver()SetTimer(1,speed,NULL);nGameState=1;elseif(!GameOver()KillTimer(1);nGameSt

11、ate=0;pDC-TextOut(70,130,“Pause!“);void CSnakeDlg:OnGameExit() /游戏退出函 数/ TODO: Add your command handler code hereAfxGetMainWnd()-SendMessage(WM_CLOSE);/处理键盘按键消息void CSnakeDlg:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here and/or call defaultswitch(nChar)

12、case D:if(direct!=2break;case S: if(direct!=3break;case A:if(direct!=0break;case W:if(direct!=1break;if(nChar=VK_SPACE)if(nGameState=0)if(!GameOver()SetTimer(1,speed,NULL);nGameState=1;elseif(!GameOver()KillTimer(1);nGameState=0;CDialog:OnKeyDown(nChar, nRepCnt, nFlags);void CSnakeDlg:OnPaint() /游戏界

13、面的显示函 数if (IsIconic()CPaintDC dc(this); / device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);/ Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON); /获取系统分辨率 int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect( /获取窗口客户区的 大小int x = (rect.Width() - cxIcon + 1)/2 ;int y = (rect.Height() - cyIcon + 1)/2;/ Draw the icondc.DrawIcon(x, y, m_hIcon);elseCDialog:OnPaint();CDC *pDC = GetDC();pDC-SetBkColor(RGB(50,230,100); /设置游戏提示字体背景 颜色pDC-TextOut(220,30,“

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号