我正在用C++编写战舰游戏。我将值设置如下。
//const int empty = 0; // contains water
//const int occupied = 1; // contains a ship
//const int missed = 2; // shot into ocean W
//const int shot = 3; // ship is shot down H
//const int shipdown = 4; // whole ship is shot down S
当用户上船时,该值从1更改为3。我面临的问题是我如何指示整个船都掉落了。
int Grid[64];
int currentSquareValue = Grid[(row-1)*8+(column-1)];
switch(currentSquareValue)
{
case 0:
Grid[(row-1)*8+(column-1)] = 2;
break;
case 1:
Grid[(row-1)*8+(column-1)] = 3;
break;
default:
break;
}
//Printing out the Grid
for(int i = 0 ; i <=8; i++)
{
//Print Row Header
if(i != 0) cout << i << char(179);
for(int j = 0; j <= 8; j++)
{
if(i == 0)
{
//Print Column Header
cout << j << char(179);
}
else
{
//Avoid the first row and column header
if(j > 0 && i > 0)
{
int currentSquareValue = Grid[(i-1)*8+(j-1)];
switch(currentSquareValue)
{
case 0:
cout << " " << char(179);
break;
case 1:
cout << " " << char(179);
break;
case 2:
cout << "W" << char(179);
break;
case 3:
cout << "H" << char(179);
break;
case 4:
cout << "S" << char(179);
break;
default:
break;
}
}
}
}
我已经击中了这艘船,但是我不确定如何显示在第三枪之后整个船都被击落,如下所示:
需要一些指导...不确定如何开始。
最佳答案
一个简单的解决方案,不一定是最好的。使您的网格结构而不是整数。该结构包含一个标志,用于指示是否存在船,那里的船的ID(这可以让您区分它们;如果不存在船,则不应使用该值)和一个单独的标志,用于指示是否存在该单元格。击中。现在为游戏中的每个飞船ID制作一个数组,其中包含组成飞船的单元格数量。因此,[0]-> 3,表示船号0占用3个正方形。每当针对包含此飞船ID的单元格注册新匹配时,请减小数组中的值。当它为0时,您知道整个飞船都被击中了。
关于c++ - 表示船只在C++中被击落,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18316388/