c语言编程 C语言入门 c语言(C语言程序设计教程 c语言视频教程 c语言零基础
递归实现五子棋的判断

// 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):
- int check(char board[ROW][COL], char ch, int x, int y, int mx, int my) {
- int px = x+mx, py = y+my; //px、py:偏移后的坐标
- if (px >= 0 && py >= 0 && px < ROW && py < COL) { //防止索引越界
- if (board[x][y] == board[px][py]) {
- return 1 + check(board, ch, px, py, mx, my);
- }
- }
- return 0;
- }
// 判断函数:判断是否五子连成
- int isWin(char board[ROW][COL], int x, int y, char ch) {
- if (
- check(board, ch, x, y, 1, 0) + check(board, ch, x, y, -1, 0) >= 4
- || check(board, ch, x, y, 0, 1) + check(board, ch, x, y, 0, -1) >= 4
- || check(board, ch, x, y, 1, 1) + check(board, ch, x, y, -1, -1) >= 4
- || check(board, ch, x, y, 1, -1) + check(board, ch, x, y, -1, 1) >= 4
- ) {
- return 1; //五子连成,返回1
- }
- for (int i = 0; i < ROW; i++) { //判断棋盘是否已满
- for (int j = 0; j < COL; j++) {
- if (board[i][j] == ' ') {
- return 0; //棋盘未满,返回0
- }
- }
- }
- return -1; //平局,返回-1
- }

