我目前正在用Java做一门面向对象编程的课程,我们需要为我们的最后一个实验室创建一个游戏,所以我的实验室伙伴和我选择制作一个没有AI的2人象棋游戏,并使用模型-视图-控制器方法。
我们有点迷失了如何以及从哪里开始,所以我们需要一个简单的UML图,这样我们就知道从哪里开始。
我们已经提出了以下类,但不确定它们是否足够,或者是否所有的数据字段和方法都有意义:
ChessBoard
(模型)类和ChessLogic
类(?))View
类,用于显示模型类中的数据- 根据用户输入更新模型数据的
Controller
类以及View
类 - 一个抽象的
Piece
类或接口,由6个部分中的每一个继承或实现。
1条答案
按热度按时间hc8w905p1#
这张图是一个很好的开始,但还有很多工作要做。我会提醒你注意一些你需要改进的地方,但这并不妨碍你在实践中学习。
首先是一些手续:
View
知道ChessBoard
,但不清楚ChessBoard
是否知道Views
:然后ChessBoard
如何通知Views
在移动完成后板的状态已经改变?ChessBoard
对应一个View
,还是会有多个Views
对应同一个Chessboard
?View
中,有一个类型为ChessBoard的model
属性。但您也与ChessBoard
有关联。那么这都是相同的ChessBoard
吗?或者我们有两个ChessBoard
,一个关联,一个嵌入?从属性中删除model
,并在关联的末尾指示model
作为关联对象的名称,这样会更清楚。Controller
开始的关联突然分成两个是不太实际的,特别是如果你告诉我们关联结束和多重性。我更喜欢在视觉上有两条截然不同的线。现在进入核心:
ChessBoard
。模型应该是一个Game
,它有几个元素。ChessBoard
只是其中之一:Piece
s的当前位置。那么layers
呢?他们在哪里?我怎么知道是两个人总管怎么知道轮到我们了ChessBoard
而不是棋盘,可能会造成混淆。例如,仅凭棋子的位置信息,棋盘能否确定isGameOver()
?有没有可能一个玩家决定放弃?因此,请尝试根据类实际表示的内容来命名它们。Pieces
在电路板上的位置?Piece
的color?您的UML图必须发展以阐明所有这些。因此,我认为要完成
ChessBoard
和Piece
,您至少缺少Game
,Player
,BoardCell
(也称为“Square”),也许每个玩家的Pieces
的一些容器仍然在棋盘上。一旦你完成了,你还需要考虑模型,视图和控制器之间的关系,以确保控制器知道足够给予命令给模型,而且模型可以通知视图,当有什么变化。