资源描述:
《VC可视化课程设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、课设要求设计题目九:基于MFC的贪吃蛇游戏设计与实现1.游戏界面设计2.食物的初始化3.游戏开始以及具体实现4.网上许多贪吃蛇游戏设计资料,切记可以参考,请勿照搬!二、贪吃蛇游戏的简单操作和功能说明1.简单描述游戏通过MFC单文档实现。可以实现贪吃蛇的基本操作例如控制蛇的移动,食物刷新,分数判断,游戏开始、暂停、继续、结束、重新开始,加载背景音乐等。2.界面和菜单介绍(1)界面介绍如图,是程序的主界面22(2)功能菜单如下图,是游戏菜单的下拉选项。包括游戏开始,游戏暂停,游戏继续,游戏结束和重新开始。每个菜单都有相应的快捷键,其中暂停功能还可
2、以通过游戏中按“空格”这个快捷键实现。22关于游戏:22游戏暂停,游戏结束,游戏失败后会有相应提示框。如下:22三、源程序模块1.添加的windows消息和系统函数首先在“ClassView”中添加了以下Windows信息1WM_KEYDOWN(当一个非系统键被按下时该消息发送给具有键盘焦点的窗口。)222WM_TIMER(在指定的时间间隔内反复触发指定窗口的定时器事件。)然后还有“ADDVirtualFunciton”的OnInitialUpdate()22另外添加一个成员函数oninit(),负责贪吃蛇外观的初始化。2.控件设计以“游戏开始”
3、控件为例介绍,其余类似。ID,和函数如下图:22快捷键:223.背景音乐实现首先进入音频文件资源,然后在OnInitialUp函数中加入如下代码:PlaySound((LPCTSTR)IDR_WAVE1,AfxGetInstanceHandle(),SND_RESOURCE
4、SND_ASYNC
5、SND_LOOP);4.各主要函数voidCSnakeView::OnInitialUpdate()//初始化贪吃蛇22{PlaySound((LPCTSTR)IDR_WAVE1,AfxGetInstanceHandle(),SND_RESOURCE
6、SN
7、D_ASYNC
8、SND_LOOP);//加载背景音乐//SND_RESOURCE是调用资源函数SND_LOOP实现循环播放CView::OnInitialUpdate();Snake[0].x=5;Snake[0].y=3;Snake[1].x=4;Snake[1].y=3;Snake[2].x=3;Snake[2].y=3;Snake[0].direct=4;Snake[0].len=3;Food.isfood=1;}22voidCSnakeView::Oninit()//该函数画一个矩形,用当前的画笔画矩形轮廓,用当前画刷进行填充{CDC*p
9、DC=GetDC();//什么CDC类的,我也不太懂~CBrushDrawBrush=(RGB(100,100,100));CBrush*Drawbrush=pDC->SelectObject(&DrawBrush);for(inti=0;i<=Snake[0].len-1;i++)pDC->Rectangle(Snake[i].x*20,Snake[i].y*20,(Snake[i].x+1)*20,(Snake[i].y+1)*20);pDC->SelectObject(DrawBrush);}代码说明:22利用Windows给我们提供的CD
10、C类来进行画图,我们首先用一个指向CDC类的指针去接受与该窗口相关联的DC句柄,然后用定义画刷一个DrawBrush对象,并且用RGB(100,100,100)来给画刷初始化颜色。并且用SelectObject(&DrawBrush);函数把对象画刷选入到设备描述表中,用for循环依次把贪吃蛇的3个节点画出来。voidfarrectangle(intleft,inttop,intright,intbottom);这个函数的的功能根据}voidCSnakeView::OnStart()//游戏开始{SetTimer(1,1000,NULL);//设
11、置游戏每秒刷新一次}voidCSnakeView::OnPause()//游戏暂停22{KillTimer(1);//暂停计时器AfxMessageBox("暂停游戏...");}voidCSnakeView::OnContinue()//游戏继续{SetTimer(1,10,NULL);}voidCSnakeView::OnExit()//游戏退出{AfxMessageBox("退出游戏...");exit(0);}voidCSnakeView::OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)//键盘控制
12、函数22{defaultswitch(nChar){caseVK_UP:if(Snake[0].direct!=2)Snake[0].d