我正在编写游戏“井字游戏” 我请每个玩家在两个不同的功能中输入他们的下一步行动, 然后将它们的移动保存在2D数组中,然后将此数组保存在main函数中的另一个2d数组中。 但是,当我打印数组时,当第二个玩家进入其下一个动作时,它将更改char符号。 PS:这是一个char数组。 这是我的代码
char player1(char board[N][N], int n)
{
int k, l;
print_player_turn(1);
scanf("%d%d", &k, &l);
board[k - 1][l - 1] = 'X';
print_board(board, n);
return board;
}
char player2(char board[N][N], int n)
{
int k, l;
print_player_turn(2);
scanf("%d%d", &k, &l);
board[k - 1][l - 1] = 'O';
print_board(board, n);
return board;
}
int main()
{
char board[N][N];
int n;
print_welcome();
print_enter_board_size();
scanf("%d", &n);
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
board[i][j] = '_';
print_board(board, n);
char* ptr = board;
while (isFull(board,n)==0)
{
board[0][0] = player1(board, n);
if (XloseGeneral(board, n) == 1)
{
print_winner(2);
return 0;
}
board[0][0] = player2(board, n);
if (OloseGeneral(board, n) == 1)
{
print_winner(1);
return 0;
}
}
print_tie();
}
答案 0 :(得分:0)
我建议您扩展2D阵列“板”的范围,以使包括播放器1和播放器2在内的所有方法都可以访问它,而不是将其作为参数传递。
这样,您可以确保对同一变量进行了修改,并且不进行任何重新初始化,这会导致丢失上一个条目。
答案 1 :(得分:0)
数组通过引用传递给函数。这意味着将指向该数组的指针传递给该函数。因此,对该函数 inside 中的数组所做的任何修改都将反映调用者(您情况下的主要方法)。因此,将函数void
设置为不需要返回任何内容,然后从其中删除return
语句。
答案 2 :(得分:0)
就像其他人所说的那样,您不需要返回板,您只需将指针传递到板即可。这是一个基于您的代码的简短示例:
#include <stdio.h>
#include <stdlib.h>
void player1(char **board);
void player2(char **board);
void print_board(char **board, int n);
void player1(char **board){
int k, l;
fprintf(stderr, "Player 1, enter grid position:\n");
scanf("%d%d", &k, &l);
board[k - 1][l - 1] = 'X';
}
void player2(char **board){
int k, l;
fprintf(stderr, "Player 2, enter grid position:\n");
scanf("%d%d", &k, &l);
board[k - 1][l - 1] = 'O';
}
void print_board(char **board, int n){
for (int i = 0; i < n; i++){
for( int j = 0; j < n; j++ ){
fprintf(stdout, "%c ", board[i][j]);
}
fprintf(stdout, "\n");
}
}
int main()
{
int n;
char **board;
fprintf(stdout, "Type in the board size:\n");
scanf("%d", &n);
// allocate memory for the board
board = (char **) malloc(n * sizeof(char*));
for (int i = 0; i < n; i++){
board[i] = (char *)malloc(n * sizeof(char));
for (int j = 0; j < n; j++){
board[i][j] = '_';
}
}
print_board(board, n);
player1(board);
player2(board);
print_board(board, n);
return 0;
}