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() 对象总是通过引用传递给每个新对象的构造函数,所以任何对象都可以完全访问其他对象的整个宇宙?

4

1 回答 1

2

为了代码可读性和对象的概念含义,没有更好但只有通常首选的方法可以做到这一点。

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

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

  • 应用程序有游戏类。
  • 游戏有玩家和内容
  • 内容有地下城(游戏关卡)
  • 每个地牢都有包含以下内容的 DungeonRooms
  • ==DungeonCard 是一个演员。
  • ==你的玩家单位是一个演员。

  • 同一个房间里的演员通过他们的父母互相了解

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

  • 您的播放器单元 Actor 由键盘、鼠标控制
  • 你的地牢卡由你的鼠标控制
  • DungeonCardAction 是一个控制器方法。
  • 玩家移动是控制器方法。

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

于 2013-05-27T04:07:38.107 回答