0

我正在寻找一种在棋盘游戏中为“移动”建模的好方法。我希望能够询问玩家他们的动作是什么并让他们做出回应,然后能够根据他们的动作在棋盘上执行正确的动作。问题是,有几种类型的移动,每一种都有自己的数据集。例如,在 Scrabble 中,您可以播放一个单词,它应该返回该单词、它的位置和方向(或一组带有位置或其他内容的图块),但您也可以交换图块(这将涉及返回您想要的图块交换)或通过。

类似地,在国际象棋中,您通常移动一个棋子,这应该返回一个棋子的移动以及它的去向,但您也可以城堡,这涉及指示两个棋子及其位置,或一方(国王/王后)或其他一些件/位置以外的信息。

我假设 Player 返回 Move 对象是最好的方法,但我也愿意接受任何其他建模选择或建议。

谢谢!

4

5 回答 5

1

这些可能不是您正在寻找的东西,但是在这篇旧帖子中似乎有很多很棒的想法:

建模棋盘游戏的任何模式?

一些答案包括对 Move 实施的建议,希望能给你一些新的想法。

于 2012-11-09T19:48:00.823 回答
1

根据经验,如果您希望某事物具有通用类型但不同的行为(此处为 Move),则需要让该事物实现该行为。因此,与其问棋盘如何以不同的方式解释两个不同的动作,您应该考虑如何让两个不同的动作在执行它们的动作时以不同的方式使用棋盘。

所以:基类(应该是接口)是一个Move,它有一个perform()方法,两种move对perform()方法有不同的实现。

于 2012-11-10T08:57:49.363 回答
0

如果不同的实现除了它们如何向外界展示自己之外没有任何共同点,这从你的解释中可以看出,Move 应该是一个松散定义的接口,不同游戏中的每个实现都做自己的事情。

但我的主要问题是,是否真的有理由让这个界面在不同的游戏中广为人知。如果没有某种类型的共享处理程序,它期望不同游戏中的某些动作格式,我不会打扰并简单地定义不同的游戏特定的移动类。

于 2012-11-09T19:45:33.653 回答
0

一个好的模型总是基于对需求、数据流、控制流、整体系统架构等的详细了解。通过挥手和哲学论证来设计应用程序并不是很有成效。

关于您的特定问题,通常合法的模型之一是让Player返回Move,但根据完整的细节,它的实际价值可能从完全成功到完全灾难不等。

于 2012-11-09T19:23:56.603 回答
0

游戏中的移动并不是真正的对象。这是一个事件。

您的国际象棋示例是最简单的。移动会返回棋子和棋盘上的新位置,但它也可能返回城堡事件、捕获事件和/或棋子提升事件。

类似地,在拼字游戏中,移动可能会返回文字游戏事件、交换牌事件或传球事件。

将事件视为对游戏其余部分的信息。您可以像编写课程一样编写事件。该事件类必须有权访问各种游戏类,以便模型可以创建消息。

事件处理程序类处理所有游戏事件。这个类将是操纵其他游戏类的类。这些事件都必须采用事件处理程序可以处理的格式。

于 2012-11-09T19:35:39.410 回答