C语言如何开发实现井字棋
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"C语言如何开发实现井字棋",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C语言如何开发实现井字棋"这篇文章吧。总体思路井字棋棋盘我
千家信息网最后更新 2026年11月02日C语言如何开发实现井字棋
这篇文章主要为大家展示了"C语言如何开发实现井字棋",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C语言如何开发实现井字棋"这篇文章吧。
总体思路
井字棋棋盘我们总体可以当成一个二维数组来操作,我们分别需要实现初始化二维数组,打印棋盘,玩家下棋,电脑下棋,判断输赢等代码
项目的创建
我们创建了头文件用于放函数的声明,game.c文件放置函数的实现,test.c文件用于测试。
测试结果
电脑获胜:
玩家获胜:
平局:
各函数代码的实现
我们在game.c文件中实现函数功能的代码
初始化二维数组
void InitBoard(char Board[ROW][COL], int row, int col){ for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { Board[i][j] = ' '; } }}打印棋盘
void DisplayBoard(char Board[ROW][COL], int row, int col){ for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { printf(" %c ", Board[i][j]); if (j < col - 1) printf("|"); } printf("\n"); if (i < row - 1) { for (int j = 0; j < col; j++) { printf("---"); if (j < col - 1) printf("|"); } } printf("\n"); }}这里的棋盘我们只打印了井字的形状,如果为了美观,还可以进行封边,这里就留给朋友们自行实现啦。
玩家下棋
void PlayMove(char Board[ROW][COL], int row, int col){ while (1) { int x = 0, y = 0; printf("请输入坐标:\n"); 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"); } }}电脑下棋
在电脑落子之前,先检测有没有下一步可以直接赢的,若有,则落子在此处,电脑获胜,若没有,再检测玩家下一步是否有机会获胜,若玩家下一步可以直接获胜,那么电脑将抢占这一步。
如果上述两种情况均不存在,当发现(1,1)位置是空时,电脑先下这一步。
其他情况均随意落子。
void ComputerMove(char Board[ROW][COL], int row, int col){ int x = 0, y = 0; while (1) { if (JudgeComputer(Board, ROW, COL)) { for (int i = 0; i < row; i++) { if (Board[i][0] == Board[i][1] && Board[i][0] == '*' && Board[i][2] == ' ') { Board[i][2] = '*'; return; } else if (Board[i][0] == Board[i][2] && Board[i][0] == '*' && Board[i][1] == ' ') { Board[i][1] = '*'; return; } else if (Board[i][1] == Board[i][2] && Board[i][1] == '*' && Board[i][0] == ' ') { Board[i][0] = '*'; return; } } for (int j = 0; j < col; j++) { if (Board[0][j] == Board[1][j] && Board[0][j] == '*' && Board[2][j] == ' ') { Board[2][j] = '*'; return; } else if (Board[0][j] == Board[2][j] && Board[0][j] == '*' && Board[1][j] == ' ') { Board[1][j] = '*'; return; } else if (Board[1][j] == Board[2][j] && Board[1][j] == '*' && Board[0][j] == ' ') { Board[0][j] = '*'; return; } } if (Board[0][0] == Board[1][1] && Board[0][0] == '*' && Board[2][2] == ' ') { Board[2][2] = '*'; return; } else if (Board[0][0] == Board[2][2] && Board[0][0] == '*' && Board[1][1] == ' ') { Board[1][1] = '*'; return; } else if (Board[1][1] == Board[2][2] && Board[1][1] == '*' && Board[0][0] == ' ') { Board[0][0] = '*'; return; } else if (Board[0][2] == Board[1][1] && Board[0][2] == '*' && Board[2][0] == ' ') { Board[2][0] = '*'; return; } else if (Board[0][2] == Board[2][0] && Board[0][2] == '*' && Board[1][1] == ' ') { Board[1][1] = '*'; return; } else if (Board[2][0] == Board[1][1] && Board[2][0] == '*' && Board[0][2] == ' ') { Board[0][2] = '*'; return; } } else if (JudgePlayer(Board, ROW, COL)) { for (int i = 0; i < row; i++) { if (Board[i][0] == Board[i][1] && Board[i][0] == '#' && Board[i][2] == ' ') { Board[i][2] = '*'; return; } else if (Board[i][0] == Board[i][2] && Board[i][0] == '#' && Board[i][1] == ' ') { Board[i][1] = '*'; return; } else if (Board[i][1] == Board[i][2] && Board[i][1] == '#' && Board[i][0] == ' ') { Board[i][0] = '*'; return; } } for (int j = 0; j < col; j++) { if (Board[0][j] == Board[1][j] && Board[0][j] == '#' && Board[2][j] == ' ') { Board[2][j] = '*'; return; } else if (Board[0][j] == Board[2][j] && Board[0][j] == '#' && Board[1][j] == ' ') { Board[1][j] = '*'; return; } else if (Board[1][j] == Board[2][j] && Board[1][j] == '#' && Board[0][j] == ' ') { Board[0][j] = '*'; return; } } if (Board[0][0] == Board[1][1] && Board[0][0] == '#' && Board[2][2] == ' ') { Board[2][2] = '*'; return; } else if (Board[0][0] == Board[2][2] && Board[0][0] == '#' && Board[1][1] == ' ') { Board[1][1] = '*'; return; } else if (Board[1][1] == Board[2][2] && Board[1][1] == '#' && Board[0][0] == ' ') { Board[0][0] = '*'; return; } else if (Board[0][2] == Board[1][1] && Board[0][2] == '#' && Board[2][0] == ' ') { Board[2][0] = '*'; return; } else if (Board[0][2] == Board[2][0] && Board[0][2] == '#' && Board[1][1] == ' ') { Board[1][1] = '*'; return; } else if (Board[2][0] == Board[1][1] && Board[2][0] == '#' && Board[0][2] == ' ') { Board[0][2] = '*'; return; } } else { if (Board[1][1] == ' ') { Board[1][1] = '*'; return; } else { x = rand() % row; y = rand() % col; if (Board[x][y] == ' ') { Board[x][y] = '*'; break; } } } }}判断电脑是否有位置可以获胜
static int JudgeComputer(char Board[ROW][COL], int row, int col){ for (int i = 0; i < row; i++) { if (Board[i][0] == Board[i][1] && Board[i][0] == '*' && Board[i][2] == ' ') return 1; else if (Board[i][0] == Board[i][2] && Board[i][0] == '*' && Board[i][1] == ' ') return 1; else if (Board[i][1] == Board[i][2] && Board[i][1] == '*' && Board[i][0] == ' ') return 1; } for (int j = 0; j < col; j++) { if (Board[0][j] == Board[1][j] && Board[0][j] == '*' && Board[2][j] == ' ') return 1; else if (Board[0][j] == Board[2][j] && Board[0][j] == '*' && Board[1][j] == ' ') return 1; else if (Board[1][j] == Board[2][j] && Board[1][j] == '*' && Board[0][j] == ' ') return 1; } if (Board[0][0] == Board[1][1] && Board[0][0] == '*' && Board[2][2] == ' ') return 1; else if (Board[0][0] == Board[2][2] && Board[0][0] == '*' && Board[1][1] == ' ') return 1; else if (Board[1][1] == Board[2][2] && Board[1][1] == '*' && Board[0][0] == ' ') return 1; else if (Board[0][2] == Board[1][1] && Board[0][2] == '*' && Board[2][0] == ' ') return 1; else if (Board[0][2] == Board[2][0] && Board[0][2] == '*' && Board[1][1] == ' ') return 1; else if (Board[2][0] == Board[1][1] && Board[2][0] == '*' && Board[0][2] == ' ') return 1; else return 0;}判断玩家是否有位置获胜
static int JudgePlayer(char Board[ROW][COL], int row, int col){ for (int i = 0; i < row; i++) { if (Board[i][0] == Board[i][1] && Board[i][0] == '#' && Board[i][2] == ' ') return 1; else if (Board[i][0] == Board[i][2] && Board[i][0] == '#' && Board[i][1] == ' ') return 1; else if (Board[i][1] == Board[i][2] && Board[i][1] == '#' && Board[i][0] == ' ') return 1; } for (int j = 0; j < col; j++) { if (Board[0][j] == Board[1][j] && Board[0][j] == '#' && Board[2][j] == ' ') return 1; else if (Board[0][j] == Board[2][j] && Board[0][j] == '#' && Board[1][j] == ' ') return 1; else if (Board[1][j] == Board[2][j] && Board[1][j] == '#' && Board[0][j] == ' ') return 1; } if (Board[0][0] == Board[1][1] && Board[0][0] == '#' && Board[2][2] == ' ') return 1; else if (Board[0][0] == Board[2][2] && Board[0][0] == '#' && Board[1][1] == ' ') return 1; else if (Board[1][1] == Board[2][2] && Board[1][1] == '#' && Board[0][0] == ' ') return 1; else if (Board[0][2] == Board[1][1] && Board[0][2] == '#' && Board[2][0] == ' ') return 1; else if (Board[0][2] == Board[2][0] && Board[0][2] == '#' && Board[1][1] == ' ') return 1; else if (Board[2][0] == Board[1][1] && Board[2][0] == '#' && Board[0][2] == ' ') return 1; else return 0;}判断输赢
char IsWin(char Board[ROW][COL], int row, int col)for (int i = 0; i < row; i++) { if (Board[i][0] == Board[i][1] && Board[i][2] == Board[i][1] && Board[i][1] != ' ') { return Board[i][0]; } } for (int j = 0; j < col; j++) { if (Board[0][j] == Board[1][j] && Board[1][j] == Board[2][j] && Board[j][1] != ' ') { return Board[0][j]; } } if (Board[0][0] == Board[1][1] && Board[2][2] == Board[1][1] && Board[2][2] != ' ') return Board[0][0]; if (Board[0][2] == Board[1][1] && Board[2][0] == Board[1][1] && Board[1][1] != ' ') return Board[1][1]; if (IsFull(Board, ROW, COL)) { return 'o'; } return 'C';}判断和棋
static int IsFull(char Board[ROW][COL], int row, int col){ for (int i = 0; i < row; i++) { for (int j = 0; j < col; j++) { if (Board[i][j] == ' ') return 0; } } return 1;}声明代码
我们在game.h头文件中进行函数的声明。
void meun();#define ROW 3#define COL 3//游戏主函数void game();//初始化二维数组void InitBoard(char Board[ROW][COL], int row, int col);//打印棋盘void DisplayBoard(char Board[ROW][COL], int row, int col);//玩家下棋void PlayMove(char Board[ROW][COL], int row, int col);//电脑下棋void ComputerMove(char Board[ROW][COL], int row, int col);//判断赢否char IsWin(char Board[ROW][COL], int row, int col);//判断棋盘满了吗//int IsFull(char Board[ROW][COL], int row, int col);//判断电脑下一部是否可以直接赢//int JudgeComputer(char Board[ROW][COL], int row, int col);//判断玩家下一步是否会赢//int JudgePlayer(char Board[ROW][COL], int row, int col);
测试代码
我们在test.c文件中测试该游戏。
#include "game.h"void game(){ char ret = 0; char Board[ROW][COL] = { 0 }; //初始化数组 InitBoard(Board, ROW, COL); //打印棋盘 printf("棋盘如下:\n"); DisplayBoard(Board, ROW, COL); while (1) { //玩家下棋 printf("玩家落子:\n"); PlayMove(Board, ROW, COL); //每下一步打印一次棋盘 DisplayBoard(Board, ROW, COL); //每下一步判断一次胜负 ret = IsWin(Board, ROW, COL); if (ret != 'C') { break; } //电脑下棋 printf("电脑落子:\n"); 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 if (ret == 'o') printf("卧龙凤雏\n");}void test(){ int input = 0; srand((size_t)time(NULL)); do { meun(); printf("请选择:>"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("游戏结束\n"); break; default: printf("输入错误,请重新输入:\n"); break; } } while (input);}int main(){ test(); return 0;}以上是"C语言如何开发实现井字棋"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
电脑
玩家
棋盘
j++
函数
文件
输入
井字
代码
数组
位置
二维
测试
语言
开发
内容
篇文章
总体
情况
输赢
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
江苏根荣互联网科技
科技互联网企业
互联网和科技技术
科技互联网项目
互联网科技公司税收优惠
深圳互联网科技公司
互联网科技排名
安徽鑫晟辉互联网科技
壕鑫互联网络科技
沃里互联网科技
互联网科技logo
上游互联网科技
承德科技产业互联网发展
受益于互联网科技的高速发展
互联网金融中的现代科技
武汉健翔互联网络科技有限公司
伊宁互联网科技做什么的
银川新华互联网科技学校是国营吗
互联网对科技影响
东风日产互联网科技公司叫什么
上海睿民互联网科技有限公司
互联网巨头科技公司
恒生科技互联网指数分析
互联网科技如何创业
恒生互联网科技业指数调整周期
科技互联网的核心竞争力
沐思想互联网科技有限公司
普陀区互联网教育科技管理办法
长沙渺峰互联网科技有限公司
同城互联网络科技