C语言小游戏 — 三子棋 函数的声明#include stdio.h #include stdlib.h #include time.h //符号的定义 #define ROW 3 #define COL 3 //函数的声明 //初始化棋盘 void InitBoard(char board[ROW][COL], int row, int col); //打印棋盘函数 void DisplayBoard(char board[ROW][COL], int row, int col); //玩家下棋 void PlayerMove(char board[ROW][COL], int row, int col); //电脑下棋 void ComputerMove(char board[ROW][COL], int row, int col); // 玩家赢了 返回 * // 电脑赢了 返回 # // 平局 返回 Q // 游戏继续 返回 C //判断游戏输赢 char IsWin(char board[ROW][COL], int row, int col);函数的实现void menu() { printf(******************************\n); printf(****** 1. play *****\n); printf(****** 0. exit *****\n); printf(******************************\n); } void InitBoard(char board[ROW][COL], int row, int col) { int i 0; int j 0; for (i 0; i row; i) { for (j 0; j col; j) { board[i][j] ; } } } void DisplayBoard(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) { printf( %c , board[i][j]); if (j col - 1)//控制多打印的 | printf(|); } printf(\n); //打印分隔 if (i row - 1) { int j 0; for (j 0; j col; j) { printf(---); if (j col - 1) printf(|); } printf(\n); } } } void PlayerMove(char board[][COL], int row, int col) { int x 0; int y 0; printf(玩家走\n); while (1) { printf(请输入下棋的坐标); scanf(%d %d, x, y); //判断坐标合法性 if (x 1 x row y 1 y col) { //下棋 //坐标是否被占用 if (board[x - 1][y - 1] ) { board[x - 1][y - 1] *; break; } else { printf(坐标被占用请重新输入\n); } } else { printf(坐标非法请重新输入\n); } } } void ComputerMove(char board[ROW][COL], int row, int col) { printf(电脑走\n); while (1) { int x rand() % row; int y rand() % col; //判断棋盘是否满了 if (board[x][y] ) { board[x][y] #; break; } } } int IsFull(char board[ROW][COL], int row, int col) { int i 0; int j 0; for (i 0; i row; i) { for (j 0; j col; j) { if (board[i][j] ) { return 0;//棋盘没满 } } } return 1;//棋盘满了 } char IsWin(char board[ROW][COL], int row, int col) { int i 0; //判断行 for (i 0; i row; i) { if (board[i][0] board[i][1] board[i][1] board[i][2] board[i][1] ! ) { return board[i][1];// } } //判断列 for (i 0; i col; i) { if (board[0][i] board[1][i] board[1][i] board[2][i] board[1][i] ! ) { return board[1][i]; } } //判断对角线 if (board[0][0] board[1][1] board[1][1] board[2][2] board[1][1] ! ) { return board[1][1]; } if (board[0][2] board[1][1] board[1][1] board[2][0] board[1][1] ! ) { return board[1][1]; } //判断平局 //棋盘满了返回1 不满返回0 int ret IsFull(board, row, col); if (ret 1) { return Q; } //继续游戏 return C; } void game() { //存储数据 char board[ROW][COL]; //初始化棋盘 InitBoard(board, ROW, COL); //打印棋盘 DisplayBoard(board, ROW, COL); //游戏状态 char ret 0; while (1) { PlayerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); ret IsWin(board, ROW, COL); if (ret ! C) break; ComputerMove(board, ROW, COL); DisplayBoard(board, ROW, COL); ret IsWin(board, ROW, COL); if (ret ! C) break; } if (ret *) { printf(玩家赢了\n); } else if (ret #) { printf(电脑赢了\n); } else { printf(平局\n); } DisplayBoard(board, ROW, COL); }函数的整体调用int main() { int input 0; //设置变化随机值 srand((unsigned int)time(NULL)); do { menu(); printf(请选择:); scanf(%d, input); switch (input) { case 1: game(); break; case 0: printf(退出游戏\n); break; default: printf(选择错误重新选择\n); break; } } while (input); return 0; }