繁体   English   中英

如何在C中接收connect-n的输入

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM