繁体   English   中英

对两个对象进行建模的好方法是什么,但它们有两个不同的功能?

[英]What is a good way to model two objects that are the same thing, but have two different functionalities?

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

同样在国际象棋中,你通常移动一块,它应该返回一个移动与该块和它去的地方,但你也可以城堡,其中包括指示两个部分及其位置,或一侧(国王/王后),或其他除了件/位置之外的一条信息。

我假设玩家返回Move对象是最好的方式,但我也可以接受任何其他建模选择或建议。

谢谢!

这些可能不是你想要的,但在这篇旧帖子上似乎有很多很棒的想法:

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

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

根据经验,如果你想拥有一个共同的类型但是对于一个东西有不同的行为 - 这里是一个Move - 你需要让这个东西实现这个行为。 因此,不应询问电路板如何以不同方式解释两种不同的移动,而应考虑如何在执行移动时以不同方式使用电路板。

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

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

关于你的特定问题,一个普遍合法的模型是玩家返回一个Move ,但根据完整的细节,它的实际价值可能从总成功到总灾难。

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

你的国际象棋示例是最简单的。 移动返回棋盘上的棋子和新位置,但它也可以返回城堡事件,捕获事件和/或片段促销事件。

类似地,在Scrabble游戏中,移动可以返回文字游戏事件,交换区块事件或传递事件。

将事件视为对游戏其余部分的信息。 您可以像对待课程一样对事件进行编码。 此事件类必须能够访问各种游戏类,以便模型可以创建消息。

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

如果不同的实现没有任何共同点,除了它们如何呈现给外部世界,哪种类型来自你的解释,Move应该是一个松散定义的接口,每个实现在不同的游戏中做自己的事情。

但我的主要问题是,是否真的有理由在不同的游戏中使用这个界面。 如果没有某种类型的共享处理程序,它需要在不同游戏中使用某些动作格式,我就不会费心并简单地定义不同的游戏特定的Move类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM