欢迎光临散文网 会员登陆 & 注册

c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础

2022-04-30 11:53 作者:方块工艺  | 我要投稿

递归实现五子棋的判断


// char ch: 判断的棋子;int x, int y: 判断的坐标;int mx, int my: 下一个要判断的坐标的偏移量。


//检查函数,返回x、y往mx、my方向不包括自身的连续棋子个数(例如board[1][1]、board[2][1]、board[3][1]都是#子,调用check(board[ROW][COL], '#', 3, 1, -1, 0)后得到的返回值是2):


  1. int check(char board[ROW][COL], char ch, int x, int y, int mx, int my) {
  2. int px = x+mx, py = y+my; //px、py:偏移后的坐标
  3. if (px >= 0 && py >= 0 && px < ROW && py < COL) { //防止索引越界
  4. if (board[x][y] == board[px][py]) {
  5. return 1 + check(board, ch, px, py, mx, my);
  6. }
  7. }
  8. return 0;
  9. }


// 判断函数:判断是否五子连成

  1. int isWin(char board[ROW][COL], int x, int y, char ch) {
  2. if (
  3. check(board, ch, x, y, 1, 0) + check(board, ch, x, y, -1, 0) >= 4
  4. || check(board, ch, x, y, 0, 1) + check(board, ch, x, y, 0, -1) >= 4
  5. || check(board, ch, x, y, 1, 1) + check(board, ch, x, y, -1, -1) >= 4
  6. || check(board, ch, x, y, 1, -1) + check(board, ch, x, y, -1, 1) >= 4
  7. ) {
  8. return 1; //五子连成,返回1
  9. }
  10. for (int i = 0; i < ROW; i++) { //判断棋盘是否已满
  11. for (int j = 0; j < COL; j++) {
  12. if (board[i][j] == ' ') {
  13. return 0; //棋盘未满,返回0
  14. }
  15. }
  16. }
  17. return -1; //平局,返回-1
  18. }


c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础的评论 (共 条)

分享到微博请遵守国家法律