Java 国际象棋游戏的国际象棋 MVC UML 图

问题描述 投票:0回答:2

我有一个用 Java 创建游戏的学校项目,我选择编程国际象棋。我的老师希望我们首先通过创建我们认为游戏必需的所有类的 UML 设计来设计游戏。

问题是他想要用 MVC 模式,Model View Controller 来设计。我尝试设计 UML,但我的老师一直告诉我这还不够好。这是我的图表:

我也在使用观察者模式,以便在不同部分之间进行通信。

如果有人能帮助我并告诉我如何改进这张图,我将不胜感激 它遵循 mvc 模式。我试着把不同的 UML 设计交给我的老师,但他仍然不高兴

这是 uml 图的更新链接: 点我

java model-view-controller uml game-development chess
2个回答
1
投票

你有一个好的开始!在设计时尝试抽象思考。对于每个类,询问它应该知道什么(属性)以及它应该能够做什么(方法)。 Piece 应该能够做什么? (例如,移动到另一个空间,报告它的位置,报告它是否处于危险之中)。显然,每一种棋子都有不同的规则。将控制器想象成某种裁判……它跟踪它是谁的移动,告诉你移动是否有效,告诉你什么时候处于检查/将死状态。


0
投票

UML 语义和句法

Player
可能不会如图所示继承自
GameModel
。考虑移除空心箭头,并使关系成为一个简单的关联。

你可以去掉共享聚合的所有白色菱形:UML规范没有为它定义任何语义,它实际上与使用简单关联时的意思相同。总是喜欢简单 ;-)

最好尊重类语法,类名分格,属性分格,操作分格。 <> 和枚举原型应该在类型名称之上。

关于使用模式

不幸的是,您的图表没有显示观察者模式如何允许分离相关类。您应该在 MVC 之外定义 Observer 和 Subject 接口,并通过接口实现显示,哪个类实现了观察者,哪个类实现了主题。

关于 MVC

Model 是关于游戏逻辑的一切,包括移动,因为移动棋子是游戏模型的一部分。

Controler 是与处理用户输入相关的一切。所以处理鼠标或键盘事件确实属于那里。将用户输入转换为要提交给模型的命令的辅助功能也可能属于控制器。但是命令本身(例如在游戏中移动棋子)应该属于模型类。因为知道游戏规则的是模型,如果模型不跟踪走法,游戏的状态就会不准确。

View 是关于以某种方式为用户呈现模型的一切。

特殊工具

人类玩家和AI玩家都是特殊类型的玩家。玩家状态(颜色,轮到谁,移动时间,......)属于模型。用户的人类玩家输入在大多数情况下是关于模型中两个玩家之一执行的命令(移动)。

AI 应该是模型的一部分,因为它会自行改变游戏的状态并且不适合自己查看或控制器。

© www.soinside.com 2019 - 2024. All rights reserved.