1

对于我的班级,我需要制作一个非常基本的 Battleship 游戏。但是,我是编程新手,遇到了一些问题。首先,让我解释一下我对这个程序的想法。我想为每个玩家的游戏板保留两个单独的二维数组。我有一个放置每艘船的功能,我将制作其他功能,将这些功能整合到一个“转弯”功能中。游戏板以 O 开始,每个船的位置都会用船的第一个字母替换 O。命中将被指定为 X。一旦放置了船只,当棋盘只剩下 X 和 O 时,将确定获胜者。我现在遇到的主要问题是我的二维数组。我想将它们放在一个结构中,但我遇到了一些我不知道如何处理的错误。一世' m 在 '.' 之前得到一个“预期的非限定 ID”。令牌”在board.firstboard =线。我得到的另一个错误是说我缺少一个 } 但如果我添加一个,它会说这是一个额外的。这与之前的错误有关吗?谢谢你的帮助!另外,我不确定我是否正确提供了我的代码,所以如果我没有提供,请告诉我,我会更正它!

    struct board
{
    static char firstBoard[10][10] ;
    static char secondBoard[10][10] ;
} ;

void initializeBoard()
{

    board.firstBoard =
    {
        {'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'},
        {'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'},
        {'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'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
    } ;

    board.secondBoard =
    {
        {'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'},
        {'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'},
        {'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'},
        {'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O'},
    } ;
}
4

1 回答 1

2
  1. 使数组static成员将它们变成全局变量。你不想要那个。如果它们是static,那么所有board对象将共享相同的两个数组。

  2. 您不能通过分配{ ...data... }给它们来设置数组。这种方式只能初始化数组,对象只能初始化一次。您不能以这种方式从函数内部初始化全局变量。

这是一个建议的版本:

#include <cstring>

struct board
{
    static const int WIDTH = 10, HEIGHT = 10;

    board()
    {
        std::memset(firstBoard, 'O', sizeof(firstBoard));
        std::memset(secondBoard, 'O', sizeof(secondBoard));
    }

    char firstBoard[WIDTH][HEIGHT];
    char secondBoard[WIDTH][HEIGHT];
};

这些变化是:

  1. 数组现在是board结构的字段,而不是全局(static成员)。

  2. 初始化已移至board结构的构造函数。您不需要显式调用它。

  3. 数组初始化已替换为std::memset. 这很好用,因为数组元素类型是char. 如果它们不是char,您可能需要执行其他操作来初始化它们。

  4. 为数组宽度和高度定义常量。

于 2012-11-24T04:25:58.487 回答