2016-04-26 66 views
0

打電話給我鈍或任何其他你喜歡的名字。我的大學從來沒有正確地教過我OOP,因此我更喜歡用C語言編寫代碼,但爲了擴展和教授我自己的一些新技能,我決定嘗試自學更多的對象以及參與我的其他激情/愛好,文字冒險。我將在C++中嘗試這一點,因爲這是我用於大多數本科生的語言,所以我知道它是最好的。我得到的是我寫了一個通用的.h文件來獲取「位置」應該具有的基本屬性和方法。如果我只想創建一堆房間並且能夠將N/S/E/W轉移到另一個普通房間並打印房間的描述,那就很好。我不知道該怎麼做是對這個頭文件做一個更具體的實現。我擔心我沒有很好地解釋我的問題,所以讓我舉個例子來說明:創建文本冒險時使用OOP

我有一個房間,可以稱之爲「客廳」。向北是「廚房」。南邊是「Den」。 「客廳」和「書房」之間有一扇門。用戶可以說「N」和goNorth()會被調用,並且所有的都會很好用。然而,如果用戶說「S」,我希望它給他們某種「你不能這樣做」,直到他們打開門。這需要我1)完全放棄我的OOP思想,而是將每個房間寫成它自己的一組函數和變量(我過去怎麼做),或者2)對我包含的頭文件進行特定的實現所有這些功能和每個房間的變量(我理論上如何去做),但我不知道這在技術上是否可行,以及它是如何做到的。如果有人能指出我的方向正確,保持名字呼叫到最低限度,我會非常感激它。

就這樣你知道,我清楚地知道有整個語言和引擎專門用於這個過程,我現在不想做一個盛大的全面遊戲,我想要做的就是提高我的編程水平技能,這就是爲什麼我要走這條路。

+1

1)沒有正確的方法。 2)第1點適用於一切,而不僅僅是這個程序。 – immibis

+0

正常情況下,相同的'.h'不能有多個'.cpp'文件。你可以創建一個具有虛擬功能的抽象基類'class Room',例如'virtual void printDescription()= 0;'和實現這些方法的派生類('class Kichen:public Room'),並且具有狀態的數據成員那個房間('bool drawerOpen')。 – tmlen

+0

@tmlen絕對沒有理由不能擁有比標題更多的cpp文件。事實上,幾乎每個項目都至少會有'main.cpp'。 – 2016-04-26 22:59:23

回答

0

這可能會被關閉太寬泛,因爲有很多方法可以解決它。下面是約我在一個類似的情況已經做了:

Room有一個方法GetConnection(direction)和(如果沒有辦法走那條路還是一個空指針)返回一個指針Connection對象。

Connection對象有一個虛擬的Traverse()方法。基本Connection有一位會員指向目的地,Traverse()方法只是將玩家的位置更新到目的地。

對於有額外的限制,一個派生類Connection,說ConnectionThroughDoor有一個重寫Traverse()方法檢查該大門是敞開的(或任何有關限制)調用基類Traverse()實際移動玩家面前。

概括來說,從編程接口的角度來考慮,並考慮是否需要額外的類來表示其他概念(如Rooms之間的Connection)。

+0

我想這可能太寬泛了,但我不確定還有什麼要處理它。我甚至從來沒有想過把它連接成自己的對象,這是一個非常有趣的(如果不是令人費解的)聽起來的想法。我還沒有真正明白爲什麼人們喜歡OOP這麼多,總是聽起來像我這麼做。儘管感謝您的幫助! – Nick