迷宫游戏.docx
- 文档编号:18184842
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:13
- 大小:45.32KB
迷宫游戏.docx
《迷宫游戏.docx》由会员分享,可在线阅读,更多相关《迷宫游戏.docx(13页珍藏版)》请在冰点文库上搜索。
迷宫游戏
迷宫游戏
目录
一、题目的名称及要求2
二、完成的功能及特色2
(1)程序功能的详细说明2
(2)自己的特色2
(3)运行界面截图3
三、设计实现3
(1)类之间的关系图3
(2)主要函数的说明4
(3)程序的源代码清单4
一、题目的名称及要求
题目名称:
迷宫游戏
要求:
初始时建立一个迷宫,要求迷宫中至少有8个房间,其中一个是入口,一个是出口,房间的数量及连接自己定。
每个房间有名称、还要记录他周围的邻居,初始时在入口房间,房间有东、南、西、北四个方向(E,S,W,N),如果某方向有房间就可以往这个方向走,在每一步走之前要提示用户目前在哪个房间,可以往哪些方向走,让用户根据提示走下一步。
如果走了八步还没有走到出口,则结束程序并显示走过的路径;如果在八步之内走到了出口,则胜利并显示成功的路径。
二、完成的功能及特色
(1)程序功能的详细说明
程序运行后,要求用户输出e,w,s,n中的一个字母,表示要向东西南北中的一个方向走。
如果输入的方向有房间,则会显示已到达该房间,并出现提示,要求用户继续选择方向;如果输入的方向没有房间,则会提示目前在原房间、没有移动。
程序一开始,在迷宫的入口(即房间Room1),若在八步之内到达迷宫的出口(即房间Room8),则显示“youwin”,否则游戏结束。
在进行游戏时,用户可以随时按“Q”键退出游戏。
无论是成功走出迷宫,或是步数超出八步,还是用户退出游戏,屏幕上都会显示所走的路径。
如果是中途退出,路径以“Q”结尾。
(2)自己的特色
程序实现了题目的基本要求,并实现了部分拓展要求。
设置了三类房间,分别是普通的房间normalroom,特殊的房间mirrorroom和dizzyroom。
mirrorroom特点是你选择的方向和你实际行进的方向是相反的;dizzyroom特点是往东和西都还是在自己这个房间,并出现错误提示,南北正常行进。
房间具体布局图:
(3)运行界面截图
三、设计实现
(1)类之间的关系图
基类(父类)
Room
dizzyroom
mirrorroom
normalroom
派生类(子类)
(2)主要函数的说明
添加房间邻接关系函数:
voidadd_connection(stringdir,room*n)
传入一个方向(east,west,south,north)和一个指向该方向的邻居的指针。
功能是让两个房间互相知道对方为自己某个方向上的邻居。
比如p1指针指向房间Room1,p2指针指向房间Room2,语句“p1->add_connection("east",p2)”执行后,房间Room1的east指针会指向房间Room2,同时房间Room2的west指针会指向房间Room1,即实现了两个房间都知道了自己的邻居。
移动函数:
virtualroom*travel(string,room*)
传入一个用户输入的方向(e,w,s,n)和指向当前房间的指针。
功能是按照用户输入的方向移动指向当前房间的指针。
因为三类房间的移动方式不同,所以在基类(父类)中将该函数设为虚函数。
在各派生类(子类)中都有相应的移动函数,以实现移动的功能。
(3)程序的源代码清单
Room.h
#ifndefROOM_H
#defineROOM_H
#include
#include
usingnamespacestd;
classroom
{
protected:
stringname;
room*east;
room*west;
room*south;
room*north;
public:
room(stringn);
voidadd_connection(stringdir,room*n);
virtualroom*travel(string,room*);
friendostream&operator<<(ostream&output,constroom&n);
voiddir_can();
};
#endif
Normalroom.h
#ifndefNORMALROOM_H
#defineNORMALROOM_H
#include"normalroom.h"
#include"room.h"
#include
usingnamespacestd;
classnormalroom:
publicroom
{
public:
normalroom(stringn);
room*travel(stringdir,room*now);
};
#endif
Dizzyroom.h
#ifndefDIZZYROOM_H
#defineDIZZYROOM_H
#include"room.h"
#include
usingnamespacestd;
classdizzyroom:
publicroom
{
public:
dizzyroom(stringn);
room*travel(stringdir,room*n);
};
#endif
Mirrorroom.h
#ifndefMIRRORROOM_H
#defineMIRRORROOM_H
#include"room.h"
#include
usingnamespacestd;
classmirrorroom:
publicroom
{
public:
mirrorroom(stringn);
room*travel(stringdir,room*n);
};
#endif
Room.cpp
#include"room.h"
#include
voidroom:
:
add_connection(stringdir,room*n)
{
if(dir=="east")
{
east=n;
n->west=this;
}
elseif(dir=="west")
{
west=n;
n->east=this;
}
elseif(dir=="south")
{
south=n;
n->north=this;
}
elseif(dir=="north")
{
north=n;
n->south=this;
}
}
room:
:
room(stringn)
{
name=n;
east=this;
west=this;
south=this;
north=this;
}
ostream&operator<<(ostream&output,constroom&n)
{
output< returnoutput; } room*room: : travel(stringd,room*now) { returnthis; } voidroom: : dir_can() { if(east! =this) cout<<"e"; if(west! =this) cout<<"w"; if(south! =this) cout<<"s"; if(north! =this) cout<<"n"; } Normalroom.cpp #include"normalroom.h" #include"room.h" #include usingnamespacestd; normalroom: : normalroom(stringn): room(n) { } room*normalroom: : travel(stringdir,room*n) { if(dir=="e") n=east; elseif(dir=="w") n=west; elseif(dir=="s") n=south; elseif(dir=="n") n=north; returnn; } Dizzyroom.cpp #include"dizzyroom.h" #include #include usingnamespacestd; dizzyroom: : dizzyroom(stringn): room(n) { } room*dizzyroom: : travel(stringdir,room*n) { if(dir=="e"||dir=="w") cout<<"Error.Thisisadizzyroom."< elseif(dir=="s") n=south; elseif(dir=="n") n=north; returnn; } Mirrorroom.cpp #include"mirrorroom.h" #include usingnamespacestd; mirrorroom: : mirrorroom(stringn): room(n) { } room*mirrorroom: : travel(stringdir,room*n) { if(dir=="w") n=east; elseif(dir=="e") n=west; elseif(dir=="n") n=south; elseif(dir=="s") n=north; returnn; } Game.cpp #include #include #include"room.h" #include"normalroom.h" #include"dizzyroom.h" #include"mirrorroom.h" usingnamespacestd; voidmain() { NormalroomR1("Room1"),R3("Room3"),R4("Room4"),R5("Room5"),R6("Room6"),R8("Room8"); mirrorroomR2("Room2"); dizzyroomR7("Room7"); room*now=&R1; room*p1=&R1; room*p2=&R2; room*p3=&R3; room*p4=&R4; room*p5=&R5; room*p6=&R6; room*p7=&R7; room*p8=&R8; p1->add_connection("west",p2); p2->add_connection("west",p3); p3->add_connection("south",p7); p4->add_connection("north",p7); p5->add_connection("west",p4); p6->add_connection("south",p5); p7->add_connection("east",p6); p8->add_connection("west",p6); cout<<"NowyouareintheRoom1,theentranceoftheroom."< cout<<"YoushouldmovetotheRoom8,theexitofthemaze,lessthan8steps."< cout< stringstep[8]; for(inti=0;i<8;i++) { cout<<"Pleaseenteradirection("; now->dir_can(); cout<<"): "; stringdir; cin>>dir; step[i]=dir; if(dir=="q") break; now=now->travel(dir,now); cout<<"Youareinthe"; cout<<*now< if(now==&R8) break; } if(now==&R8) cout<<"Congratulations! Youwin."< else cout<<"Gameover."< cout<<"Yourstepsare: "< for(intj=0;j<8;j++) { cout< if(step[j]=="q") break; } cout< system("pause"); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迷宫 游戏
![提示](https://static.bingdoc.com/images/bang_tan.gif)