关于OOP和父/子关系的概念性问题



我正在设计一款桌面游戏风格的手机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()对象总是通过引用传递给每个新对象的构造函数,所以任何对象都可以完全访问其他对象的整个宇宙?

为了代码的可读性和对象的概念意义,没有比这更好的方法了。

乍一看,我注意到你为玩家使用了单一对象。玩家是控制玩家角色的人。参与者通过其控制器进行控制。任何其他游戏角色也可以由其他类型的控制器控制。这种方法将游戏内容从游戏机制中解放出来,这样程序员就可以专注于每个单独的内容。

稍作修改,我提出了一个使用上述规则的新模型。(总会有另一个漂亮的解决方案)

    App有Game类
  • 游戏有玩家和内容
  • 内容有地下城(游戏关卡)
  • 每个地下城都有包含以下内容的DungeonRooms
  • ==DungeonCard is a Actor.
  • ==你的玩家单位是演员

  • 同一个房间里的演员通过他们的父母知道彼此

  • 每个actor都可以与控制器相关联(相互关联)

  • 你的播放器角色由键盘,鼠标控制
  • 你的DungeonCard是由你的鼠标控制
  • DungeonCardAction是一个控制器方法。
  • 玩家移动是控制器方法。

编辑:假设你正在使用一种支持全局/静态/单例对象的语言,你的游戏类应该只在你的应用程序生命周期中分配一次,可以通过全局作用域暴露整个游戏代码,因此构造函数参数更少。

最新更新