grid - 2D 网格水/液体模拟(基于平台游戏)

标签 grid simulation tiles

我有一个基于网格的游戏(平台游戏),其中所有内容都基于图块。我有固体和液体的瓷砖。我试图找到一种让水砖以粗略的方式模拟水的好方法。

目前我有当前的系统:
当一个水砖加在另一个水砖上面时,它会在下面的水砖上加 1。数字表示压力。

这是目前的样子:

[0]   <- This water tile has 0 in pressure.
[1]   <- This water tile has 1 in pressure.

如果我在底部的旁边添加另一个水瓦,它会从左,右和上方搜索是否有任何水瓦并继承其周围的最大压力。

例子:
[0]
[1][1]

这是添加几个水砖后的更大示例:
[0][0]
[1][1][1][1]
[2][2][2][2][2]

然后我让每个压力等于或大于 1 的水砖尝试向左/向右移动,如果有可用空间,然后将压力设置为 0 并检查它是否可以从相邻的水砖继承周围的压力(如果有的话)。

除了从顶部取下水砖的情况外,该系统运行良好。

如果我从最后一个例子中移除顶部的水砖:
[1][1][1][1]
[2][2][2][2][2] 

然后我们有压力为 1 的顶行,现在那里应该有 0,底行应该有 1。

是否有一些更智能的系统我可以实现来更合适地做到这一点?

以下是限制:

每个瓷砖只能检查它的邻居瓷砖。
Tile 可以定义任何函数。
Tile 可以有任何变量来存储数据。

你们能想出一个比我的更好的系统吗?

我通常做的测试用例是:
[]
[] should become [][]

[]
[]
[] should become [][][]

  []
[][][] should become [][][][]

假设游戏运行了一段时间。

任何建议将是非常受欢迎的!

最佳答案

也许您可以忘记压力(因为您并没有真正将它们用作压力),而只需使用 bool tryMove 或类似的东西。

每个模拟步骤应分为两个子步骤:

瓷砖中的第一个循环:

  • 如果下面的空间可用,请将 tryMove 设置为 true,完成此图块。
  • 如果上面有 tile,将 tryMove 设置为 true 否则将 tryMove 设置为 false。
  • 如果有任何邻居试图移动,请将 tryMove 设置为 true。

  • 瓷砖中的第二个循环:
  • 如果尝试移动并且下面的空间是空闲的,则向下移动瓷砖,设置
    tryMove 为 false,完成平铺。
  • 如果试图移动并且可以侧向移动(左侧的可用空间或
    正确)将邻居 tryMove 设置为 false,移动它,将此 tryMove 设置为 false,完成平铺。

  • 我认为这应该可以解决您的问题。

    关于grid - 2D 网格水/液体模拟(基于平台游戏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000967/

    相关文章:

    twitter-bootstrap - Bootstrap 全宽列

    java - spring mvc和tile集成错误

    jquery - 使用磁贴对 WebFlow 进行 Ajax 调用

    java - 速度与 Apache Tiles

    html - 网格列和行无法正确对齐

    c# - 如何为所有网格行设置最小高度?

    java - 瓦丁 8 网格 : hide/unhide selected row

    hadoop - 使用Cloudera模拟Map-Reduce

    r - 循环返回比预期更多的值和 NA

    data-visualization - Python 复制 Java Web 应用程序?