c++ - 访问具有多个参数的引用数组?
问题描述
这是一个简单的井字游戏,我相信您已经看到了,代码不完整。我不需要有人查看所有内容,只需在“.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 数组,它永远不会为空(并且它也不会为空的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];
}
};
通过创建一个类来表示板,您可以添加您想要的任何功能和成员函数!
推荐阅读
- java - 使用自己的抽象方法的抽象类
- sql - 如何将列中的重复值更改为行,然后用相应的值填充相应的行值
- c++ - ASIO - 如何停止简单的基于协程的服务器?
- oracle - 由于锁无法编译oracle包
- java - 变量计数器不会随着添加新的预订对象而增加
- android - 错误:多个库的包名称为“com.reactnativecomponent.splashscreen”
- python - ValueError:int() 的无效文字,基数为 10:“image_path”:“tflearn”包的image_preloader
- java - 为什么某些 VPN 客户端会破坏 Java 调试以及如何解决该问题?
- rest - 使用 webmethods 的 POST 请求
- angular - ngrx 效果:调度空动作