c语⾔设计贪吃蛇实验报告,贪吃蛇游戏程序设计实验报告
《贪吃蛇游戏程序设计实验报告》由会员分享,可在线阅读,更多相关《贪吃蛇游戏程序设计实验报告(11页珍藏版)》请在⼈⼈⽂库⽹上搜
索。
1、Windows编程⼤作业贪吃蛇设计与实现学 校:武汉轻⼯⼤学 院 系:班 级: 姓 名: 学 号: 2015 年12⽉16⽇⽬录1、 题⽬介绍
2、 设计⽬的
3、 详细设计3.1贪吃蛇本体设计3.2贪吃蛇⾷物设计3.3游戏界⾯设计3.3.1游戏初始化3.3.2游戏开始3.3.3游戏暂停3.3.4游
戏退出3.3.5游戏总界⾯3.3.6游戏区域与背景3.3.7关于SNAKE3.4玩法规则设计3.5核⼼设计4、 功能测试5、 总结6、 参考⽂献⼀、题
⽬介绍:编写⼀个基于MFC的⼩游戏。基本要求:1、实现⼀个⼩游戏2、实现基本游戏控制功能3、具有游戏数据保存功能4、界⾯布局合
理、美观;2、 设计⽬的:通。c语言游戏贪吃蛇源码
2、过使⽤vc+6.0实现⼀个⼩游戏的课程设计,进⼀步掌握MFC的⾼级使⽤⽅法和锻炼⾃⼰动⼿写程序的能⼒。了解游戏设计的整个过
程,通过熟练使⽤MFC来设计游戏。程序主要包括:游戏界⾯设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的
能⼒。三、详细设计3.1贪吃蛇的本体设计贪吃蛇的头部拥有⼀个坐标(x,y),蛇体有⼀个长度len,蛇有⼀个运动⽅向direct,故定义⼀个结
构体如下:struct Snakeint x,y;int len;int direct;Snake50;3.2贪吃蛇⾷物设计贪吃蛇的⾷物有⼀个坐标(x,y),此⾷物有⼀个标志isfood,
当isfood为0时,表⽰⾷。
3、物还没被吃,为1时,表⽰被吃。struct Foodint x;int y;int isfood;Food;3.3游戏界⾯设计3.3.1游戏初始化游戏初始蛇体长度为3,
颜⾊为灰⾊,⾷物标志为1,因为此时没有显⽰出⾷物,需要随机⽣成后,才置为0;void CSNAKEView:OnInitialUpdate()
CView:OnInitialUpdate();Snake0.x=10;Snake0.y=10;Snake1.x=11;Snake1.y=10;Snake2.x=12;Snake2.y=10;Snake0.direct=3;Snake0初始化贪。
4、吃蛇起初有3个节点,长度为3,起始坐标;⾷物默认为 1⽆0有/ TODO: Add your specialized code here and/or call the base
classvoid CSNAKEView:oninit()CDC *pDC=GetDC();CBrush DrawBrush=(RGB(100,100,100);CBrush *Drawbrush=pDC-SelectObject(&DrawBrush);for(int i=0;iRectangle(Snakei.x*20,Snakei.y*20,(Snakei.x+1)*20,(Snakei.y+1)*20);pD。
5、C-SelectObject(DrawBrush);3.3.2游戏开始点击游戏开始菜单后,出现⼀个对话框,提⽰⼀秒后,将开始游戏。void
CSNAKEView:OnStart() / TODO: Add your command handler code hereSetTimer(1,1000,NULL);AfxMessageBox(1秒后开始游
戏!);3.3.3游戏暂停点击游戏暂停菜单后,出现显⽰“已暂停游戏”的对话框。void CSNAKEView:OnPause() / TODO: Add your
command handler code hereKillTimer(1);AfxMe。
6、ssageBox(已暂停游戏);3.3.4游戏退出点击游戏退出菜单,显⽰“退出游戏”的对话框,随后关闭游戏界⾯。void
CSNAKEView:OnExit() / TODO: Add your command handler code hereAfxMessageBox(退出游戏.);exit (0);3.3.5游戏总界⾯⼤⼩
设计使⽤CMainFrame的PreCreateWindow函数对总界⾯进⾏初始化。BOOL CMainFrame:PreCreateWindow(CREATESTRUCT&
cs)if( !CFrameWnd:PreCreateWindow(cs) )return F。
7、ALSE;/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT cscs.style &=
WS_ = = 530;return TRUE;3.3.6操作游戏界⾯⼤⼩及背景⾊设计将背景⾊设置为⿊⾊,并将游戏区域
显⽰出来。void CSNAKEView:OnDraw(CDC* pDC)CSNAKEDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add
draw code for nati。
8、ve data hereCBrush backBrush(RGB(0,0,0);/设置画刷为希望的背景⾊CBrush* pOldBrush = pDC-
SelectObject(&backBrush);/保存旧画刷CRect rect;pDC-GetClipBox(&rect);/擦除需要的区域pDC-PatBlt(rect.left, p,
rect.Width(), rect.Height(),PATCOPY);/⽤创建的画刷绘制背景区域pDC-SelectObject(pOldBrush);pDC-
Rectangle(19,19,501,501);/设置需要区域的起始坐标和。
9、长宽。oninit();3.3.7版权所有点击帮助中的关于SNAKE,或者点击,会显⽰对话框-版权归刘坤炜所有。3.4玩法规则设计当按键盘上
的“上”“下”“左”“右”键时,蛇体⽅向的改变。按“上”时,如果蛇的⽅向不是朝下的,就将direct⽅向置为1,使其向上运动,当
然如果本⾝就是向上运动的,那么蛇的运动⽅向没有变化;如果蛇的⽅向朝下,按上,则不能改变它的⽅向。其他按法与上类似。void CSNAKEView:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) / TODO: Add your message handler code here a。
10、nd/or call defaultswitch(nChar)case VK_UP:if(Snake0.direct!=2)Snake0.direct=1;break;/按上时,只要不是朝下,都将⽅向
置为上(1) case VK_DOWN:if(Snake0.direct!=1)Snake0.direct=2;break;case
VK_LEFT:if(Snake0.direct!=4)Snake0.direct=3;break; case
VK_RIGHT:if(Snake0.direct!=3)Snake0.direct=4;break;CView:OnKeyDown(nChar, nRe。
11、pCnt, nFlags);3.5游戏核⼼设计当碰到⽩⾊区域的任何⼀边或者⾃⼰撞到⾃⼰的⾝体时,游戏结束,并输出⾃⼰所得分数。根据蛇的
运动⽅向来改变蛇的⼀个个⾝体部分坐标。根据蛇头的坐标来判断是否吃到了⾷物,若吃到,将蛇的长度加1,⾷物的标志置为1,表⽰被
吃,并且当⾷物标志为1时,随机⽣成下⼀个⾷物的坐标,此坐标必须要在游戏区域内,不在就循环⽣成,直到满⾜条件,并将标志置为
0。void CSNAKEView:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultCDC
*pDC=。
12、GetDC();CString
soure;if(Snake0.len=2)SetTimer(1,370,NULL);if(Snake0.len=3)SetTimer(1,270,NULL);if(Snake0.len=6)SetTimer(1,200,NULL);if(Sna 分:%d!,(Snake0.len-3)*10); /撞界判断if(Snake0.x*20=462|Snake0.y*20=462)KillTimer(1);AfxMessageBox(soure);/ s=0;/蛇⾝
相撞判断if(。
13、Snake0.len3)for(int sn=Snake0.len-1;sn0;sn-
)if(Snake0.x*20=Snakesn.x*20&Snake0.y*20=Snakesn.y*20)KillTimer(1);AfxMessageBox(soure);/ s=0;/pDC-
SelectStockObject(WHITE_PEN);pDC-Rectangle(SnakeSnake0.len-1.x*20,SnakeSnake0.len-1.y*20,(SnakeSnake0.len-
1.x+1)*20,(SnakeSnake0.len-1.y+1)*20);for(int i=Snak。
14、e0.len-1;i0;i-)Snakei.x=Snakei-1.x;Snakei.y=Snakei-1.y;/运动⽅向判断if(Snake0.direct=1)Snake0.y-
;if(Snake0.direct=2)Snake0.y+;if(Snake0.direct=3)Snake0.x-;if(Snake0.direct=4)Snake0.x+;pDC-
SelectStockObject(BLACK_PEN);CBrush DrawBrush=(RGB(100,100,100);CBrush *Drawbrush=pDC-
SelectObject(&DrawBrush);pDC-Rec。
15、tangle(Snake0.x*20,Snake0.y*20,(Snake0.x+1)*20,(Snake0.y+1)*20);pDC-SelectObject(DrawBrush);/判断吃⾷物的条件,撞
到就吃if(Snake0.x*20=Food.x*20&Snake0.y*20=Food.y*20)Snake0.len+;Food.isfood=1;SnakeSnake0.len-
1.x=SnakeSnake0.len-
2.x;SnakeSnake0.len-1.y=SnakeSnake0.len-2.y;/如果⾷物被吃了 就⽣成if(Food.isfood=1)srand(unsign。
16、ed)time(NULL);dofor(int isfo=Snake0.len-1;isfo=0;isfo-
)if(Snake0.x*20=Snakeisfo.x*20&Snake0.y*20=Snakeisfo.y*20)Food.x=rand()%25;Food.y=rand()%25;while(Food.x*20430|Food.y*2 Rectangle(Food.x*20,Food.y*20,(Food.x+1)*20,(Food.y+1)*20);Food.isfood=0;CView:OnTimer(nIDEvent);4、 功能测试4.1游戏
界⾯4.2游戏开。
17、始4.3游戏正在进⾏4.4游戏暂停4.5游戏退出4.6最后得分4.7关于SNAKE5、 总结随机数⽣成函数rand()的应⽤在贪吃蛇游戏中是⼀
个关键步骤,通过不断的循环和调⽤,能保证游戏的持续进⾏和更新,其实不⽌是贪吃蛇,在⼤多数需要随机⽣成元素的游戏中,都可以⽤
rand()函数⽣成随机数,再控制坐标等变量实现“随机⽣成”功能。通过这⼀次课程设计,我最⼤的收获就是分析问题解决问题能⼒的提
⾼,发现问题,⽽后解决问题是⽣活的永续循环,这种能⼒会伴随我们⼀⽣;其次,程序的开发给了我很多经验,相信时间充裕的话,我能
独⽴开发⼀个⼩游戏;最后,⽼师提出的对设计报告的种种要求也为我以后的各种报告的规范性做好了⼼理准备。 总的来说MFC程序使⽤
了微软的基本类库,让程序设计变得简单,但是⼀定程度上造成了代码冗余,程序效率降低,MFC⼊门简单,但提升有⼀定难度。MFC只
是C+的⼀部分,我并没有写了过多的C+代码,很多代码是很相似的,可能因为我是初学者的缘故,另外我⽐较喜欢对C+模板类或者可重
⽤的类的设计,这更符合C+批量成产的风格。6、 参考⽂献百度知道Visual C+ 程序设计与应⽤教程Windows程序设计
Windows API详解。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论