C语言-->三子棋(基础版)

张开发
2026/4/3 14:30:49 15 分钟阅读
C语言-->三子棋(基础版)
一.思路:1.项目由3个文件组成:test.c game.h game.c(方便功能区分)2.游戏menu3.创建棋盘4.初始化棋盘5.打印棋盘6.玩家/电脑下棋7.输赢判断二.具体过程演示:1.项目由3个文件组成:test.c game.h game.c(方便功能区分)2.游戏menu输入1--开始游戏 0--退出游戏 其他数--重新输入void menu(){printf(****************************\n);printf(******1.play 2.exit******\n);printf(****************************\n);}int input 0;do{ menu();scanf(%d, input);switch (input){case 1:printf(开始游戏!\n);game();break;case 0:printf(退出游戏!\n);break;default:printf(输入错误请重新输入!\n);break;}} while (input);3.创建棋盘char Board[ROW][COL] { 0 };4.初始化棋盘将棋盘初始化为空格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] ;}}}5.打印棋盘打印棋盘方便观察void DisplayBoard(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){printf( %c ,Board[i][j]);if(j col-1)printf(|);}printf(\n);if(i row-1){for (j 0; j col; j){printf(---);if (j col - 1)printf(|);}printf(\n);}}}6.玩家下棋void PlayerMove(char Board[ROW][COL], int row, int col){printf(玩家下棋:\n);printf(请输入坐标:\n);int x, y;while (1){ scanf(%d %d, x, y);if (0 x x col 0 y y row){if (Board[y - 1][x - 1] ){Board[y - 1][x - 1] *;break;}else{printf(坐标被占用,请重新输入\n);}}else{printf(坐标非法请重新输入\n);}}}7.电脑下棋void CompurterMove(char Board[ROW][COL], int row, int col){printf(电脑下棋:\n);while (1){srand((unsigned int)time(NULL));int x rand()%col;int y rand() % row;if (Board[x][y] ){Board[x][y] #;break;}}}8.输赢判断返回玩家胜-- * 电脑-- # 平局--Q 继续--Cchar IsWin(char Board[ROW][COL], int row, int col){int i 0;int j 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 (j 0; j col; j){if (Board[0][j] Board[1][j] Board[1][j] Board[2][j] Board[1][j] ! )return Board[1][j];}//对角线{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];}//平局if (IsFull(Board, ROW, COL) 1)return Q;//继续return C;}三.完整codetest.c#include game.h void menu() { printf(****************************\n); printf(******1.play 2.exit******\n); printf(****************************\n); } void game() { char Board[ROW][COL] { 0 };//创建棋盘 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; CompurterMove(Board, ROW, COL);//电脑下棋 DisplayBoard(Board, ROW, COL);//打印棋盘 ret IsWin(Board, ROW, COL);//判断输赢 if (ret ! C) break; } if (ret Q) printf(平局!\n); else if(ret *) printf(玩家胜利!\n); else printf(电脑胜利!\n); } int main() { int input 0; do { menu(); scanf(%d, input); switch (input) { case 1: printf(开始游戏!\n); game(); break; case 0: printf(退出游戏!\n); break; default: printf(输入错误请重新输入!\n); break; } } while (input); return 0; }game.h#define _CRT_SECURE_NO_WARNINGS #define ROW 3 #define COL 3 #includestdio.h #includestdlib.h #includetime.h 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 CompurterMove(char Board[ROW][COL], int row, int col); char IsWin(char Board[ROW][COL], int row, int col);game.c#include game.h char 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; } //初始化数组 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; int j 0; for (i 0; i row; i) { for (j 0; j col; j) { printf( %c ,Board[i][j]); if(j col-1) printf(|); } printf(\n); if(i row-1) { for (j 0; j col; j) { printf(---); if (j col - 1) printf(|); } printf(\n); } } } //玩家下棋 void PlayerMove(char Board[ROW][COL], int row, int col) { printf(玩家下棋:\n); printf(请输入坐标:\n); int x, y; while (1) { scanf(%d %d, x, y); if (0 x x col 0 y y row) { if (Board[y - 1][x - 1] ) { Board[y - 1][x - 1] *; break; } else { printf(坐标被占用,请重新输入\n); } } else { printf(坐标非法请重新输入\n); } } } //电脑下棋 void CompurterMove(char Board[ROW][COL], int row, int col) { printf(电脑下棋:\n); while (1) { srand((unsigned int)time(NULL)); int x rand()%col; int y rand() % row; if (Board[x][y] ) { Board[x][y] #; break; } } } char IsWin(char Board[ROW][COL], int row, int col) { int i 0; int j 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 (j 0; j col; j) { if (Board[0][j] Board[1][j] Board[1][j] Board[2][j] Board[1][j] ! ) return Board[1][j]; } //对角线 { 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]; } //平局 if (IsFull(Board, ROW, COL) 1) return Q; //继续 return C; }

更多文章