当前位置: 首页 > 知识库问答 >
问题:

在C#中使用GetType/InstanceOf与其他选择

蒯胜泫
2023-03-14

我在用C#制作的一个游戏中遇到了一个问题。这是一个简单的基于平铺的匹配游戏,我试图制作的一个电源问题出现了:

假设我们有基本的瓷砖类型,圆形、正方形和菱形,这些都是瓷砖的子类。我尝试将“matches”行为提取到一个抽象的Tile方法:canMatchWith(Tile t)中,而不是只让圆圈与圆圈匹配。瓷砖也有两种方法来添加/移除它们可以匹配的瓷砖。

所以假设我们在游戏中间有一个圆形瓷砖,我们有一个powerup说“圆形瓷砖可以在这个回合与方形瓷砖匹配”。我会遍历所有的圆瓷砖,然后说circletile.addCanMatchWith(typeof(Square))。在内部,我们有一个可以匹配的列表。

然后稍后,我想说“圆不能再与正方形匹配”,简单地说circletile.removeCanMatchWith(typeOf(Square))。

这是我目前的解决方案,它工作得很好,没有我注意到的性能缺点(这是一个基于平铺的匹配游戏,所以这些类型只在每个“移动”中评估一次,而不是一帧一帧地评估)。然而,我脑袋里的声音在告诉我,这是一种糟糕的方式来完成这种行为。所以我有一些选择:

    null

总之,我试图实现的是让多个对象类型能够与任意数量的不同类型交互。问题是,我应该使用什么类型。在这里使用GetType可以吗?枚举?或者有人会推荐一个更好的策略吗?我试图尽可能地一般化,这些瓷砖不应该有任何硬编码依赖于其他瓷砖,并且必须能够改变他们可以在飞行中与谁交互。假设我做了一个新的瓷砖子类,五角大楼...嗯,五边形可以与正方形、圆形和五边形相匹配。我的实现很简单,但有些东西告诉我这是一个肮脏的OOP实践。

我觉得我必须使用类型/枚举,因为我不是想说这个。addcanmatch(平铺某个其他对象)。这太具体了,我希望这个tile能够与所有tile匹配,这些tile是一个特定类的实例。

共有1个答案

隆康平
2023-03-14

如果所有相似类型的形状总是共享一个行为,那么不将该行为存储在“每个实例”级别上是有意义的。相反,您可以有一个“CanMatchManager”,它存储按形状类型索引的列表字典。然后,当循环尝试比较匹配项时,它会从MatchManager请求它可以匹配的类型。或者,MatchManager可以接收这两个形状,并确定它们是否匹配。这是中介模式

 类似资料:
  • 让我们从建立一个计数器组件开始。这个组件将负责跟踪其被点击多少次并显示该数量。 app/components/counter-component.ts View Example 在这种情况下,点击事件绑定到从 ActionCreatorService调用我们的动作创建者的表达式。 让我们来看看@select的使用。 是Ng2-Redux的一个功能,它旨在帮助您以声明方式将 store 的状态附加到

  • 我有一个很大的问题,我不知道我是否错过了一些明显的东西或什么,但我不能发现我的错误。我有类SPN、A和B。我重载了2次operator=。我想将A类型或B类型作为参数传递。 它不会抛出任何错误。但是如果我在类B或A中尝试make operator(),则使用参数SPN,如下所示: 它会抛出SPN未命名类型的错误。我甚至不能在A类或B类中创建类SPN对象。也许它不是如何客观编程工作,所以我想得到它,

  • 进程优先权 当计划线程时使用的优先权。在有需要时可调整优先权到较高或较低。 文件位置 你可以为不同的文件类型改变文件夹。在默认情况下,大部分的文件设置在设置位置。然而, 一些文件是保存在 profiles目录和全部日志文件保存在 logs 目录。 文件关联(只限于完整版本) 文件关联是 Navicat 使用什么来打开 Navicat 已保存的文件。例如:.npt 文件(数据传输设置文件)将会使用数

  • 下面的代码只是检查null控件并生成mView。如果提供了所有条件,则handleUrl(数据)方法有效。 当我将代码与RxJava一起使用时,我会在下面编写代码。 我写的两个代码都工作相同。然而,当我尝试向代码中添加新条件时,问题就开始了。例如,如果intent为null,我可以创建一些新的操作符。 示例代码; 但是我不能使用RxJava过滤器方法编写这段代码。一旦过滤器返回false,操作就完

  • 问题内容: 我有两个postgresql表: 我想获取其中没有一行的每个IP地址。 我尝试了此查询,但它引发了语法错误。 我也想知道此查询(进行调整以使其工作)是否是为此目的性能最佳的查询。 问题答案: 基本上有4种技术可以完成此任务,所有这些技术都是标准SQL。 在Postgres中通常最快。 [](https://www.postgresql.org/docs/current/queries-

  • 我有两个postgresql表: 我想从登录日志中获取每个IP地址,它在IP\U位置中没有一行 我尝试了此查询,但它引发了语法错误。 我还想知道这个查询(通过调整使其工作)是否是用于此目的的性能最好的查询。