我正在用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/

10-14 16:47