首页 > 解决方案 > 访问具有多个参数的引用数组?

问题描述

这是一个简单的井字游戏,我相信您已经看到了,代码不完整。我不需要有人查看所有内容,只需在“.empty”之前格式化二维字符数组,以便我知道如何将其作为参考访问。如果您可以查看“int get_row()”内部,那就太好了。

我已经尝试了我的教科书和 C++ 教程告诉我的所有内容,而且我很确定它们都没有二维数组作为练习的一部分。我的意思是,我找不到它,如果你可以发送一个链接会很好。

#include <iostream>
#include <string>
#include <array>
using namespace std;


char board[3][3];


void print_board(char board[3][3])
{
    cout << "   0   1   2 " << endl;
    cout << "0  " << board[0][0] << " | " << board[0][1] << " | " << board[0][2] << " " << endl;
    cout << "  -----------" << endl;
    cout << "1  " << board[1][0] << " | " << board[1][1] << " | " << board[1][2] << " " << endl;
    cout << "  -----------" << endl;
    cout << "2  " << board[2][0] << " | " << board[2][1] << " | " << board[2][2] << " " << endl;
}
void clear_board(char board[][3])
{



}

int get_row(char board[][3], char player)
{
    int row;
    cout << "Please enter the row move for player " << player << endl;
    cin >> row;
    if (board.empty())
        return row;
}

int get_column(char board[][3], char player)
{
        int column;
        cout << "Please enter the column move for player " << player << endl;
        cin >> column;

        return column;
}

bool check_win(char board[][3], char player)
{
    return true;
}

bool board_full(char board[][3])
{
    return true;
}

bool square_occupied(char board[][3],int row,int column)
{
    return true;
}
void get_move(char board[3][3], char player)
{
    do
    {
        do {
            int row, column;
            get_row(board, player);


            get_column(board, player);

            square_occupied(board, row, column);
        } while (square_occupied);
        board_full(board);
    } while (!board_full);

}

int main()
{
    string play_again = "Y", answer;
    int row, column;
    char player = 'X';

    cout << "Welcome to tic-tac-toe!" << endl;
    cout << "Please, use the coordinates for rows and columns to record moves." << endl;
    do {
        do {
            print_board(board);
            board_full(board);


            get_move(board, player);

            check_win(board, player);
            if (player == 'X')
            {
                player = 'O';
            }
            else
            {
                player = 'X';
            }

        } while (!check_win);
        cout << "Would you like to play again? (Y/N)";
        cin >> answer;
    }while (answer == play_again);



    return 0;
}

我只想能够检查 [row] 的数组容器是否为空。我真的不能使用引用数组,仅此而已。

标签: c++

解决方案


如果您声明一个 C 数组,它永远不会为空(并且它也不会为空的t have a成员函数)。

char board[3][3]; //Never empty - always has 9 values

当然,井字棋盘可以是空的。代表棋盘的数组不是空的,但数组中的值可能设置为0表明它们为空的值或其他值。

我们可以写一个小类来表示板子,并给它一个empty函数:

struct Board {
    char board[3][3];

    Board() : board() {}
    bool empty() const {
        char* data = &board[0][0];
        for(int i = 0; i < 9; i++) {
            if(data[i] != 0) return false;
        }
        return true;
    }
    bool rowEmpty(int row) const {
        return board[row][0] == 0 && board[row][1] == 0 && board[row][2] == 0;
    }
    bool colEmpty(int col) const {
        return board[0][col] == 0 && board[1][col] == 0 && board[2][col] == 0;
    }
    void putX(int row, int col) {
        board[row][col] = 'X';
    }
    void putO(int row, int col) {
        board[row][col] = 'O';
    }
    // This function returns a reference so you can modify it if you want
    char& getSquare(int row, int col) {
        return board[row][col]; 
    }
};

通过创建一个类来表示板,您可以添加您想要的任何功能和成员函数!


推荐阅读