战舰计划将船放在一个blob中

时间:2014-01-07 19:52:57

标签: java

我正在尝试为一个人创建一个Battleship应用程序,其中计算机将3个地方的3艘船放置在地图上。因此,最终为船舶提供了9个位置。然后玩家开始拍摄,一切都有效。

我遇到的问题是我的船只被放在一个小堆上,更像是一个岛屿,这真的不是我想要的。

这是放置船只的代码..

    int num_Ship = 0;
    for(int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            sink_This[i][j] = 'o';
            show_This[i][j] = 'o';
        }
    }

    for (int i = 0; i < 3; i++)
    {
        while (( start_PosX > 7) || (start_PosX == 0))
        {
            start_PosX = (int) randomGen();
        }

        while (( start_PosY > 7) || (start_PosY == 0))
        {
            start_PosY = (int) randomGen();
        }

        direction_Pos = (int) randomGen();
        if (( direction_Pos >= 0) &&( direction_Pos <= 4))
        {
            sink_This[start_PosX][start_PosY - 1] = 'x';
            sink_This[start_PosX][start_PosY] = 'x';
            sink_This[start_PosX][start_PosY + 1] = 'x';
        } else 
        {
            sink_This[start_PosX - 1][start_PosY] = 'x';
            sink_This[start_PosX][start_PosY] = 'x';
            sink_This[start_PosX + 1][start_PosY] = 'x';
        }
    }


    while (num_Ship < 9)
    {
        num_Ship = 0;

        for (int i = 0; i < 9; i ++)
        {
            for (int j = 0; j < 9; j++)
            {
                if (sink_This[i][j] == 'x')
                {
                    num_Ship++;
                }
            }
        }


        if (num_Ship < 9)
        {
            for (int i = 0; i < 9; i++)
            {
                for (int j = 0; j < 9; j++)
                {
                    if ((sink_This[i][j] == 'x') && (j > 0) && (j < 9))
                    {
                        sink_This[i][j - 1] = 'x';
                    }
                }
            }
        }
    }

如果有人想知道,这是randomGen()的代码。

    private Random generator = new Random(System.currentTimeMillis());

    final double randomGen()
    {
        return generator.nextDouble() * 10;
    }

此后的2d数组的示例如下:

o.o.o.o.o.o.o.o.o

o.o.o.o.o.o.o.o.o

o.o.o.o.o.o.o.o.o

o.o.o.x.x.x.o.o.o

o.o.x.x.x.x.x.o.o

o.o.o.x.x.x.o.o.o

o.o.o.o.o.o.o.o.o

o.o.o.o.o.o.o.o.o

o.o.o.o.o.o.o.o.o

每次都是x的相同形状。

对于它为什么放置类似船只的任何帮助都将非常感谢,谢谢。

1 个答案:

答案 0 :(得分:3)

for (int i = 0; i < 3; i++)
{
    int start_PosX = 0;
    int start_PosY = 0;

因此,为每艘船移动循环内的起始位置声明。 否则,第二艘船(i == 1)重新使用旧的起始位置。

现在每艘船都有自己的起始位置变量。

提示:

while (( start_PosY > 7) || (start_PosY == 0))

可以改写为:

while (start_PosY > 7 || start_PosY == 0)

Random可用作:

Random random = new Random();
...
start_PosX = random.nextInt(9);

具有long参数的构造函数主要用于随机数的可重复序列。并且nextInt(9)给出了0,1,2,...,8的元素。