Write a mind map before writing code
code show as below:
head File:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <stdlib.h> #include <time.h> #define ROW 5 #define COL 5 #define STA 3 //menu void menu(); //Initialize the chessboard void InitBoard(char board[ROW][COL], int row, int col); // print the chessboard void PrintBoard(char board[ROW][COL], int row, int col); //The player plays chess int PlayerMove(char board[ROW][COL], int row, int col); //Computer playing chess int ComputerMove(char board[ROW][COL], int row, int col); // judge win or lose char IsWin(char board[ROW][COL], int row, int col, int x, int y); // Judgment of column direction char Arrange(char board[ROW][COL], int row, int col, int x, int y); //line judgment char Line(char board[ROW][COL], int row, int col, int x, int y); //judgment of diagonal char Diagonal(char board[ROW][COL], int row, int col, int x, int y); //judgment of anti-diagonal char Back_Diagonal(char board[ROW][COL], int row, int col, int x, int y); // is it full int IsFull(char board[ROW][COL], int row, int col);
Source file text.c:
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" //menu void menu() { printf("************************\\ "); printf("****** 1,play *****\\ "); printf("******0.exit *****\\ "); printf("************************\\ "); } void game() { char board[ROW][COL] = { 0 }; //Initialize the chessboard InitBoard(board, ROW, COL); // print the chessboard PrintBoard(board, ROW, COL); char sel = 0; while (1) { \t\t //The player plays chess sel = PlayerMove(board, ROW, COL); // print the chessboard PrintBoard(board, ROW, COL); if (sel != 'C') { break; } \t\t\t //Computer playing chess sel = ComputerMove(board, ROW, COL); // print the chessboard PrintBoard(board, ROW, COL); if (sel != 'C') { break; } } if (sel == '*') printf("The player won\\ "); else if (sel == '#') printf("The computer won\\ "); else printf("Tie\\ "); } int main() { \t int input = 0; \t srand((unsigned)time(NULL)); do { menu(); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("Exited!\\ "); break; default: printf("Input error! Please re-enter:\\ "); break; } } while (input); return 0; }
Source file game.h:
#define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" //Initialize the chessboard void InitBoard(char board[ROW][COL], int row, int col) { int i = 0; for (i = 0; i < row; i ++ ) { int j = 0; for (j = 0; j < col; j ++ ) { board[i][j] = ' '; } } } // print the chessboard void PrintBoard(char board[ROW][COL], int row, int col) { /*int i = 0; for (i = 0; i < row; i ++ ) { int j = 0; for (j = 0; j < col; j ++ ) { if (0 == i) { printf(" %d ", j); } else if (i != 0 & amp; & amp; j == 0) printf(" %d ", i); else printf(" %c ", board[i][j]); \t\t\t\t \t\t\t } printf("\\ "); }*/ int i = 0; for (i = 0; i < row; i ++ ) { int j = 0; for (j = 0; j < col; j ++ ) { if (0 == i & amp; & amp; j != col-1) { printf(" %d ", j); if (j < col - 2) printf("|"); } \t\t\t else if (i != 0 & amp; & amp; j == 0 & amp; & amp; i != row - 1) { printf(" %d ", i); if (j < col - 2) printf("|"); } else if (i == row - 1 || j == col - 1) printf(" "); else { printf(" %c ", board[i][j]); if (j < col - 2) printf("|"); } } printf("\\ "); if (i < row-1) { for (j = 0; j < col - 1; j ++ ) { printf("---"); if (j < col - 2) printf("|"); } } printf("\\ "); } } //The player plays chess int PlayerMove(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; \t while (1) { printf("Please enter the coordinates to play chess, separated by spaces:\\ "); scanf("%d %d", &x, &y); \t\t if (board[x][y] == ' ') { board[x][y] = '*'; break; } printf("Illegal input! Please re-enter:\\ "); } \t char rec = IsWin(board, ROW, COL, x, y); if (rec == '*') return board[x][y]; } //Computer playing chess int ComputerMove(char board[ROW][COL], int row, int col) { int x = 0; int y = 0; while (1) { x = rand() % (row - 1); y = rand() % (col - 1); if (x != 0 & amp; & amp; y != 0 & amp; & amp; board[x][y] == ' ') { board[x][y] = '#'; break; } } char rec = IsWin(board, ROW, COL, x, y); if (rec == board[x][y]) return board[x][y]; \t } // judge win or lose //Player wins '*' //Computer wins '#' // draw 'Q' // continue with 'C' char IsWin(char board[ROW][COL], int row, int col, int x, int y) { char temp = 0; temp = Arrange(board, ROW, COL, x, y); if (temp == board[x][y]) return board[x][y]; temp = Line(board, ROW, COL, x, y); if (temp == board[x][y]) return board[x][y]; temp = Diagonal(board, ROW, COL, x, y); if (temp == board[x][y]) return board[x][y]; temp = Back_Diagonal(board, ROW, COL, x, y); if (temp == board[x][y]) return board[x][y]; if (IsFull(board, ROW, COL)) return 'Q'; return 'C'; } // column judgment char Arrange(char board[ROW][COL], int row, int col, int x, int y) { int cx = x; int cy = y; // two boundary values int left = 0; int right = 0; //The number of chess pieces in the same line int count = 1; // Traversal in the vertical direction for (int i = 1; i < 10; i ++ ) { if (left == 0) { if (board[cx - 1][cy] == board[x][y]) { count + + ; cx -= 1; if (count == STA) return board[x][y]; } else { left = 1; cx = x; } } if (left == 1 & amp; & amp; right == 0) { if (board[cx + 1][cy] == board[x][y]) { count + + ; cx + = 1; if (count == STA) return board[x][y]; } else { right = 1; break; } } } return 0; } //line judgment char Line(char board[ROW][COL], int row, int col, int x, int y) { int cx = x; int cy = y; // two boundary values int left = 0; int right = 0; //The number of chess pieces in the same line int count = 1; // traversal in the horizontal direction for (int i = 1; i < 10; i ++ ) { if (left == 0) { if (board[cx][cy - 1] == board[x][y]) { count + + ; cy -= 1; if (count == STA) return board[x][y]; } else { left = 1; cy = y; } } if (left == 1 & amp; & amp; right == 0) { if (board[cx][cy + 1] == board[x][y]) { count + + ; cy + = 1; if (count == STA) return board[x][y]; } else { right = 1; break; } } } return 0; } //judgment of diagonal char Diagonal(char board[ROW][COL], int row, int col, int x, int y) { int cx = x; int cy = y; // two boundary values int left = 0; int right = 0; //The number of chess pieces in the same line int count = 1; //Traversal in the diagonal direction for (int i = 1; i < 10; i ++ ) { if (left == 0) { if (board[cx - 1][cy - 1] == board[x][y]) { count + + ; cy -= 1; cx -= 1; if (count == STA) return board[x][y]; } else { left = 1; cy = y; cx = x; } } if (left == 1 & amp; & amp; right == 0) { if (board[cx + 1][cy + 1] == board[x][y]) { count + + ; cy + = 1; cx + = 1; if (count == STA) return board[x][y]; } else { right = 1; break; } } } return 0; } //judgment of anti-diagonal char Back_Diagonal(char board[ROW][COL], int row, int col, int x, int y) { int cx = x; int cy = y; // two boundary values int left = 0; int right = 0; //The number of chess pieces in the same line int count = 1; //Traversal in the diagonal direction for (int i = 1; i < 10; i ++ ) { if (left == 0) { if (board[cx - 1][cy + 1] == board[x][y]) { count + + ; cy + = 1; cx -= 1; if (count == STA) return board[x][y]; } else { left = 1; cy = y; cx = x; } } if (left == 1 & amp; & amp; right == STA) { if (board[cx + 1][cy - 1] == board[x][y]) { count + + ; cy -= 1; cx + = 1; if (count == 5) return board[x][y]; } else { right = 1; break; } } } return 0; } // is it full int IsFull(char board[ROW][COL], int row, int col) { int i = 0; for (i = 1; i < row-1; i ++ ) { int j = 0; for (j = 1; j < col - 1; j ++ ) { if (board[i][j] == ' ') { return 0; } } } return 1; }
The knowledge points of the article match the official knowledge files, and you can further learn relevant knowledge Algorithm skill treeHomepageOverview 47194 people are studying systematically