2013-05-27 104 views
0

我正在設計遊戲風格的移動RPG遊戲,並且有關於如何構造對象的問題。由於這是概念上的,選擇任何你想要的語言來回答,雖然我主要程序在Javascript/JQuery的/ PHP。關於面向對象和父母/子女關係的概念性問題

。假定如下:

- The mobile application has a Game() class 
- The Game() has one Player() and one Dungeon() 
- The Dungeon() has many DungeonRooms() 
- A DungeonRoom() has many DungeonCards() 
- A DungeonCard() has many DungeonCardActions() *1 
- A DungeonCardAction() has an onClick() event 
- An onClick() event can be designed to harm the Player()'s health. // e.g. "Put hand in Fire" 

[1]注:當你點擊一個卡,專用卡的行爲,揭示

我的問題是,什麼是傷害玩家的健康合理的方式?我敢肯定這不是:

function onClick() 
{ 
    parent.parent.parent.parent.player.health -= 10; 
} 

這假設有一個嚴格的對象層次結構和深度順序從不改變。

是不是Game()對象總是通過引用傳遞給每個新對象的構造函數,所以任何對象都有完全訪問權限來瀏覽其他對象的整個宇宙?

回答

2

爲了代碼可讀性和對象的概念含義,沒有更好的但唯一通常首選的方法。

給予第一次看,我注意到你使用一個單一的對象爲你的球員。玩家是控制玩家角色的人。演員通過其控制器進行控制。其他任何遊戲角色也可以由其他類型的控制器來控制。這樣的做法中解放出來,從遊戲機制的遊戲內容,以便程序員可以專注於各自獨立。

應用一點修改,我提出了一個使用上述規則的新模型。 (總是可以有另一個漂亮的解決方案)

  • 應用程序有遊戲類。
  • 遊戲有玩家和內容
  • 內容有地下城(遊戲級別)
  • 每個地牢都有一個包含以下
  • 東西== DungeonCard是一個演員DungeonRooms。
  • ==您的播放器單元是一個演員。

  • 演員在同一個房間通過他們的父母都知道彼此的

  • 每個演員可以用控制器(相互)

  • 您的播放器單元演員由鍵盤控制,鼠標
  • 相關您的地牢卡由您的鼠標控制
  • DungeonCardAction是一種控制器方法。
  • 球員動作都控制方法。

編輯:假設你正在使用支持全局/靜態/單身對象的語言,你的遊戲類就只能在你的應用程序生命週期分配一次,並且可以暴露通過全球範圍內的整個遊戲代碼,因此少構造函數參數。

+0

您對將遊戲作爲全球單身人士的評論很有意義,而且可能是我一直在尋找的作品!在這個特定的遊戲中,玩家不是房間裏的傳統「單位」它是第一人稱地牢抓取更接近像霧或隱藏物體遊戲的遊戲。所以玩家存在,但他作爲更多的全球對象存在。感謝您的建議! – Anthony