我怎样才能以面向对象的方式设计这个概念

  • 本文关键字:方式 面向对象的 java oop
  • 更新时间 :
  • 英文 :


我在设计方面遇到了一些问题。也许我认为这一切都错了,但我所设计的似乎只是以程序的方式运作良好。

游戏

我正在做一个游戏,这个游戏有大约10-20名玩家,由3轮组成。当玩家启动游戏时,服务器从数据库加载他们的数据,将其存储在java类中,并将请求的数据发送给客户端。让我们称之为Player.java。这门课在比赛的两回合之间持续不断
游戏中的每个玩家都有自己的角色。这个角色在每一轮之间都会发生变化,我需要这个角色以某种方式与Player.java联系起来。现在我有三个角色:猎人探索者旁观者。每个角色都有相同的基本内容:onDeath()onRespawn()onKill(KillEvent event)。我还需要能够轻松地检查玩家的角色。(例如,用枚举链接角色)。

问题

我现在遇到的问题是如何以OOP的方式实现它?最初,我将每个角色作为实现Role.java的类,每次创建角色时,都会在构造函数中使用Player。这一切都很好,直到我开始在回合中间和每回合结束后改变人们的角色。对我来说,如果我一直把球员的角色设定为一个新的对象,这似乎是一种糟糕的做法。

摘要

综上所述(因为我不擅长描述事物),似乎所有这些都可以以程序化的方式完美地工作,但我一生都无法找到使用OOP实现这一概念的好方法。按照我现在实现的方式,每个Player都有一个枚举,说明它们的角色,为了更改该角色,我只需更改Player中的枚举。话虽如此,一旦我进入游戏逻辑,我最终会得到大量嵌套的if语句,我觉得通过一些多态性可以大大减少这些语句。

因此,最后要问一个问题,以面向对象的方式实现这个(或这个系统的稍微修改的版本),而不必始终如一地创建新对象来接受旧对象的数据,什么是好的攻击计划?(我对OOP没有太多经验,但对我来说,这似乎是个坏主意)

我想我会选择这个解决方案:

  • 使Player成为接口
  • 为它创建一个代理类(一个只有一个属性的类,其类型为Player,并将所有方法重定向到此对象)。让我们称之为ConcretePlayer
  • 添加一个setRole方法,将Role作为ConcretePlayer
  • 使Role实现Player
  • 像您所做的那样创建Role的子类,每个子类的构造函数中都有一个ConcretePlayer
  • 存储ConcretePlayer中所有角色之间共享的统计信息
  • 外部使用PlayerConcretePlayer访问所有内容

它没有完美地充实,但我想你已经明白了。您可能会发现RolePlayer不应该共享同一个接口,或者您想为回调创建一个自己的接口,但这取决于您的其余代码和用例。

最新更新