C++课程设计迷宫小游戏Word文档下载推荐.docx
- 文档编号:20427544
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:29
- 大小:542.23KB
C++课程设计迷宫小游戏Word文档下载推荐.docx
《C++课程设计迷宫小游戏Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C++课程设计迷宫小游戏Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
本课设文档基于迷宫游戏进行课程设计。
运行截图如下:
课程设计报告
课题:
学院:
专业:
学生姓名:
学号:
指导老师:
20XX年XX月XX日
1题目简介
人类建造迷宫已有5000年的历史。
在世界的不同文化发展时期,这些奇特的建筑物始终吸引人们沿着弯弯曲曲、困难重重的小路吃力地行走,寻找真相。
迷宫小游戏应运而生。
在游戏中,迷宫被表现为寻找出口的一种益智小游戏。
本课设用★代表人物,○代表出口,■代表围墙,其他制表符(例如:
━、┃、┳等)用来构造道路和阻挡玩家的去路。
玩家要在游戏中,通过复杂的道路找到出口方可胜利。
本游戏一共设计3关,难度由低逐渐提升。
本课设开发基于Windows764位系统,集成开发环境VisualStudio2015Pro。
2功能模块划分
本游戏一共分为四个功能模块,分别是开始界面的显示、进行游戏、下一关和通关界面的显示。
1、首先,打开程序的时候会进入一个欢迎界面,按任意键即可开始游戏。
2、玩家通过wsad控制人物(★)的上下左右。
3、每当玩家到达出口(○)会自动显示通过本关卡,并等待玩家按任意键进行下一关游戏。
4、当玩家通过所有的关卡时,将会显示一个通关界面。
具体的功能模块图如下:
3界面设计
本程序完全通过文本模式进行,根据上述四大功能模块,需要设计四类用户界面,分别是开始界面,游戏界面,下一个界面,游戏结束界面。
1、首先就是最基本的用户欢迎界面,也称开始界面,如下图3.1所示。
图3.1开始界面
2、其次,就是本程序的关键,也是这个游戏的核心所在,游戏交互界面,如下图3.2所示。
图3.2游戏交互界面
3、接着,就是通过本关卡之后的界面,如图3.3所示。
图3.3通关界面
4、最后,就是通过所有关卡的游戏界面,如图3.4所示。
图3.4游戏通关界面
4详细设计
4.1数据结构
该迷宫小游戏只需设计一个类即可控制整个游戏的运行,通过分析,迷宫小游戏需要一个构造函数Maze()对游戏数据进行初始化,一个显示开始界面的函数ShowUI(),一个绘制游戏界面的函数ShowGame(),一个初始化下一关数据的函数NextCheckpoint(),一个控制人物移动的函数Move(),其中通过Rand()管理各关卡的地图数据,一个游戏结束界面函数GameOver(),还需要一个Game()函数控制游戏的开始与结束逻辑。
在整个设计中,通过二维数组来映射各种文本字符(★、■等),其中映射数据通过宏定义来实现,这样方便管理与维护。
类的数据结构如下:
classMaze{
public:
Maze();
//构造函数,初始化关卡数据
voidShowUI();
//显示迷宫开始界面
voidGame();
//游戏开始
voidShowGame();
//显示游戏界面
voidGameOver();
//通关所有关卡,显示游戏结束界面
voidMove();
//移动
voidNextCheckpoint();
//下一关
private:
intmap[DIMENSION][DIMENSION];
//记录关卡地图
intcheckpoint;
//记录当前关卡
intx,y;
//记录人物在迷宫中的坐标
voidRand();
//产生新地图
};
4.2函数说明
迷宫程序设计的函数都是类Maze的成员函数,分别是Maze()、voidShowUI()、voidGame()、voidShowGame()、voidGameOver()、voidMove()、voidNextCheckpoint()、voidRand()。
1、Maze()属于构造函数,初始化第一关的游戏数据,例如人物★的x,y坐标,第一关的游戏地图数据等。
2、ShowUI()展示欢迎进入游戏的界面。
3、Game()控制游戏的进程,比如游戏开始、游戏进行中和结束的函数过程,是程序连贯的关键函数。
4、ShowGame()打印游戏进行中的界面。
5、GameOver()打印游戏结束界面,并结束程序的运行。
6、Move()获取键盘的按键信息,控制人物★在二维数组中的位置,是该游戏程序的核心函数。
7、NextCheckpoint()控制当前是第几关,并可调用Rand()对下一关的地图数据进行初始化。
8、Rand()用来初始化每一个的地图信息和人物位置信息,通过Rand()可方便关卡的增减修改,利于维护。
以下是Game()成员函数的代码,代码质量风格良好。
voidMaze:
:
Game()
{
do{
if(CHECKPOINT==checkpoint)
GameOver();
//游戏通关
elseif(RAILING13==map[y][x])
NextCheckpoint();
else{
ShowGame();
//打印迷宫
Move();
}
}while(true);
}
4.3函数设计流程图
其中,比较核心的两个函数(Game()与Move()函数)的程序流程图如下所示:
5遇到的问题及解决办法
1、游戏开始设计的时候,不知道如何对控制台进行清屏操作,导致游戏界面比较乱。
通过查阅网上资料,了解到了system(“cls”)函数可实现控制台界面的清屏操作,这
样看起来便简洁了很多。
2、本程序一开始通过cin函数进行键盘按键的读入,导致游戏无法连贯运行。
通过查阅网上资料,_getch()函数,从键盘获取一个按键,但不回显在屏幕上,完成
了游戏的实时运行操作。
3、标记人物★的x,y坐标经常与数组的行列混淆,老是出现map[x][y]这样的错误。
通过细心观察和总结,加深对知识的了解和运用,避免类似这样的非语法错误,养
成良好的代码习惯,下面再说一次map[y][x]才是正确的写法。
4、游戏结束的逻辑思路一直没连贯起来,导致程序进入死循环。
通过查阅相关资料,知道exit(0)可以在代码的任何位置结束程序的运行。
5、由于基础的不扎实以及考虑的不够全面,一开始在Move()的时候只进行了小写字母wsad按键的处理,没有处理大写的WSAD按键,这样会导致大写的时候,无法控制游戏人物的移动。
通过刻苦的学习,在switch里面每个的casew:
上下,再增加一行caseW:
即可,这
样执行同样的代码就无须再复制粘贴一遍了,或者再写一个函数解决。
6总结与展望
在做这个课程设计的时候,我感觉我就像迷宫里的★一样,通过解决一个个的问题,最后通过了一关关的关卡,得到了游戏的胜利。
一路走来着实不易,在一次次调试奔溃中躺过,如果不是老师和同学们的指导和帮助,或许我已经放弃了前进。
这次小游戏的开发,是我人生中的一次淬炼,是我迈向一名出色工程师的试炼。
无数个日日夜夜的积累与奋斗在这次开发中反映的淋漓尽致,人生也像课程设计一样,不能缺少规划和磨练。
只有坚持奋斗,克服一个个困难,才能到达最后的终点,品味风雨后的彩虹。
在此次开发设计中,我领悟了很多的道理,收获了很多以往在课堂上得不到的心得和感悟,也提高了我对C++的兴趣,完成一件作品的成就感不言而喻。
以后,我一定会好好学习,加强自己对软件开发的学习,提高自己的编程能力,成为一名出色的工程师,在C++编程的世界大放异彩。
在此,我要感谢所有帮助过我的同学和指导老师们,你们的鼓励和帮助是我成功的动力。
附录
用户使用手册
1、根据提示,按任意键即可开始游戏。
2、根据提示,按wsad即可进行游戏的操作。
程序源代码
#include<
iostream>
conio.h>
stdlib.h>
time.h>
#defineCHECKPOINT3//第3关通关,即最后一关通关,表示总关卡数
#defineDIMENSION20//迷宫地图数组大小
//定义栏杆
#defineACCESS0//表示迷宫中可以走动的路
#defineRAILING11//栏杆━
#defineRAILING22//栏杆┃
#defineRAILING33//栏杆┏
#defineRAILING44//栏杆┗
#defineRAILING55//栏杆┓
#defineRAILING66//栏杆┛
#defineRAILING77//栏杆┣
#defineRAILING88//栏杆┫
#defineRAILING99//栏杆┳
#defineRAILING1010//栏杆┻
#defineRAILING1111//栏杆╋
#defineRAILING1212//人物★
#defineRAILING1313//出口○
#defineRAILING1414//墙■
usingnamespacestd;
//主函数入口
intmain(void)
Mazem;
m.ShowUI();
//显示初始界面
m.Game();
return0;
Maze:
Maze()
checkpoint=0;
//第一关
Rand();
system("
cls"
);
ShowUI()
cout<
<
endl;
"
┏━━━━━━━━━━━━━━━━━━━━━━━┓"
<
┃┏━━━━━━━━━━━━━━━━━━━━━┓┃"
┃┃┃┃"
┃┃欢迎进入小游戏┃┃"
┃┃请按任意键继续......┃┃"
┃┗━━━━━━━━━━━━━━━━━━━━━┛┃"
┗━━━━━━━━━━━━━━━━━━━━━━━┛"
_getch();
ShowGame()
inti=0,j=0;
for(i=0;
i<
DIMENSION;
i++)
for(j=0;
j<
j++){
switch(map[i][j])
{
caseACCESS:
cout<
;
break;
caseRAILING1:
━"
caseRAILING2:
┃"
caseRAILING3:
┏"
caseRAILING4:
┗"
caseRAILING5:
┓"
caseRAILING6:
┛"
caseRAILING7:
┣"
caseRAILING8:
┫"
caseRAILING9:
┳"
caseRAILING10:
┻"
caseRAILING11:
╋"
caseRAILING12:
★"
caseRAILING13:
○"
caseRAILING14:
■"
default:
break;
}
if(DIMENSION-1==j)//换行
cout<
endl<
\t按键WSAD依次对应着上下左右"
GameOver()
┏━━━━━━━━━━━━━━━━┓"
┃┃"
┃恭喜你已经通关┃"
┗━━━━━━━━━━━━━━━━┛"
exit(0);
Move()
switch(_getch()){
case'
w'
//向上移动
W'
if(y>
0&
&
ACCESS==map[y-1][x]){
map[y][x]=ACCESS;
map[--y][x]=RAILING12;
elseif(y>
RAILING13==map[y-1][x])//出口不覆盖数据
--y;
break;
s'
//向下移动
S'
if(y<
DIMENSION-1&
ACCESS==map[y+1][x]){
map[++y][x]=RAILING12;
elseif(y<
RAILING13==map[y+1][x])
++y;
a'
//向左移动
A'
if(x>
ACCESS==map[y][x-1]){
map[y][--x]=RAILING12;
elseif(x>
RAILING13==map[y][x-1])
--x;
d'
//向右移动
D'
if(x<
ACCESS==map[y][x+1]){
map[y][++x]=RAILING12;
elseif(x<
RAILING13==map[y][x+1])
++x;
}
NextCheckpoint()
checkpoint++;
if(checkpoint>
=CHECKPOINT)
return;
\t恭喜您第"
checkpoint<
关已通关,请按任意键继续。
"
Rand()
inti=0,j=0;
j++)
map[i][j]=ACCESS;
i++){//初始化砖墙位置
map[i][0]=RAILING14;
map[i][DIMENSION-1]=RAILING14;
map[0][i]=RAILING14;
map[DIMENSION-1][i]=RAILING14;
switch(checkpoint){
case0:
map[9][0]=RAILING12;
//人物位置
map[9][DIMENSION-1]=RAILING13;
//出口位置
x=0;
//记录人物的x,y坐标
y=9;
//┃
for(i=3;
8;
i++){
map[i][2]=RAILING2;
map[i][8]=RAILING2;
map[i][10]=RAILING2;
map[i][17]=RAILING2;
for(i=11;
17;
i++){
//━
map[2][i]=RAILING1;
map[8][i]=RAILING1;
map[10][i]=RAILING1;
map[17][i]=RAILING1;
//┏
map[2][2]=RAILING3;
map[10][2]=RAILING3;
map[2][10]=RAILING3;
map[10][10]=RAILING3;
//┗
map[8][2]=RAILING4;
map[17][2]=RAILING4;
map[8][10]=R
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 迷宫 小游戏