文字界面迷宮_第1頁
文字界面迷宮_第2頁
文字界面迷宮_第3頁
文字界面迷宮_第4頁
文字界面迷宮_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、 迷宮游戲目錄一、題目的名稱及要求2二、完成的功能及特色2(1) 程序功能的詳細(xì)說明2(2) 自己的特色2(3) 運行界面截圖3三、設(shè)計實現(xiàn)3(1) 設(shè)計思想,類之間的關(guān)系圖3(2) 主要函數(shù)的說明4(3) 程序的源代碼清單6一、題目的名稱及要求題目名稱:迷宮游戲【內(nèi)容】初始時建立一個迷宮,要求迷宮中至少有8個房間,其中一個是入口,一個是出口,房間的數(shù)量及連接自己定。每個房間有名稱、還要記錄他周圍的鄰居,初始時在入口房間,房間有東、南、西、北四個方向 (E,S,W,N),如果某方向有房間就可以往這個方向走,在每一步走之前要提示用戶目前在哪個房間,可以往哪些方向走,讓用戶根據(jù)提示走下一步。如果走

2、了八步還沒有走到出口,則結(jié)束程序并顯示走過的路徑;如果在八步之內(nèi)走到了出口,則勝利并顯示成功的路徑?!疽蟆?1) 按照面向?qū)ο蟮乃枷牒烷_發(fā)過程完成這個應(yīng)用程序(2) 不能使用全局變量(3) 房間有三種,一種是普通房間,一種是MirrorRoom,該房間的特點是往東走實際上是往西走,往西走實際上是往東走, 往南走實際上是往北走,往北走實際上是往南走。一種是DizzyRoom,該房間的特點往東和西都還是在自己這個房間,南北正常。【擴(kuò)充功能】1 輸入合法性的判斷2 重載運算符 <<3 空間的釋放4 其他可行的功能2、 完成的功能及特色(1) 程序功能的詳細(xì)說明 運行程序后,文字說明將提

3、示用戶選擇括號中存在的字母(w,e,s,n中的一個或多個)的其中一個輸入,表示用戶需選擇能夠行走的方向(東西南北中的一個或多個)前行。如果輸入的方向是括號中顯示的字母,即輸入的方向有房間,則會顯示已到達(dá)該房間,否則提示該方向不在可選擇范圍內(nèi),并要求重新輸入。此外,在進(jìn)行游戲時,用戶可以隨時按“q”鍵退出游戲。程序一開始,設(shè)定在迷宮的入口(即普通房間“入口”),若在八步之內(nèi)到達(dá)迷宮的出口(即普通房間“出口”),則顯示“你贏了”,否則顯示失敗,游戲結(jié)束。同時無論是成功走出迷宮,或是步數(shù)超出八步,還是用戶退出游戲,結(jié)束后屏幕上都會顯示所走的路徑。如果是中途退出,路徑以“q”結(jié)尾。(2) 自己的特色程

4、序?qū)崿F(xiàn)了題目的基本要求,同時也實現(xiàn)了部分補(bǔ)充功能。該程序有三種房間,分別是普通的房間和兩種特殊房間(鏡子房和豎直房)。普通房即以正常形式行走;鏡子房的特點是選擇的方向和實際行進(jìn)的方向是相反的;豎直房特點是往東和西都還是在自己這個房間,并出現(xiàn)錯誤提示,南北正常行進(jìn)。在程序結(jié)束時,使用了釋放空間的函數(shù),將建立的動態(tài)空間釋放,并顯示刪除的空間名。房間具體布置圖 (3) 運行界面截圖三、設(shè)計實現(xiàn)(1) 設(shè)計思想,類之間的關(guān)系圖該程序采用面向?qū)ο蟮乃枷?,利用了繼承和組合的原理。 類間的關(guān)系圖為: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) 主要函數(shù)的說明1. 連接房間的函數(shù):void add_dir(Room* n, string dir);傳入一個指向某方向的鄰居的指針和這個方向(east,west,south,north)。功能是讓兩個房間相連。比如r1指針指向房間Room1, r2指針指向房間Room2,“r1->add_dir(r2, "east");”執(zhí)行后,房間Room1的east指針會指向房間Room2,同時房間Room2的west指針會指向房間Room1,從而實現(xiàn)兩房間相連,可以在之間來回走動。2. 移動函數(shù):virtual Ro

7、om* travel(string dir);傳入一個用戶輸入的方向(e,w,s,n)和指向當(dāng)前房間的指針。功能是按照用戶輸入的方向移動指向當(dāng)前房間的指針。因為三類房間的移動方式不同,所以在基類(父類)中將該函數(shù)設(shè)為虛函數(shù)。在各派生類(子類)中都有相應(yīng)的移動函數(shù),以實現(xiàn)移動的功能。同時,函數(shù)中還判斷了行走方向是否有房間,當(dāng)輸入方向無房間相連時將提示錯誤。3. 釋放動態(tài)空間函數(shù):void del(Room* n);傳入迷宮中的任意一個動態(tài)空間。功能是在程序結(jié)束前釋放建立的動態(tài)空間,將迷宮刪除。其中用到了遞歸法編寫函數(shù)。(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 << "你現(xiàn)在所在的位置是入口,請選擇移

20、動方向(wesn)走出迷宮。(q鍵退出程序)" << endl;cout << endl;int i;string dir;string step8;for (i = 0; i < 8; i+)cout << endl;cout << "你現(xiàn)在所在的位置是 " << 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論