嗨,我刚刚开始创建一个战舰游戏,我想知道如何在我的2D阵列中放置随机船只。这是2D数组的代码。
1234
答案 0 :(得分:2)
您无疑注意到的问题是,每艘船都被放置,它排除了后续船只可以放置的可能性。解决困难的最简单方法就是试错。首先编写一个函数,用于在板上随意放置给定尺寸的船。使用嵌套循环放置船只。外环可以是一个for循环,它遍历要放置的船只。内部循环可以是一个while循环(或者可能是一个do循环),它重复调用放船函数以获得候选放置,然后检查它是否与先前的选择冲突,循环直到找到无冲突的放置。
至于放置一艘船:
1)首先生成一个0或1的随机数,以确定船舶是水平放置还是垂直放置
2)然后选择一个随机数来确定它将在
中的行或列3)最后,为包含船舶的行或列中的第一个方格选择一个随机数。船的大小将在这里输入。例如,如果它的长度为3,那么第一个方块只有10-3 = 7种可能的选择(假设标准的10x10板)。
On Edit:@Manus提出了一个关于如果船舶数量超过某个阈值会遇到的困难的好点。如果你在一块小板上有大量船只,某些部分放置(某些船只)可能会排除剩余船只的任何有效位置。我看到这个困难的唯一方法是使用反向跟踪方法,在尝试放置之前检查船是否有足够的空间,如果没有,重新访问先前船只的位置,直到你得到有效的东西。但是 - 检查是否有任何有效位置的工作可以通过同时确定有效位置集的方式完成,在这种情况下,您也可以直接从该集合中选择而不是使用反复试验。我的方法本质上是一种模拟儿童游戏的快速而肮脏的方法。如果你想要一个更灵活的游戏,你需要一个更复杂的方法。