文字界面迷宫_第1页
文字界面迷宫_第2页
文字界面迷宫_第3页
文字界面迷宫_第4页
文字界面迷宫_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、 迷宫游戏目录一、题目的名称及要求2二、完成的功能及特色2(1) 程序功能的详细说明2(2) 自己的特色2(3) 运行界面截图3三、设计实现3(1) 设计思想,类之间的关系图3(2) 主要函数的说明4(3) 程序的源代码清单6一、题目的名称及要求题目名称:迷宫游戏【内容】初始时建立一个迷宫,要求迷宫中至少有8个房间,其中一个是入口,一个是出口,房间的数量及连接自己定。每个房间有名称、还要记录他周围的邻居,初始时在入口房间,房间有东、南、西、北四个方向 (E,S,W,N),如果某方向有房间就可以往这个方向走,在每一步走之前要提示用户目前在哪个房间,可以往哪些方向走,让用户根据提示走下一步。如果走

2、了八步还没有走到出口,则结束程序并显示走过的路径;如果在八步之内走到了出口,则胜利并显示成功的路径。【要求】(1) 按照面向对象的思想和开发过程完成这个应用程序(2) 不能使用全局变量(3) 房间有三种,一种是普通房间,一种是MirrorRoom,该房间的特点是往东走实际上是往西走,往西走实际上是往东走, 往南走实际上是往北走,往北走实际上是往南走。一种是DizzyRoom,该房间的特点往东和西都还是在自己这个房间,南北正常。【扩充功能】1 输入合法性的判断2 重载运算符 <<3 空间的释放4 其他可行的功能2、 完成的功能及特色(1) 程序功能的详细说明 运行程序后,文字说明将提

3、示用户选择括号中存在的字母(w,e,s,n中的一个或多个)的其中一个输入,表示用户需选择能够行走的方向(东西南北中的一个或多个)前行。如果输入的方向是括号中显示的字母,即输入的方向有房间,则会显示已到达该房间,否则提示该方向不在可选择范围内,并要求重新输入。此外,在进行游戏时,用户可以随时按“q”键退出游戏。程序一开始,设定在迷宫的入口(即普通房间“入口”),若在八步之内到达迷宫的出口(即普通房间“出口”),则显示“你赢了”,否则显示失败,游戏结束。同时无论是成功走出迷宫,或是步数超出八步,还是用户退出游戏,结束后屏幕上都会显示所走的路径。如果是中途退出,路径以“q”结尾。(2) 自己的特色程

4、序实现了题目的基本要求,同时也实现了部分补充功能。该程序有三种房间,分别是普通的房间和两种特殊房间(镜子房和竖直房)。普通房即以正常形式行走;镜子房的特点是选择的方向和实际行进的方向是相反的;竖直房特点是往东和西都还是在自己这个房间,并出现错误提示,南北正常行进。在程序结束时,使用了释放空间的函数,将建立的动态空间释放,并显示删除的空间名。房间具体布置图 (3) 运行界面截图三、设计实现(1) 设计思想,类之间的关系图该程序采用面向对象的思想,利用了继承和组合的原理。 类间的关系图为:Roomstring name;Room *west, *east, *south, *north;Room(

5、string a);void add_dir(Room* n, string dir);void tell_dir();friend ostream& operator<<(ostream& out, Room* n);virtual Room* travel(string dir);Room* giveroom(string n); MirrorMirror(string a);Room* travel(string dir);DizzyDizzy(string a);Room* travel(string dir);NormalNormal(string a);

6、Room* travel(string dir);(2) 主要函数的说明1. 连接房间的函数:void add_dir(Room* n, string dir);传入一个指向某方向的邻居的指针和这个方向(east,west,south,north)。功能是让两个房间相连。比如r1指针指向房间Room1, r2指针指向房间Room2,“r1->add_dir(r2, "east");”执行后,房间Room1的east指针会指向房间Room2,同时房间Room2的west指针会指向房间Room1,从而实现两房间相连,可以在之间来回走动。2. 移动函数:virtual Ro

7、om* travel(string dir);传入一个用户输入的方向(e,w,s,n)和指向当前房间的指针。功能是按照用户输入的方向移动指向当前房间的指针。因为三类房间的移动方式不同,所以在基类(父类)中将该函数设为虚函数。在各派生类(子类)中都有相应的移动函数,以实现移动的功能。同时,函数中还判断了行走方向是否有房间,当输入方向无房间相连时将提示错误。3. 释放动态空间函数:void del(Room* n);传入迷宫中的任意一个动态空间。功能是在程序结束前释放建立的动态空间,将迷宫删除。其中用到了递归法编写函数。(3) 程序的源代码清单room.h#ifndef ROOM_H#define

