gpt4 book ai didi

java - 我在《战地》游戏中的舰船放置看起来稳定吗? ( java )

转载 作者:行者123 更新时间:2023-12-02 13:21:47 25 4
gpt4 key购买 nike

这是我为战舰游戏放置船只的代码:

    static void placeShips()
{
Random r = new Random();

int[] ships = {5, 4, 3, 3, 2};

for(int i = 0; i < ships.length; i++)
{
int direction = r.nextInt(2);

loop: switch(direction)
{
//Down
case 0:
int spot1 = r.nextInt(10 - (ships[i]+1));
int spot2 = r.nextInt(10);

for(int j = 0; j < ships[i]; j++)
if(boardArray[spot1 + j][spot2] != 0)
{
i--;
break loop;
}

for(int j = 0; j < ships[i]; j++)
boardArray[spot1 + j][spot2] = 1;

break;

//Right
case 1:
spot1 = r.nextInt(10);
spot2 = r.nextInt(10 - (ships[i]+1));

for(int j = 0; j < ships[i]; j++)
if(boardArray[spot1][spot2 + j] != 0)
{
i--;
break loop;
}

for(int j = 0; j < ships[i]; j++)
boardArray[spot1][spot2 + j] = 1;
break;
}
}
}

有人知道可靠的测试方法吗?它尚未完成,但本质上该数组是一个 10x10(全部为 0),并且它使用此公式将船只放置在数组 boardArray 上。不断地重新运行程序有点烦人,有没有更快的方法来 100% 确定它们不会重叠?

通常情况下,我只会测试它,如果没有发现问题就将其提交,但这款游戏算作我的 final ,所以我希望它尽可能接近完美

最佳答案

最可靠的测试方法是写一些 unit tests 。谷歌有一句口头禅"Debugging sucks, testing rocks" .

要使代码可测试,最重要的更改就是使其具有确定性。

从根本上来说,代码的输出由两件事决定:

  • r生成的随机数;
  • boardArray 中的初始值。

如果您可以控制这两件事,那么您的代码每次运行时都应该执行完全相同的操作。这意味着每次您测试时它都会执行完全相同的操作。

控制这些的最简单方法是将两者作为方法参数传递:

static void placeShips(int[][] boardArray, Random r) {
// Don't create r inside the method.

// ... Rest of the method.
}

这样做的目的是将 placeShips 的工作与您在某处拥有的 static int[][] boardArray 的静态状态以及非在方法内创建Random 的确定性。

现在您处于更好的状态:您可以(并且应该)编写 JUnit 测试;但您现在可以从任何地方调用 placeShip,例如main(String[]) 方法:

int[][] boardArray = new int[10][10];  // Guaranteed to be full of zeros.
Random r = new Random(0); // Seeded with 0, so it always generates the same numbers.

placeShips(boardArray, r);

// Now check the contents of boardArray are what you expect.

您实际上应该拆分 placeShips 中的逻辑来创建“测试接缝”:它目前是一个相当大的方法,您可以测试的只是 boardArray 有特定的特定位置的元素。我不会讨论如何分割它,但这是你应该考虑的事情。

关于java - 我在《战地》游戏中的舰船放置看起来稳定吗? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com