[英]How to receive input for connect-n in C
在connect-N游戏中,您只需要玩家输入一列即可。 但是,我对如何使玩家在棋盘上最低空位上的移动有些困惑。 我要让玩家行动的程序是这样的:
void getMove(char **board, const int numRows, const int numCols, const
char blankSpace, int *row, int *col) {
int numArgsRead;
const int numArgsNeeded = 1;
do {
printf("Enter a column between 0 and %d to play in: ", numCols - 1);
numArgsRead = scanf("%d", col);
for (int i = numRows - 1; i >= 0; --i) {
if (board[i][*col] != blankSpace) {
continue;
}
else {
*row = i;
}
}
} while(!isMoveValid(numArgsRead, numArgsNeeded, board, numRows, numCols, *row,
*col, blankSpace));
}
注意:isMoveValid基本上采用所有这些参数,并确定参数是否为整数,(row,col)是否在板上以及斑点是否为空白。
我从main调用getMove,希望此函数将行和列的值“返回”到在main中定义的变量rowPlayed和colPlayed。 我知道col是根据用户输入分配的正确值,但是我不确定为什么for循环没有将相应的行索引分配给* row。 有什么建议么?
编辑:这是我的main.c
int main(int argc, char* argv[]) {
const char blankSpace = '*';
const int numRows = atoi(argv[1]);
const int numCols = atoi(argv[2]);
const int numToWin = atoi(argv[3]);
const char pieces[] = "XO";
int rowPlayed, colPlayed;
int playerTurn = 1; // 0 is player 1, 1 is player 2
correctNumOfArgs(argc, numRows, numCols, numToWin);
char** board = createBoard(numRows, numCols, blankSpace);
do {
playerTurn = changeTurn(playerTurn);
displayBoard(board, numRows, numCols);
getMove(board, numRows, numCols, blankSpace, &rowPlayed, &colPlayed);
makeMove(board, rowPlayed, colPlayed, pieces[playerTurn]);
} while(!isGameOver(board, numRows, numCols, blankSpace, numToWin, pieces[playerTurn]));
declareOutcome(playerTurn, board, numRows, numCols, blankSpace, numToWin, pieces[playerTurn]);
cleanUp(&board, numRows, numCols);
return 0;
}
据我所知,正确的行索引在*row = i;
分配得很好*row = i;
但您必须在分配后中断循环,否则第一个分配将被覆盖。
全循环建议:
for (int i = numRows - 1; i >= 0; --i)
{
if (board[i][*col] == blankSpace)
{
*row = i;
break;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.