我正在打井字游戏,当用户输入他们的举动时,我需要确保随机生成的数字与用户不同,以及他们是否要重新生成另一招。当我有一个让玩家移动的功能,然后是另一个产生随机移动的功能时,问题就来了。我似乎无法从get_player1_move到generate_player2_move中获取row和col的值。
这是我的主要功能,在其中声明row和col变量。
int main (){
char board[SIZE][SIZE];
int row, col;
clear_table(board); //Clears the table
display_table(board); //Display the table
do {
get_player1_move(board, row, col);
printf("%d, %d", row, col); //Have player 1 enter their move
generate_player2_move(board, row, col); //Generate player 2 move
} while(check_end_of_game(board) == false); //Do this while the game hasn't ended
print_winner(board); //after game is over, print who won
return 0;
}
这是get_player1_move函数,在这里我得到将要进入行和列的值。
void get_player1_move(char board[SIZE][SIZE], int row, int col) { //More work; test if game is over
printf("Player 1 enter your selection [row, col]: ");
scanf("%d, %d", &row, &col);
board[row-1][col-1] = 'O';
display_table(board);
}
现在,我想将分配给这两个变量的值传递给该函数,以便我可以对照随机生成的动作进行检查,但是当我打印出这些值时,它始终打印0、0。因此出于某种原因,我可以t获取要传递给该函数的值。这是generate_player2_move函数。
void generate_player2_move(char board[SIZE][SIZE], int row, int col) { //More work; test if game is over, also the check doesn't work
int randrow = 0, randcol= 0;
srand(time(NULL));
randrow= rand() % 3 + 1;
randcol= rand() % 3 + 1;
printf("%d, %d\n", row, col);
if ((randrow != row) && (randcol != col)) {
printf("Player 2 has enterd [row, col]: %d, %d \n", randrow, randcol);
board[randrow - 1][randcol - 1] = 'X';
display_table(board);
}
}
当我运行该函数时,printf(“%d,%d \ n”,row,col);当我希望打印用户在上一个功能中输入的值时,继续打印0,0。
答案 0 :(得分:1)
程序中存在多个问题。
首先让我们了解您的printf()
呼叫输出0, 0
的原因。参数row
和col
都是通过值传递的局部变量。这意味着如果e。 G。 row
变量get通过get_player1_move()
调用在scanf()
函数内更改,在get_player1_move()
函数外部未更改。因此,row
函数中的变量main()
保持不变。
您可以使用按引用传递(指针)来解决此问题。但是问题在于,播放器2的功能仅检查播放器1选择的最后一行和最后一列。但是您必须检查所有行和列。否则,字段可能会被覆盖。