8、 ROOM_Hclass Roompublic:string name;Room *west, *east, *south, *north;Room(string a);void add_dir(Room* n, string dir);void tell_dir();friend ostream& operator<<(ostream& out, Room* n);virtual Room* travel(string dir);Room* giveroom(string n);#endif ROOM_Hroom.cpp#include"room.h&q

9、uot;Room:Room(string a)name = a;west=NULL;east=NULL;north = NULL;south = NULL;void Room:add_dir(Room* n, string dir)if (dir = "west")west = n;n->east = this;if (dir = "east")east = n;n->west = this;if (dir = "south")south = n;n->north = this; if (dir = "no

10、rth") north = n;n->south = this;void Room:tell_dir()if (west != NULL)cout << "w"if (east != NULL)cout << "e"if (south != NULL)cout << "s"if (north != NULL)cout << "n"ostream& operator<<(ostream& out, Room* n)out &l

11、t;< n->name;return out;Room* Room:travel(string dir)return this;Room* Room:giveroom(string n)if (n = "w")return this->west;if (n = "e")return this->east;if (n = "s")return this->south;if (n = "n")return this->north;normal.h#include"room.

12、h"#ifndef NORMAL_H#define NORMAL_Hclass Normal :public Roompublic:Normal(string a);Room* travel(string dir);#endif NORMAL_Hnormal.cpp#include"normal.h"Normal:Normal(string a) :Room(a)Room* Normal:travel(string dir)Room* temp=NULL;if (dir = "w")temp = west;if (dir = "e&q

13、uot;)temp = east;if (dir = "s")temp = south;if (dir = "n")temp = north;if (temp = NULL)cout << "选择中没有该方向!请重新选择!" << endl;return this;elsereturn temp;dizzy.h#include"room.h"#ifndef DIZZY_H#define DIZZY_Hclass Dizzy :public Roompublic:Dizzy(string a)

14、;Room* travel(string dir);#endif DIZZY_Hdizzy.cpp#include"dizzy.h"Dizzy:Dizzy(string a) :Room(a)Room* Dizzy:travel(string dir)Room* temp = NULL;if (dir = "w" | dir = "e")cout << "错误!该房间只能竖直行走!" << endl;return this;if (dir = "n")temp = nor

15、th;if (dir = "s")temp = south;if (temp = NULL)cout << "选择中没有该方向!请重新选择!" << endl;return this;elsereturn temp;mirror.h#include"room.h"#ifndef MIRROR_H#define MIRROR_Hclass Mirror :public Roompublic:Mirror(string a);Room* travel(string dir);#endif MIRROR_Hmirro

16、r.cpp #include"mirror.h"Mirror:Mirror(string a) :Room(a)Room* Mirror:travel(string dir)Room* temp = NULL;if (dir = "w")temp = east;if (dir = "e")temp = west;if (dir = "n")temp = north;if (dir = "s")temp = south;if (temp = NULL)cout << "选择中

17、没有该方向!请重新选择!" << endl;return this;elsereturn temp;maze.cpp#include"room.h"#include"normal.h"#include"dizzy.h"#include"mirror.h"#include"del.h"void del(Room* n);int main()Room *r1 = new Normal("入口");Room *r2 = new Normal("房1&

18、quot;);Room *r3 = new Normal("房2");Room *r4 = new Normal("房3");Room *r5 = new Normal("房4");Room *r6 = new Normal("出口");Room *r7 = new Dizzy("竖直房");Room *r8 = new Mirror("镜子房"); Room *now = r1;r1->add_dir(r3, "east");r2->add_

19、dir(r7, "north");r1->add_dir(r8, "south");r7->add_dir(r5, "west");r7->add_dir(r8, "north");r8->add_dir(r4, "east");r8->add_dir(r6, "west");cout << "欢迎来到迷宫游戏!" << endl;cout << "你现在所在的位置是入口,请选择移

20、动方向(wesn)走出迷宫。(q键退出程序)" << endl;cout << endl;int i;string dir;string step8;for (i = 0; i < 8; i+)cout << endl;cout << "你现在所在的位置是 " << now << "("now->tell_dir();cout << "):"cin >> dir;if (dir = "q")break;stepi = dir;now = now->travel(dir);if (now = r6)break;cout << endl;if (i >= 8|dir="q")cout << "n 你输了!" << endl;elsecout << "恭喜,你赢了!" << endl;cout << "n移动轨迹:"for (int j = 0; j < 8; j+)cout <<

温馨提示

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

评论

0/150

提交评论