创建一个扫雷游戏

时间:2014-12-08 01:57:45

标签: c++ arrays

我正在使用5x5 2D阵列制作简化的扫雷游戏。我的部分教导是制作这样的函数:

  

此函数采用1到25之间的值,并将值转换为行列位置。您需要使用参考参数来完成此任务。

我该如何做到这一点?

到目前为止,这是我的代码:

int main()
{
    int input;
    char array[5][5];
    initBoard(array, 5);
    populateBombs(array, 5);
    cout << "Enter a value between 1 and 25 to check a space " << endl;
    cin >> input;
    printBoard(array, 5);
    cout << endl;
    return 0;
}

void initBoard(char ar[][5], int size)
{
    for (int row = 0; row < 5; row++)
    {
        for (int col = 0; col < size; col++)
        {
            ar[row][col] = 'O';
        }
    }
}

void printBoard(const char ar[][5], int size)
{
    for (int row = 0; row < size; row++)
    {
        for (int col = 0; col < 5; col++)
        {
            cout << ar[row][col] << "\t";
        }
        cout << endl;
    }
}

问题的第二部分是创建一个&#34; populateBomb&#34;功能,我需要用炸弹随机填充5个空格。我必须使用&#39; *&#39;代表炸弹的角色。我可以用什么技巧来解决这些问题?

2 个答案:

答案 0 :(得分:0)

您可以使用除法和模operators轻松地将索引转换为列和行。

// Take an index between 1 and 25 and return 0 based column and rows.
// If you need 1 based column and rows add 1 to column and row
void getPosition(int index, int& column, int& row)
{
    row = (index - 1) / 5;
    column = (index - 1) % 5;
}

要选择随机列和行,请使用std::rand

void getRandomPosition(int index, int& column, int& row)
{
    getPosition(std::rand() % 25, column, row);
}

答案 1 :(得分:0)

你说:

  

此函数采用1到25之间的值,并将值转换为行列位置。您需要使用参考参数来完成此任务。

函数签名应如下所示:

int foo(int in, int& row, int& col);

从描述中不清楚rowcol是否需要介于15之间或0和{{}之间1}}。显而易见的是,实现将根据预期的输出而有所不同。