- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Board 类有一个 8x8 2D 数组 Piece
s,所以我显然可以通过执行 board.move(piece1, 3, left)
来移动 Board 类中的一 block 。例如,但我无法简单地告诉棋子移动,例如 piece1.move(3, left)
,因为它无法了解有关棋盘的任何信息(除了将其作为参数传递之外),因此它无法将自己移动到特定索引,或者知道棋子是否已经占用了该索引,或者是否正在被占用告诉移动到数组边界之外。
最佳答案
您还有其他尚未建模的对象,例如 Game
和 Player
。让我们退一步思考一下每个模型的职责:
Piece
非常小。它知道它是什么,它是什么颜色,大概就是这样。Board
或 Piece
,对吧?)它知道哪个棋子
组成了一套完整的游戏。它知道每个Piece
可以进行哪些 Action 。它知道任何给定时间任何给定棋子
在棋盘
上的位置。玩家
与游戏
交互。它将告诉游戏
它想要在棋子
上执行给定的操作。 游戏
将允许或拒绝该操作,并修改游戏
的状态(检查、配对、僵持、其他玩家
的回合,等)基于该操作。 (同样,Pieces
和 Board
并不关心这些状态。)如果Game
对象变得臃肿且笨重,它可能会被分解成碎片并主要作为复合对象存在。例如,您可以有一个 MoveList
,其中包含给定规则集的可能移动。 Game
由它组成,但不需要在内部包含它。
我想得越多,我就越认为 Board
和 Piece
在这个领域中被视为真正的“愚蠢”对象。它们甚至不是真正的实体,只是值(value)对象。与另一件具有完全相同属性的一件基本上可以与另一件互换。 (如果您丢失了一个 Black Bishop,您可以用另一个 Black Bishop 替换它,并且不会对体验产生任何不利影响。)如果这两个被视为不可变的数据结构而不是模型,则域可能会更流畅地工作。
(还值得注意的是,相同的Board
可以由具有完全不同的Piece
集的其他游戏
重复使用。)
作为练习,我建议遵循 Robert Martin's Bowling Game Kata 。当您考虑验证域的实际测试时,您会惊讶地发现,您在游戏域建模上投入了多少精力,结果却变得简单很多。我们可以整天从学术角度思考这些国际象棋模型,但通过一些测试来验证游戏可以得出更简单的设计。
关于java - 如果我有一个单独的棋子类和一个单独的棋盘类,当它们彼此分离时,我如何告诉棋子移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12666261/
我在尝试使用 jpa2.0 将包含持久实体和分离实体(新创建的实体)的实体列表更新到我的数据库中时遇到错误。 我的实体包含在合并数据时出现错误(在标题中提到)的内部实体: Class supercla
我在分层 Pane 中有一组面板。我需要一个分隔符来将 sideBar 与 topBar 和 tabbedPanel 分开。我留了一个 10 像素的缓冲区来放置它。不幸的是,可能由于它是 JLayer
在我从数据库中读取的代码中,我还使用自定义适配器打印出每一行,该行中有一个 texttview、2 个按钮和一个 edittext。这一切都很好,但是当按下按钮时,edittext 会递增或递减,有没
我有一个由 Hibernate 4.3.4 管理的实体,它有一个其他实体的一对多集合。 在我的处理过程中,我必须分离父实体(将分离级联到子列表)。但是,当我向列表中添加一个尚未持久化的新项目并执行分离
我想追加一行,该行应该是表格的最后一行。在我的代码中,它似乎在第一次动态添加行时起作用。但是当添加其他行时它不会成为最后一行。 我总是希望“subtot”行成为最后一行,但是当我追加其他行时,它不
我试图用它们之间的空格分隔这 2 个 div(请参见图 1)。问题是当我添加边距或填充时会发生这种情况(请参见图 2)。 这是我的代码,请注意我没有使用 Bootstrap: .row { mar
我的服务器包含一些 ServerActor。该 actor 接收 RegisterClient 消息并将 ActorRefs 添加到已注册客户端列表中。 我还有多个客户端,每个客户端都包含 Clien
假设我有一个需要两个参数的函数,并且参数的顺序会影响结果。 是否可以将第一个参数传递给 partial 或 comp 函数,然后将另一个参数传递给它,如下所示: (defn bar [arg1 arg
如何搜索和分离多个后代键。 例子: (def d {:foo 123 :bar { :baz 456 :bam { :w
我正在尝试为 Slick 表创建一个类型安全的动态 DSL,但不确定如何实现这一点。 用户可以通过以 form/json 格式发送过滤器来将过滤器发布到服务器,我需要使用所有这些来构建一个 Slick
我是新来的,我发现看到充满大量函数和变量初始化以及 UI 的组件时眼睛很痛。是否可以将它们分开? 而不是默认设置,如下所示。如何将业务逻辑分离到另一个文件中? function MyComponent
我试图通过将参数粘贴在一起来使用分离。这应该是一件容易的工作,但不适合我。当我想到使用 eval(parse()) 时,我知道是时候寻求帮助了 通常,如果我加载一个包,我可以按如下方式分离它: det
(dissoc :a m)允许我解除给定的键。但是,有没有办法使用谓词函数来分离 pred 为真的任何键? (dissoc-with-pred pred? m) 所以给了一张 map - {:a 2
我编写了一个使用 devtools 来包含内部数据的包: devtools::use_data(.data, internal = T, overwrite = T) 我最近更改了该数据并重建了包。我
所以我有一个脚本,我想在我的服务器上运行它而不会打扰我。所以我想我会在 tmux 窗口中运行服务器,然后 detach这样我就可以简单地 attach如果我想查看进度(此脚本需要数天才能运行)。 但是
ThreeJS中动画数据和模型数据是否可以解耦? 这样就可以交换模型并保留动画?我认为这可能非常强大 我知道如何在 ThreeJS 中做到这一点的方法是将每个动画一个接一个地打包在一个模型中,这似乎是
我有一堆(Ruby)脚本存储在服务器上。到目前为止,我的团队通过打开一个启动脚本名称列表的访问器应用程序来使用它们,然后他们在工作文件夹中的文件上选择要在该实例中运行的脚本。脚本直接从服务器运行,因此
我想知道 javascript 如何包含在 jsp 中 - 我们是否可以在 .js 文件中放置 jsp 能够识别的任何代码,而不仅仅是 javascript 代码? 我有一些常见的 JavaScrip
您是否可以在 Dockerfile 中指定一个选项,默认使用它构建的容器以分离方式运行。 这将导致与 -d 相同的结果: docker run -d 这样 docker run 默认情况下会分离运
我正在为现有的 Java 程序开发 Java 插件。现有程序使用特定版本的 eclipse.uml2.*,我的插件也是如此。不幸的是,我的插件需要更新版本。 为了运行该插件,我需要将其导出到 Jar
我是一名优秀的程序员,十分优秀!