如何删除此网格中的额外图块?

时间:2012-09-20 03:33:17

标签: c# algorithm game-engine procedural-generation

我正在开发基于图块的2D游戏,并且在地图生成方面存在一个小问题。

一般的概念是它默认创建一个房间,然后建立任何现有房间,直到建造了X个房间或Y次尝试失败。

我正在进入的问题可能很简单,我无法将其包裹起来,但我将如何去除带圆圈的瓷砖?每个生成的地图都是程序性的,所以我不知道什么时候像圆圈的地方出现的地方,我可以很容易地用眼睛看到它们......我只是想不出一种全面的方式来处理它们在地图之后已生成。

目标是永远不要让墙壁在不需要的地方翻倍。我不想改变地图的生成方式,而是在事后修改它。我也不想失去房间或类似的角落。

我真的觉得我想要做的就是在图像编辑或类似名称中有一个名字,但这当然不是我的强项。

Described Image

2 个答案:

答案 0 :(得分:1)

你的圆圈项目含糊不清,因为在某些情况下你可以删除你或其他人圈出的那个而不违反规则(没有混合室也不会打开外部黑色瓷砖)。

在任何情况下,我都应该多考虑一下,但它们看起来像是被移除后的瓷砖,不加入两个房间,也没有任何相邻的(包括对角线)黑色瓷砖。

我猜你可以为每个房间分配一个数字,然后移除任何瓷砖:

  • 不会连接两个不同数量的地砖
  • 既没有相邻的黑色块

也许你可以在没有编号房间的情况下这样做,但你必须通过利用旁边邻接来了解所有邻居是否来自同一个房间。

答案 1 :(得分:1)

如果可以,我会评论而不是回答,因为我不能给出答案。

您如何存储关卡的详细信息?您似乎想知道两个水平墙或两个垂直墙在哪里接触并删除它们,只要它们不是角落。

好像你需要一两条规则......

如果它是水平墙并且任何一侧有瓷砖,则删除任何上方或下方。

如果它是垂直墙并且上方和下方有一个方块,请向左或向右删除