我正在尝试为一个人创建一个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的相同形状。
对于它为什么放置类似船只的任何帮助都将非常感谢,谢谢。
答案 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的元素。