对于我的课程,我需要制作一个非常基本的战舰游戏。但是,我是编程新手,遇到了一些问题。首先,让我解释一下我对该计划的想法。我想为每个玩家的游戏板保留两个独立的2D阵列。我有一个放置每艘船的功能,我将把其他功能合并到一个“转弯”功能中。游戏板将从填充O开始,并且每个船舶放置将用船的第一个字母替换O.命中将被指定为X.一旦放置了船只,当棋盘只有X和O时,将确定获胜者。我现在遇到的主要问题是我的2D阵列。我想将它们放在一个结构中,但我遇到了一些我不知道如何处理的错误。我得到了“预期的不合格身份”。令牌“在board.firstboard = line。我得到的另一个错误是说我错过了}但是如果我添加一个,它说这是额外的。这与之前的错误有关吗?谢谢你的帮助!此外,我不确定我是否正确提供了我的代码,所以如果我没有,请告诉我,我会纠正它!
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'},
} ;
}
答案 0 :(得分:2)
使数组static
成员将它们转换为全局变量。你不希望这样。如果它们是static
,则所有board
个对象将共享相同的两个数组。
您无法通过为其分配{ ...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];
};
变化是:
数组现在是board
结构的字段,而不是全局(static
成员)。
初始化已移至board
结构的构造函数。您无需明确调用它。
数组初始化已替换为std::memset
。这很有效,因为数组元素类型是char
。如果它们不是char
,您可能需要做其他事情来初始化它们。
数组宽度和高度的定义常量。