基于vc开发的贪吃蛇小游戏_第1页
基于vc开发的贪吃蛇小游戏_第2页
基于vc开发的贪吃蛇小游戏_第3页
基于vc开发的贪吃蛇小游戏_第4页
基于vc开发的贪吃蛇小游戏_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

基于vc开发的贪吃蛇小游戏

作者:孙文吉张洋弘孟飞王晓庆“C游四侠”团队一、实习目的1、熟悉并掌握VC的基本编程环境、套路、框架。2、了解MFC的基本函数,及其运用。3、锻炼大家的编程能力,为以后更复杂的开发软件打基础。4、培养大家积极地编程兴趣,对所学专业有更深的了解与认知。二、选题背景贪吃蛇是一款简单的益智小游戏,其结构比较简单,基于我们学习编程才刚刚一年,编程能力有限,因此选择此题,实现其简单的算法与窗口编辑。从而建立起自信心,是我们对编程更加感兴趣,为将来的发展打好基础。三、程序结构与功能贪吃蛇游戏游戏设置游戏帮助开始游戏暂停游戏退出游戏游戏等级游戏音乐帮助关于四、源代码说明

利用MFC基于对话框的制作,在menu中加入游戏,游戏设置,帮助,再在其子菜单中加入开始,暂停,等级设置,音乐,关于等项。1、界面2、蛇身voidDrawSnake(CDC*pDC,Snakesnake)//定义蛇行函数{

intt; t=snake.curr-1;

pDC->SelectStockObject(WHITE_BRUSH);

pDC->SelectStockObject(BLACK_BRUSH);//设置蛇头语句

pDC->Ellipse(snake.data[t].x*10+11,snake.data[t].y*10+11,

snake.data[t].x*10+18,snake.data[t].y*10+18); t--;

pDC->SelectStockObject(HOLLOW_BRUSH);//设置蛇身语句

while(t>=0) {

pDC->Ellipse(snake.data[t].x*10+11,snake.data[t].y*10+11,

snake.data[t].x*10+18,snake.data[t].y*10+18); t--; }}3、蛇身增加voidAddSnake(Snake*snake)//定义蛇身增加函数{

intt=1,tx,ty,xx,yy;

if(snake->curr<100)snake->curr++; xx=snake->data[0].x;

yy=snake->data[0].y; do {

tx=snake->data[t].x;

ty=snake->data[t].y; snake->data[t].x=xx; snake->data[t].y=yy; xx=tx;

yy=ty; t++; }while(t<snake->curr);}4、蛇运动范围voidUnDrawSnake(CDC*pDC,Snakesnake)//定义蛇运动的范围函数{

pDC->SelectStockObject(GRAY_BRUSH);//给蛇的运动范围涂色

pDC->Rectangle(10,10,210,320);//给出蛇的运动范围}5、音乐开关void//音乐开

CSnakeDlg::OnUpdatePlaymusic(CCmdUI*pCmdUI){

if(!m_bstart) {

m_main_menu.CheckMenuItem(IDR_PLAYMUSIC,MF_BYCOMMAND|MF_CHECKED);

m_main_menu.CheckMenuItem(IDR_STOPMUSIC,MF_BYCOMMAND|MF_UNCHECKED);

}

sndPlaySound("wangling.wav",SND_ASYNC); Invalidate();}void//音乐关

CSnakeDlg::OnUpdateStopmusic(CCmdUI*pCmdUI){

if(!m_bstart) {

m_main_menu.CheckMenuItem(IDR_PLAYMUSIC,MF_BYCOMMAND|MF_UNCHECKED);

m_main_menu.CheckMenuItem(IDR_STOPMUSIC,MF_BYCOMMAND|MF_CHECKED);

}

sndPlaySound(NULL,SND_PURGE); Invalidate(); }6、帮助voidCSnakeDlg::OnHelp()//游戏帮助{ //TODO:Addyourcommandhandlercodehere

CDialog*dlg=newCDialog; KillTimer(1);

dlg->Create(MAKEINTRESOURCE(IDD_HELP));

dlg->ShowWindow(1);}7、难度设置voidCSnakeDlg::OnUpdateLevelHigh(CCmdUI*pCmdUI)//设置游戏难度高{

if(!m_bstart) {

m_main_menu.CheckMenuItem(IDR_LEVEL_HIGH,MF_BYCOMMAND|MF_CHECKED);

m_main_menu.CheckMenuItem(IDR_LEVEL_LOW,MF_BYCOMMAND|MF_UNCHECKED);

m_main_menu.CheckMenuItem(IDR_LEVEL_NOR,MF_BYCOMMAND|MF_UNCHECKED); speed=40; } Invalidate();

}其他难度功能的实现与此相似,就是改变MF_CHECKED与MF_UNCHECKED的次序在将speed变量的值依次增大实现中、低5难度。(注)此处的speed的大小与难度高低相反。8、背景添加CPaintDC

dc(this);

CRect

rect;

GetClientRect(&rect);CDCdcMem;

dcMem.CreateCompatibleDC(&dc);

CBitmap

bmpBackground;bmpBackground.LoadBitmap(IDB_BITMAP1);

//IDB_BITMAP是你自己的图对应的ID

BITMAPbitmap;

bmpBackground.GetBitmap(&bitmap);

CBitmap*pbmpOld=dcMem.SelectObject(&bmpBackground);dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,

bitmap.bmWidth,bitmap.bmHeight,SRCCOPY); CDC*pDC=GetDC();在OnPaint()函数中添加以上代码实现背景添加功能

9、最终效果五、分工情况孙文吉:研究源代码,游戏功能构思,菜单制作,游戏帮 助和难度功能的实现。张洋弘:研究源代码,游戏功能构思,音乐背景制作,菜 单制作,PPT制作。孟飞:贪吃蛇源代码搜寻,研究源代码,游戏功能构 思,音乐、画面背景制作。王晓庆:研究源代码,游戏功能构思,游戏开始结束功 能,报告总结。六、难点与疑问难点:1、MFC入门难,不知如何开展开发工作,不知从哪下手。

解决办法:经过上网查资料,看视频,借相关书籍查阅有关MFC的相关信息。初步了解相关内容,最终完成界面设计。2、源代码复杂,算法不清楚,不知如何实现预想的编程需求。

解决办法:通过研究源程序,百度搜索慢慢理清思路。3、源代码与所作界面之间的消息响应实现困难。

解决方法:看视频上网查资料。疑问:1、点开菜单项时(例如:游戏帮助,等级设置等)蛇的食物会消失。2、英雄榜的实现(也是一个遗憾)。3、方向键up,down,left,right不能控制蛇运动为什么VK_SPACE能应用。4、当点来菜单时,蛇的运动会继续,不会停止。5、蛇身颜色的改变。七、心得体会从这次的贪吃蛇VC游戏开发中,一开始我们虽然迷茫,不知从哪入手,但经过了自己的探索,同学老师的启发,从网络书籍中初步认识和了解了MFC的基本知识,从框架开始慢慢有了进展,虽然大部分的代码是参考资料的,但是

温馨提示

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

评论

0/150

提交评论