【问题标题】:Trying to write generic code for a board game尝试为棋盘游戏编写通用代码
【发布时间】:2015-02-27 00:54:23
【问题描述】:

我实际上正在使用 unity 开发一款棋盘游戏。这是一个棋盘游戏,玩家必须通过声称空的六边形箱子来连接两个对立的边界。边界在开始时分配给玩家。

我选择用宝石表示我的空箱子,无人认领时为白色,玩家为红色或蓝色。所以我为所有宝石制作了一个预制件。

为了检查宝石本身和边界之间的连接,我为它们分配了稍大的盒子碰撞器,以便它们与其他物体发生碰撞(触发),这样我就可以检测到声明的宝石是否(直接或不)连接到边界.我写这段代码一般是因为 gems 是一个单独的预制件,天真地认为每个实体都会运行自己的脚本版本。但事实并非如此。

所以我正在寻找一种替代方法来检测与边界的连接,但仍然是通用的,因为板的大小是可变的。

提前致谢!

【问题讨论】:

  • 我鼓励您将此问题缩短为具体问题。有很多不相关的额外信息,您可能会被关闭。
  • 你的问题看起来很有希望和有趣,但我同意@Ru​​fusL,请改进你的问题。
  • 您需要做的是创建一个算法,该算法将在每次移动时查看棋盘。我不应该使用碰撞检测。我希望我能帮你做一个,但我不知道怎么做。我只知道这就是你需要的。您需要类似于 19 x 19 数组或列表的东西。然后每回合都让您的游戏使用该列表进行所需的所有更改。前任。 A1 为红色,A2 为蓝色,B2 为蓝色。然后填写你的游戏在这种情况下需要做什么。
  • 这是我的第二个想法。但我无法想象我将如何处理所有这些预制件(最大的板上几乎有 200 颗宝石)。我不能轻易使用位置,因为我的板不是正方形或矩形。但我可能有一个想法,如果有一种方法可以计算预制件或标记它们以指示它们在板上的位置,而无需重写代码或为所有 200 个预制件创建特定对象..
  • 表示六角板,见:stackoverflow.com/q/1838656/1715004

标签: c# generics unity3d


【解决方案1】:

您的问题与您如何在 Unity3D 上的游戏对象和组件中破坏游戏密切相关。

首先,使用脚本来定义组件。例如,您的 gem 可能有一个脚本,其中包含与其状态相关的数据(您的白色、红色和蓝色 gem 表示空,playerA 和 playerB)。

您可能需要一个游戏对象(通常称为GameManager)来处理与游戏规则相关的所有行为,例如玩家正在玩游戏、玩家是否可以选择特定宝石以及玩家是否赢得了游戏。根据游戏的复杂性,最好还有一个带有组件(脚本)的游戏对象来保持您的棋盘状态,而不是简单地从 gems objects Transform 组件中获取它。

构建游戏后,您不需要碰撞器来检测连接。每次您必须检查连接时,只需遍历您的 gem 或使用您的板状态对象。

编辑:

帮助您开发游戏的参考资料:

【讨论】:

  • 使用您给我的链接,我能够创建一些有用的东西。我将我的宝石列在一个二维数组中,当玩家认领一颗宝石时,会调用一个函数来查看带有 for 循环的数组,如果点击的玩家认领了一颗宝石,它会调用一个看起来所有的小算法直接连接的宝石。如果一个颜色相同并连接到边框,则中心宝石的边框连接布尔值为真。它完全符合我的要求。谢谢你!
  • 不客气!您可以尝试改进您的问题以获得更好的分数和排名。您的问题的核心很常见(关于如何使用统一开发游戏的说明),它可以帮助其他人。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多