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

时间:2013-05-27 00:42:20

标签: oop parent-child

我正在设计游戏风格的移动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()对象是否总是通过引用传递给每个新对象的构造函数,因此任何对象都有完全访问权限来浏览其他对象的整个Universe?

1 个答案:

答案 0 :(得分:2)

为了代码的可读性和对象的概念意义,没有更好但只有通常更喜欢的方法。

首先看一下,我注意到你为玩家使用了一个物体。玩家是控制玩家角色的人。演员通过其控制器进行控制。任何其他游戏角色也可以由其他类型的控制器控制。这种方法将游戏内容从游戏机制中解放出来,以便程序员可以专注于每个人。

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

  • App有游戏类。
  • 游戏有玩家和内容
  • 内容有地下城(游戏关卡)
  • 每个地牢都有包含以下内容的DungeonRooms
  • == DungeonCard是演员。
  • ==您的播放器单元是演员。

  • 同一房间的演员通过父母彼此了解

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

  • 您的播放器单元Actor由键盘,鼠标
  • 控制
  • 您的Dun​​geonCard由鼠标控制
  • DungeonCardAction是一种控制器方法。
  • 玩家移动是控制器方法。

编辑:假设您使用的语言支持全局/静态/单例对象,您的Game类应该只在应用程序生命周期内分配一次,并且可以通过全局范围公开整个游戏代码,因此构造函数参数较少。