C++课程设计报告(贪吃蛇游戏)
C++程序课程设计贪吃蛇游戏
姓名:XXXX
学号:XXXXXX
指导教师:XXXX
提交⽇期:2XXXXX
⽬录
C++程序课程设计 (1)
第⼀章课题介绍 (2)
1.1选题背景 (3)
1.2关于编译软件 (3)
1.3关于兼容性 (4)
第⼆章设计概要 (4)
2.1程序功能简介 (4)
2.2程序流程 (4)
第三章游戏实现 (5)
3.1创建⼯程 (5)
3.2游戏界⾯控制 (7)
3.2.1墙、框体的绘制 (7)
3.2.2蛇⾝的绘制 (8)
3.2.3⾷物的绘制 (9)
3.3游戏控制 (11)
3.3.1蛇的移动 (11)
3.3.2蛇死亡的判断 (13)
3.3.3消息窗⼝的弹出 (13)
3.3.3.1开始消息框 (13)
3.3.3.2关卡消息框 (14)
3.3.3.3结束消息框 (15)
3.3.4游戏⾳效 (16)
第四章结果与讨论 (17)
4.1程序运⾏ (17)
4.2对源程序的改进 (18)
4.3错误调试与分析 (18)
4.3.1关于窗⼝的重画问题 (18)
4.3.2关于双⾳轨的问题 (18)
4.3.3程序的稳定性 (19)
4.4课程设计⼼得与体会 (19)
附录 (21)
第⼀章课题介绍
1.1选题背景
蛇------传说中的圣灵之物,仰头为神、俯⾸为魔。蛇是⽉亮国膜拜的神,⽉亮国的⼦民们都认为蛇是万能的主宰派来保护他们的守护者。蛇在这个岛屿就像空⽓⼀样⾃然的出现在各个⾓落,有些还成为居民的宠物,陪伴孩⼦长⼤,和年轻⼈⼀起去探险,守护着散步的⽼⼈。在善良的⼥娟神保佑下,⼈们的⽣活安宁平静。为了答谢⼥娟的庇佑,每年⽉亮国的国民都会举办⼀个守护蛇⼤赛,⼤家都会拿出⾃⼰最强、最炫、最快、最稀有的蛇来参加⽐赛,获得第⼀名的⼈将得到国王的特别嘉奖。所以国民⼀⽣都在不断的培养更有威⼒、更长、更壮的蛇。"贪吃蛇"是⼀个产⽣于1970 年代中后期的计算机游戏,也叫蛇吃⾖。
该游戏在1990 年代由于⼀些⼿机将其引⼊⽽⼀时间再度流⾏起来。在游戏中,玩家操控⼀条细长的蛇爬⾏于⼀个带边界的平⾯之上,⼀路拾起触碰到之事物或其它类似的物件,并要避免触碰到⾃⾝或者包围着游戏区的"墙"。每次贪吃蛇吃掉⼀件⾷物,它的⾝体便增长⼀些,这让游戏的难度渐渐变⼤。操控贪吃蛇时,玩家操控贪吃蛇的头部的朝向(向上、向下、向左或向右)控制贪吃蛇的进⾏⽅向,贪吃蛇的⾝体将跟随着其头部⾏进。另外,玩家不可在游戏中途停⽌贪吃蛇的进⾏。随着贪吃蛇的成功移植到⼿机系统,贪吃蛇的操作按键要求与⼿机按键的完美匹配,使贪吃蛇游戏风靡起来。
贪吃蛇是家喻户晓的益智类⼩游戏,选择这个题⽬⼀是为了将⾃⼰的所学知识加以运⽤,⼆是⼀直以来贪吃蛇这个游戏就深深地吸引着我,它的制作⽅法对于以前的我⽽⾔都是很神秘的。我希望通过⾃⼰的所学知识把它剖析开来,真正的了解它的本质和精髓。虽然我的编程能⼒不是很强,但是我有信⼼,在
这次学习中我将从实践和实际的项⽬中提⾼⾃⼰的编程能⼒。因此我选定了这个题⽬。
1.2关于编译软件
本程序采⽤Microsoft Visual C++6.0的中⽂版本进⾏编译。VisualC++6.0是Microsoft公司推出的基于Windows操作系统的可视化C++编程⼯具,尽管Microsoft公司推出了.NET平台的集成开发环境,但由于其良好的界⾯和可操作
性,加上⽀持标准C/C++规范,但仍有相当多的编程⼈员使⽤VisualC++6.0进⾏应⽤系统的开发。
1.3关于兼容性
本程序经过调试,可以在XP系统下编译运⾏,也可以在Vista/Win 7下运⾏,界⾯稍有不同,但不影响运⾏结果。
第⼆章设计概要
2.1程序功能简介
据分析,贪吃蛇游戏⼀共要实现如下⼏个功能:
开始运⾏
蛇在上下左右键的操作下运动
闯关设置
游戏⾳效
游戏说明
2.2程序流程
根据分析后的贪吃蛇结构设计出相应的贪吃蛇流程(图1)。
贪吃蛇的内容主要包括:
开始游戏,随机出现⾷物,控制蛇的运动,吃⾷物,关卡处的消息询问,游戏⾳效的播放,分数的输出,游戏帮助的输出等等。
图1.流程图
第三章游戏实现
3.1创建⼯程
本程序使⽤Win32 Application⼯程,编辑在Windows窗⼝中打开的应⽤程序。由于之前没有接触过这类⼯程,所以我在短短⼏天内笼统的学习了⼀些相关的基本知识。在程序的编写过程中,遇到了很多问题,通过查阅资料和请教别⼈,解决了很多问题,但是仍然有遗留的未解决的问题,所以本程序虽然实现了⼤部分功能,但不是很完善,需要在将来的学习过程中逐渐改进。
图2.创建Win32 Application ⼯程
Win32 Application ⼯程与Win32 Console Application ⼯程有很⼤的不同(图2)。其主函数是WinMain()函数。创建⼀个经典的”Hello,World!”⼯程,就会有已经写好的WinMain()函数。WinMain()函数是整个程序的⼊⼝,虽然区区⼏⾏。不需要改动什么,但确实最主要的函数。函数定义如下:
在创建好的⼯程中,还有注册窗⼝函数和窗⼝过程函数。
实现贪吃蛇游戏的算法就写在窗⼝过程函数中。
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
ATOM MyRegisterClass(HINSTANCE hInstance) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
窗⼝过程函数
贪吃蛇编程教学注册窗⼝函数
3.2游戏界⾯控制
贪吃蛇游戏的游戏界⾯包括墙的绘制、蛇⾝体的绘制、蛇移动范围的绘制、⾷物的绘制、分数框和注释的绘制等等。其中贪吃蛇的⾝体的绘制,是本程序中的核⼼算法。
3.2.1墙、框体的绘制
在win32 application⼯程中,有很多绘制图形的函数。这⾥最多使⽤到的是Rectangle()函数绘制矩形。通过坐标控制矩形的两对⾓点来确定矩形的长、宽、⾼,通过在窗⼝中添加画笔和画刷,使⽤不同的线条颜⾊和样式,画出所需的图框。如下是墙的绘制:
hpen=CreatePen(PS_SOLID,1,RGB(255,255,255)); //创建⽆⾊的画笔
hbru=CreateSolidBrush(RGB(255,255,255)); //创建⽆⾊的画刷
hpenold=(HPEN)SelectObject(hdc,hpen);
hbruold=(HBRUSH)SelectObject(hdc,hbru);
Rectangle(hdc,rt.p,rt.right,rt.bottom); //绘制背景
SelectObject(hdc,hpenold); //恢复笔
SelectObject(hdc,hbruold); //恢复画刷
hpen=CreatePen(PS_SOLID,1,RGB(255,100,0)); //创建⼀⽀砖红⾊的笔
hpenold=(HPEN)SelectObject(hdc,hpen); //把砖红⾊的笔选进画板
Rectangle(hdc,45,35,615,465);
hbru=CreateSolidBrush(RGB(255,100,0)); //创建⼀⽀砖红⾊的画刷
hbruold=(HBRUSH)SelectObject(hdc,hbru); //把砖红⾊的画刷选进画板
hbruold=(HBRUSH)SelectObject(hdc,hbru); //把砖红⾊的画刷选进画板
for(i=50;i<=600;i+=10) //画围墙
{
Rectangle(hdc,i,40,i+10,49); //上边
Rectangle(hdc,i,451,i+10,460); //下边
}
for(i=40;i<=450;i+=10)
{
Rectangle(hdc,50,i,59,i+10); //左边
Rectangle(hdc,601,i,610,i+10); //右边
}
SelectObject(hdc,hbruold);
SelectObject(hdc,hpenold);
程序代码中,各种函数的功能已经备注的很详细,这⾥不再赘述。在写程序的初期,围墙是⽤⼩⽅格围成的(图3),后来在此基础上做了改动(图4),最后⽣
成的效果,改变⼀下画笔,完全可⽤⼏句代码来代替,如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论