2010-06-12 33 views
1

我嘗試實現一個小遊戲項目,以便更深入地瞭解面向對象編程(winforms C++/cli)。 我已經開始編碼了,但現在我想重新設計。 一開始遊戲應該由遊戲引擎,用戶界面,高分和操場四部分組成。下面有一個小(非UML-符合)類diagramm想象我的目的面向對象編程 - 需要你的幫助

Class diagram

請問這是正確的方式?在我眼中,遊戲引擎負責控制遊戲序列(狀態機?)並在所有其他類之間交換信息。

我感謝任何幫助!

編輯:

所以這是一個非常簡單的遊戲,沒什麼大不了的!什麼我現在做這裏'山鏈接: http://www.file-upload.net/download-2595287/conways_project.exe.html (無病毒:)但我猜你需要.NET framwork得到它的工作)

+0

你應該先設計再編程的遊戲。另外,這個遊戲是在一個控制檯,在2D,3D ..? – Alerty 2010-06-12 18:19:46

+0

這聽起來更像是尋找現有的示例遊戲。遊戲開發通常由性能要求驅動,而不是設計的美感。 – Dummy00001 2010-06-12 18:26:40

+2

嘿,你是如何製作這個令人敬畏的圖表的? – 2010-06-12 18:34:28

回答

6

不幸的是,當前的設計很爛:)

我不會說什麼,我會建議實際上是最佳的解決方案,因爲在遊戲設計中,通常存在「沒有最好」解決方案,但我認爲這會讓你覺得適當。

較大的UML here.

alt text http://yuml.me/1924128b

比方說,你有你的基本類Game。這是抽象類,它包裝了所有的遊戲邏輯,並且是一種瑞士刀。

您應該創建另外兩個類 - UIState(顯然,它封裝了遊戲的UI操作並存儲當前的遊戲狀態)。讓你的Game類擁有UIState實例。

現在,你的Game類應該有基本的方法來控制你的遊戲。他們可能是簡單的​​和update(...)方法,這部分實際上有點棘手。如果你的遊戲是實時的,你將不得不每隔Y毫秒更新你的狀態,所以你的update(...)應該被循環調用。

如果您的遊戲實際上不是實時的,那麼您的更新應該只在用戶做某件事情時纔會發生,或者實際上知道您需要更改某些內容。你可以在這裏實現一個消息隊列,並且update(...)調用將簡單地刷新所有這些消息。

現在,​​方法。創建一些課程並稱之爲Backend - 讓這個課程囊括你所有的繪圖可能性。 這裏有一件非常酷的事情 - 你可以讓你的Backend成爲一個抽象超類,並創建一些具體後端,它來自Backend。這實際上會讓你有機會用簡單的代碼操作來切換你的Backends

之後,你應該將Backend實例傳遞給你的​​方法,它會做相應的圖紙,它的邏輯可以寫成下面的方式:

foreach (const Object& object, game_state) { 
    object->render(backend); // Or something like that 
} 

過去的事情說了,你的遊戲狀態。你可以有一個簡單的結構來保存你當前的所有對象,分數​​等等。讓每個對象訪問那個結構,一切都會好的。

其實,有很多事情要考慮,如果你想,我可以寫更多關於這個遊戲的設計方法和大家分享一些技巧:)

+0

我會補充說,取決於OP在做什麼(控制檯遊戲,3D遊戲等),管理窗口(初始化窗口,錯誤,關閉窗口)可能很重要。另外,如果這是實時的,並且是二維或三維(DirectX,OpenGL等),重要的是擁有恆定的FPS。 – Alerty 2010-06-13 00:14:59

1

你的「遊戲引擎」可能被認爲更多的是「數學圖書館。'您可能希望在'遊戲'和其他服務器類之間插入另一個對象,該對象將'遊戲'的要求委託給服務器類並稱爲'遊戲引擎'。

也可能將「高分」和「遊樂場」組合成一個代表「遊戲狀態」的類並將其直接移植到「遊戲」。 '遊樂場'可以是一個服務器類,它封裝了任何代碼來做實際呈現所述背景的地方,這通常表示一個'渲染類'。

恕我直言