我在使用Java创建战舰解决方案时遇到了一些问题。随机的一组船被装载到10x10板上。 1 2hit船舶2 3hit船舶1 4hit船舶和1 5hit船舶(总共17次点击目标)
我做了一个嵌套循环,基本上在每个单元格坐标处开火,直到我使用了100次射击或者摧毁了所有的船只。目标是找到一种方法,以50或更少的射击下沉所有船只。我的问题是我无法分辨船只在哪里根据它们的下沉位置(因为它只告诉我是否我沉没了船,而不是如果我击中)而且,它不告诉我我是什么样的船沉没,但如果我知道如何解决命中问题,我可以更容易理解。
那么如果我“击中”一艘船怎么办呢?我可以在我的主板上确认的唯一“击中”是由“船沉没”消息引发的最后一击。
编辑:对不起,我还应该提一下我无法访问战舰类,我只有一个我用来解决这个问题的类。我得到了一些类的方法,如:
“public BattleShip() - 您需要在程序中调用一次构造函数来创建战舰游戏的实例。
public boolean shoot(Point shot) - 您需要调用此函数来进行每次拍摄。有关示例用法,请参阅示例源代码。
public int numberOfShipsSunk() - 返回在游戏过程中任何时候沉没的船只总数。最好使用这种方法来确定船舶何时沉没。
public boolean allSunk() - 返回一个布尔值,指示是否所有船只都已沉没。
public int totalShotsTaken() - 返回拍摄的总镜头数。您的代码需要负责确保不会多次拍摄相同的镜头。
public ArrayList shipSizes() - 返回所有出货号的ArrayList。数组的长度表示存在多少艘船。
public enum CellState - 这个枚举对象非常适用于标记单元格是Empty,Hit还是Miss。它还有一个方便的toString方法,因此可以用于打印目的。您也可以在代码中为此创建自己的枚举/类,但建议您使用此代替整数/字符来标记单元格状态“
CellState属性实际上不存在/是私有的,所以我不能使用它。这是我的循环。
x = 0;
for(int i = 0; i < 10; i++)
{
y = 0;
for(int j = 0; j < 10;j++)
{
if(x <=9 && y <=9) //X and Y are less than or equal to 9...
{
Point shot = new Point(x, y);
// At the end of each decision on where to fire next you need to shoot
if(shotTracker[x][y] == '-') // if space is free...
{ battleShip.shoot(shot);
if (sunkShip != battleShip.numberOfShipsSunk())
{
shotTracker[x][y] = 'O'; //The hit that sunk the ship
sunkShip++;
}
else
shotTracker[x][y] = '*'; // set space to fired miss
}
}
gameShots = battleShip.totalShotsTaken();
System.out.printf("You've shot %d times. The last shot's location was (%d,%d). You've hit something (not sure) times. You've sunk %d ships.\n", gameShots, x, y, battleShip.numberOfShipsSunk() );
if(battleShip.allSunk() || gameShots >= shotLimit)
{
break;
}
y+=3;
}
if(battleShip.allSunk() || gameShots >= shotLimit)
{
break;
}
x++;
}
if( gameShots >= shotLimit)
{
break;
}
}
输出:
* - - * - - * - - *
* - - * - - * - - *
* - - * - - * - - *
* - - * - - * - - *
* - - * - - * - - *
* - - O - - * - - *
* - - * - - * - - *
* - - * - - * - - *
* - - * - - * - - *
这是随机输出。我每3个细胞拍摄一次,你可以看到我沉没了一艘船,但是O只告诉我那是最后一击,所以那是一架随机游戏中未知大小的垂直船......
答案 0 :(得分:0)
无论您使用什么代码来确定船舶是否已经沉没,都应该能够告诉您船舶是否被击中。否则,它如何聚合以了解它的沉没?
答案 1 :(得分:0)
我明白了。我的镜头命令
battleShip.shoot(shot)
评估为真或假,或命中或未命中。当我检查是否真的使用&#34; O&#34;否则使用&#34; *&#34; O的弹出,所以我想我现在可以做更多的工作了。感谢您的帮助!