如果所有玩家均在距相邻玩家相同距离的随机位置生成,则玩家数量将与其生成位置不公平的可能性成正比。与处于地图边缘的玩家相比,玩家越靠近地图中心生成,他们遇到其他玩家的可能性就越大,他们生存的可能性就越小。假设所有玩家都在同一时间产生。
有没有一种方法可以塑造生成点或更改地图,以便:
- 所有玩家都有数量有限的相邻敌人。
- 所有玩家都有相等的机会遇到相邻的敌人。
- 地图大小不必与玩家人数成正比。
- 这些限制不适用于任意不可逾越的空间。
答案不一定是完美的,而显然比替代方法要好。开箱即用的思维表示欢迎。
如果所有玩家均在距相邻玩家相同距离的随机位置生成,则玩家数量将与其生成位置不公平的可能性成正比。与处于地图边缘的玩家相比,玩家越靠近地图中心生成,他们遇到其他玩家的可能性就越大,他们生存的可能性就越小。假设所有玩家都在同一时间产生。
有没有一种方法可以塑造生成点或更改地图,以便:
答案不一定是完美的,而显然比替代方法要好。开箱即用的思维表示欢迎。
Answers:
让玩家自己选择开始位置。
在游戏开始时,在地图中心生成所有玩家,但不伤害其他玩家。然后,他们将不得不蜂拥而至,并获得彼此交战的手段(建立基地,拿起武器,收集资源等)。
尽早找到一个好的开始位置需要一点运气或地图知识(取决于您使用的是程序地图还是手工地图)。但是何时何地定居主要是一项战略决策。尽早部署会给您时间上的优势,但是却使您处于危险的境地。精心挑选基地会使您在比赛初期落后,但在比赛中期和后期可能是决定性的优势。
- 所有玩家都有数量有限的相邻敌人。
首先,我们谈论的是玩家的生成点,而不是玩家在游戏中给定点的当前位置。只是解决这个问题。
在讨论图形时,相邻项定义明确。我们可以想到一个表示地图可导航性的地图-从现在开始在“图形”上。
如果节点可以最多有一个生成点,那么说它们“相邻”是有意义的。注意:我将不会限制节点最多只有一个生成点,这在以后会变得很明显。
要建立图表,我们将需要考虑诸如墙壁,桥梁,梯子,远距传送点之类的东西,或者,如果可能有玩家可以飞行,甚至要考虑飞行空间。每个节点代表一个遍历的位置。每个连接代表一个可能的运动。
注意:知道节点的大小和形状,并与实际相邻的节点一起工作。不要将节点视为重点。不要认为连接具有长度。另外,使用凸节点。
该图可能已经预编译(该图由设计人员创建);否则,如果随机生成地图,则可以即时创建。
- 所有玩家都有相等的机会遇到相邻的敌人。
我会假设敌人是其他玩家。再次说明,只是将其清除。
假设每个玩家随机走动,则从到生成点的距离的(高斯)函数将给出在给定点找到玩家的可能性-在平坦的空间上没有障碍物-从现在开始,功能”。
由于我们正在处理图形,因此将在图形上注释值。
- 地图大小不必与玩家人数成正比。
如果我们限制每个节点只有一个生成点,那么要添加更多播放器,我们将需要较小的节点。如果我们在知道要拥有多少个玩家之前就决定了图表,则可能必须细分特定游戏的节点。
- 这些限制不适用于任意不可逾越的空间。
我无意增加障碍来解决问题。矛盾的是,我需要绕过障碍。如果不存在,则实现会更简单。
我们正在尝试放置N个生成点,以使在所有这些生成点遇到另一个玩家的机会相等。
我们可以用几率之差与几率均值之和来衡量误差。我们正在尝试将其最小化(实际上,我们希望使其为0)。
为此,我们需要知道在图的每个节点上遇到玩家的机会。
要计算该机会,请从零开始。由于在没有玩家的情况下在任何给定节点上找到玩家的机会为零。然后,对于每个生成点,遍历该图,将带注释的值添加到当前生成点的函数值。
注意1:添加或移动衍生点会影响所有地图遇到玩家的机会。
注2:跟踪每个生成点对机会的影响程度,将使事情变得容易。
注意3:由于节点具有大小,因此误差接近零的可能性取决于节点的大小。通过使用值的范围(最小机会和最大机会,取决于节点内生成点的特定位置),可以更加精确。
将生成点随机放置,然后开始移动它们,以使误差变小(考虑可能的移动,如果导致误差减小,则保持该误差,否则将其还原)。并继续这样做,直到我们无法进一步改善为止(太多的迭代没有改善,或者错误为零)。
注意4:移动衍生点时,可以利用碰到玩家的机会(不包括将要移动的衍生点)随机选择一个新的生成点位置,以使该位置有可能会遇到玩家离平均的可能性更大。我提醒您,移动生成点会影响平均值。
预期的行为是,距离太近的生成点会移动,而距离太远的生成点会靠近。直到它们达到平衡。
如果在任何给定的迭代中,您在一个节点上都有多个生成点(这不太可能,因为它们倾向于分开,但是如果您有足够大的节点,则有可能),请拆分该节点并继续求解。节点的任何划分均有效。
上述解决方案将接近误差=零,但不能保证达到零。您可以运行它直到达到局部最小值...从理论上讲,您可以将节点除以使其完全为零...但是,这相当于调整生成点坐标!
尝试模拟退火以在节点内移动生成点。虽然,老实说,打扰如此详细的级别可能不值得。
我想说明的是,没有障碍的平面地图的结果将不会是均匀分布的点。相反,如果地图具有边缘(即,如果它不环绕),则将有更多的生成点更靠近边缘,这是因为可以从更多方向到达中心的点,从而增加了碰到的机会那里的其他玩家。因此,靠近中心的点要进行补偿。
这取决于您要创建什么样的游戏,以及它的节奏如何。在像世界这样的球体上(例如行星An灭),可以实现完美的均匀间隔分布。但这在您的游戏中是一个公平的选择吗?即使所有人的产卵距离相等,某些产卵区仍具有更好的优势。
您的地图是固定地图还是过程生成地图?曾经尝试在2人地图上与8人一起玩《帝国时代》吗?如果不调整地图大小,就不可能无限扩大玩家人数。即使是不公平的开始位置也可以在游戏中带来很多活力(请参阅Worms系列)。只要您与另一个玩家的联盟持续了一次,或者您在第一轮之后没有幸存的蠕虫,就没有人抱怨您是否在一个大型集群中产生。
(如果我对您的游戏类型了解更多,我会再添加一些示例)
进行到目前为止未建议的操作:使其没有地图的中心。我的意思是,地图边缘连接到相对的两侧。这将需要大量编程工作,但实际上,如果您朝一个方向行走,它可能会使关卡无限地重复自身。这意味着没有中心,并且随机生成位置不会有任何优点或缺点。
为此,可以制作一个正方形的平面图,然后将每个边连接到对边的副本上。当玩家离开侧面时,他们会在玩家不知情的情况下被传送到另一边。当然,从理论上讲,您将无法在边界的另一侧看到玩家。要解决此问题,请创建该玩家的副本,这些副本似乎在边界的另一侧走来走去,以便您可以看到它们,当您向它们奔跑时,您可以穿越移动,而实际的玩家则位于假人所在的位置。
或者,整个地图可能存在于球体的外部,但是这会使坐标难以生成。
从根本上来说,我认为这是一个图形分布问题。假设存在死亡竞赛的情况(每个其他玩家都是敌人),则需要将地图建模为互连的图,并跟踪每个玩家最接近图上的哪个节点。并非每个节点都需要一个生成点,但是您需要使用复杂的图形来建模生成点之间的距离。在生成时,您要对图形进行迭代,并根据附近的节点是否有玩家对每个可生成节点进行评分。
然后,理想节点具有:
想象一下,您的图形已被正则化,并且您正在每个节点周围绘制同心区域。如果内部区域中已经有玩家,则对节点进行惩罚,并奖励距离正确的玩家。您想鼓励在其他玩家附近产生更多的东西,以使他们能够迅速找到兴趣,但又不要太近,以免他们在有机会获得成功之前就跳入水中。
随着玩家人数的增加,您将需要增加地图的大小,但是k
不必为1或更大。最糟糕的情况仍然是,图上的每个节点都至少有一个玩家-在这种情况下,没有好的节点可供使用,而您将不得不承受这种情况,并产生一个玩家知道他们会降落在另一个之上。计分算法仍应对节点加权,以便您在其他玩家最少的节点上产卵。
请记住,您必须在了解地图,其路线,任何阻塞点以及节点点之间的有效距离(而不是实际距离)的基础上仔细构建地图。如图所示,使用诸如测量时间之类的方法在节点之间而不是距离上移动,以解决更困难的地形。另外,您还需要考虑开放性与掩盖性;两个节点可能在物理上相距很远,但是由于它们非常开放,因此在每个节点上生成一个播放器可能意味着它们同样脆弱,就像您将它们紧挨着生成一样。
细化:
其他一些人已经讨论了您的要求的局限性(在某些时候需要缩放地图以防止过度拥挤等),并最终逃避了可能没有“完美”放置算法的事实。当可能没有“完美”的算法时,我总是期待启发式算法。您有几个直接或间接彼此冲突的条件,以及非常复杂的搜索空间。寻找最佳解决方案可能并不可行或不切实际,但是只要稍加调整,统计方法就可以在大多数情况下很好地执行。
解决您的第三个和第四个条件: “地图不必扩展。”
我会在开始时确保您有过多的节点(即:像用于路径查找的导航网格一样密集)。这使得计算与其他玩家的距离变得更加昂贵(不是直接相邻的节点),但这并不是每个回合都会发生一次以上的过程(我认为)。这样做的好处是,您可以将预滚动的导航库用于大多数操作。此外,这将以公平的方式尊重在障碍物周围的遍历,而欧氏距离可能不会(在迷宫中的玩家比在空旷的地方放置得更近)
计算所需的生成特征的启发式:
随机放置所有播放器之后,根据您的标准(与其他播放器的距离,到生成的距离等)计算周围节点的性能。可以调整值的权重,并将其权重调整为非线性以精确调整性能您想要在经过消毒的理想情况下(无障碍的扁平矩形网格),并且当重新添加世界时,性能应该相似。从那里可以确定要搜索的节点数,移动起点的阈值是多少,以及在完成衍生并开始游戏之前要执行的迭代次数。
怎么样:
每个玩家都被一个无产卵的盒子包围(或圆圈)。
如图所示,有一个特定大小的方块会在每个玩家周围产生并跟随该玩家周围-在该方块内没有其他玩家可以产生。
这些方块只会影响生成,而不会影响游戏中的其他任何移动。
这适用于仅初始生成或连续生成。
(点表示玩家,绿色表示新玩家可能的生成区域)
地图大小不必与玩家人数成正比
要解决此问题,您可以执行以下两项操作之一:(或同时执行两项操作)