简单的战舰游戏建议

时间:2012-11-24 04:18:44

标签: c++

对于我的课程,我需要制作一个非常基本的战舰游戏。但是,我是编程新手,遇到了一些问题。首先,让我解释一下我对该计划的想法。我想为每个玩家的游戏板保留两个独立的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'},
    } ;
}

1 个答案:

答案 0 :(得分:2)

  1. 使数组static成员将它们转换为全局变量。你不希望这样。如果它们是static,则所有board个对象将共享相同的两个数组。

  2. 您无法通过为其分配{ ...data... }来设置数组。您只能以这种方式初始化数组,并且对象只能初始化一次。你无法从函数内部初始化全局变量。

  3. 以下是建议版本:

    #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. 数组宽度和高度的定义常量。