Class 这是正确的建模方法吗?类图示例

Class 这是正确的建模方法吗?类图示例,class,uml,class-diagram,diagramming,Class,Uml,Class Diagram,Diagramming,我在试着模拟国际象棋比赛。我的UML新手的想法是这样的: GameEngine只有一个棋盘和两个玩家(继承自玩家),当GameEngine被销毁时,这些玩家(组合)也会被销毁。棋盘最多可以包含32个棋子,每个玩家可以控制/引用16个棋子(聚合)。玩家需要调用或访问董事会的某些方法(定向关联)。 这是正确的还是至少很接近 您在人类和CPU上制作了抽象播放器。我想你所有的箭头都必须使用普通的播放器。例如: class Chessboard { Player p1; Player p2; }

我在试着模拟国际象棋比赛。我的UML新手的想法是这样的:
GameEngine只有一个棋盘和两个玩家(继承自玩家),当GameEngine被销毁时,这些玩家(组合)也会被销毁。棋盘最多可以包含32个棋子,每个玩家可以控制/引用16个棋子(聚合)。玩家需要调用或访问董事会的某些方法(定向关联)。 这是正确的还是至少很接近


您在
人类
CPU
上制作了抽象
播放器
。我想你所有的箭头都必须使用普通的
播放器
。例如:

class Chessboard {
  Player p1;
  Player p2;
}
这是一种更方便的方式,您可以在运行时更改您的玩家和不同的游戏模式:人对人,人对CPU,甚至CPU对CPU

同样的变化也适用于GameEngine

顺便说一句,我不认为这是一个好主意,球员总控棋子。对
棋手的所有控制权都由
棋盘负责,玩家在轮到他时只要给他发个信息就行了


这种改变允许你在多桌游戏中每个玩家有几个棋盘

我一直在考虑这个问题,但我不确定,因为播放器是抽象类,因此不能实例化-这就是为什么我认为不能像那样使用它。棋子聚合是因为玩家从棋子开始并将其放置在棋盘上,所以棋盘实际上只包含对在玩家类中创建的对象的引用。(与常规国际象棋略有不同)。@user970696您不能实例化抽象,但可以使用
Player p1=new Human()
。您的棋盘将使用
玩家的API。你们应该把棋手和玩家分开,实际上玩家只是向棋盘发送命令,而负责创建棋盘的棋手并没有说清楚。在这种国际象棋中,棋手将棋子放在棋盘外,然后将棋子放在棋盘上。游戏开始时棋盘上有0个棋子。这就是为什么我认为球员应该对他们负责。我不会在棋盘中创建玩家,而是在游戏引擎中创建。