Java 二维阵列战列舰放置随机舰船

Java 二维阵列战列舰放置随机舰船,java,arrays,Java,Arrays,您好,我刚刚开始创建战舰游戏,我想知道如何在我的2D阵列中放置随机战舰。这是2D数组的代码。 public class javaapplication24 { public static void main(String[] args) { int[][] table = new int[10][10]; int i,j,k; for(i=0;i<table.length;i++){ for(j=0;j<

您好,我刚刚开始创建战舰游戏,我想知道如何在我的2D阵列中放置随机战舰。这是2D数组的代码。

public class javaapplication24 {

    public static void main(String[] args) {
        int[][] table = new int[10][10];
        int i,j,k;
        for(i=0;i<table.length;i++){
            for(j=0;j<table.length;j++){
                System.out.print(table[i][j]+" ");
            }
            System.out.println();
        }
    }
}
公共类javaapplication24{
公共静态void main(字符串[]args){
int[]table=新的int[10][10];
int i,j,k;

对于(i=0;i毫无疑问,您已经注意到的问题是,在放置每艘船舶时,它排除了后续船舶可以放置在何处的可能性。解决这一难题的最简单方法就是反复尝试。首先编写一个函数,将给定尺寸的船舶随机放置在船上的某个位置。使用嵌套循环放置船舶外部循环可以是一个for循环,它在要放置的船舶上进行迭代。内部循环可以是一个while循环(或者可能是do循环),它重复调用船舶放置函数以获得候选放置,然后检查它是否与以前的选择相冲突,循环直到找到无冲突的放置

就放置一艘船舶而言:

1) 首先生成一个0或1的随机数,以确定船舶是水平放置还是垂直放置

2) 然后选择一个随机数来确定它将位于哪个行或列中

3) 最后,为包含船舶的行或列中的第一个正方形选择一个随机数。船舶的大小将在此处输入。例如,如果船舶的长度为3,则第一个正方形只有10-3=7个可能的选择(假设标准10x10板)


编辑:@Manus提出了一个很好的观点,即如果船只数量超过某个临界值,将会遇到困难。如果你有一个庞大的船队在一个小的甲板上,那么(某些船只)的某些部分位置可能会我认为解决这个问题的唯一办法是使用回溯方法,在尝试放置一艘飞船之前检查是否有足够的空间,如果没有,则重新检查以前飞船的位置,直到你得到一些有用的东西。但是——检查是否有足够的空间任何有效位置都可以这样做,即您可以同时确定有效位置的集合,在这种情况下,您最好直接从该集合中选择,而不是使用试错法。我的方法本质上是一种模拟孩子游戏的快速而肮脏的方法。如果您想要更复杂的方法,您需要更复杂的方法灵活的游戏。

请在你的问题上添加更多的标签。@Bob_uuuu这可能是个好主意。另一方面,较早放置的较小船只会排除较迟到达的船只位置较少的可能性。我对哪种方式更好没有很强的直觉。尝试这两种方法会很有意思,看看哪一种需要较少的尝试s、 从实际的角度来看,这可能并不重要,因为我认为这两种方法都不需要进行多次试验。我相信,对于后来出现的船只来说,位置越少意味着尝试越失败。但当然,这将是更好的测试。如果你有很多船只,你可能最终无法找到最后一艘船的可能位置。您的答案应该包括这种情况的解决方案(现在,它将以无限循环结束)。一旦你完成了,你可以对它进行蒙特卡罗模拟,看看是否有任何细胞或多或少可能有一艘船在其上,但我不确定在边缘有一艘船是否是一个好的策略。@Manu:这就是为什么我建议从最长的船开始。1街区的船总会找到一个位置