c語言編程 C語言入門 c語言(C語言程序設(shè)計教程 c語言視頻教程 c語言零基礎(chǔ)

遞歸實(shí)現(xiàn)五子棋的判斷

// char ch: 判斷的棋子;int x, int y: 判斷的坐標(biāo);int mx, int my: 下一個要判斷的坐標(biāo)的偏移量。
//檢查函數(shù),返回x、y往mx、my方向不包括自身的連續(xù)棋子個數(shù)(例如board[1][1]、board[2][1]、board[3][1]都是#子,調(diào)用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:偏移后的坐標(biāo)
- 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;
- }
// 判斷函數(shù):判斷是否五子連成
- 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
- }
標(biāo)簽: