我正在设计一款桌面游戏风格的手机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是一个控制器方法。 玩家移动是控制器方法。
编辑:假设你正在使用一种支持全局/静态/单例对象的语言,你的游戏类应该只在你的应用程序生命周期中分配一次,可以通过全局作用域暴露整个游戏代码,因此构造函数参数更少。