C语言怎样实现三子棋游戏
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章给大家分享的是有关C语言怎样实现三子棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。思路:main函数结构部署game函数功能的实现①创建存储空间②初始化存储空
千家信息网最后更新 2026年11月04日C语言怎样实现三子棋游戏
这篇文章给大家分享的是有关C语言怎样实现三子棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
思路:
main函数结构部署
game函数功能的实现
①创建存储空间
②初始化存储空间为空格
③打印棋盘
④实现玩家下棋
⑤实现电脑下棋
⑥实现玩家和电脑下棋后的输赢判断
所使用的文件:
test.c-----用于测试游戏
game.c----用于实现游戏中的一些函数
game.h-----头文件
test.c
#define _CRT_SECURE_NO_WARNINGS 1#include#include"game.h"#include void menu(){ printf("%s\n", "**********"); printf("%s\n", "* 1.play *"); printf("%s\n", "* 0.exit *"); printf("%s\n", "**********");}void game(){ //建立存储空间--二维数组 char ch[ROW][COL];//我们想让数组空间变得灵活,就要保证行和列可变,单数组不接受变量,只能使用define定义的常量-----最好放在头文件里---从而改变头文件实现数组空间灵活变化 //初始化存储空间----显示正常 innit(ch,ROW,COL); //打印棋盘 pri_board(ch, ROW, COL); char re='\0';//接收游戏结果 //玩家和电脑博弈 while (1) { //玩家下棋 pla_move(ch, ROW, COL); pri_board(ch, ROW, COL); //使用函数判断是否产生输赢 re=is_win(ch,ROW,COL); //只要不等于"c"说明产生了结果,直接结束博弈 if (re != 'C') break; //电脑下棋 com_move(ch, ROW, COL); pri_board(ch, ROW, COL); //使用函数判断是否产生输赢 re=is_win(ch, ROW, COL); if (re != 'C') break; } if (re == '*') printf("玩家获胜!\n"); else if (re == '#') printf("电脑获胜!\n"); else printf("平局!\n"); pri_board(ch, ROW, COL);}int main(){ //srand函数的使用,后面的com_move函数使用(难点) srand((unsigned int)time(NULL)); int input = 0; do { //打印游戏菜单提示玩家 menu(); //玩家选择 printf("请选择>:"); scanf("%d", &input); //对玩家的选择进行实现 switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,重新输入\n"); break; } } while (input); }
game.c
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void innit(char ch[ROW][COL], int row, int col){//遍历二维数组将值改为空格实现初始化 int i = 0; int w = 0; for (i = 0; i < row; i++) { for (w = 0; w < col; w++) { ch[i][w] = ' '; } }}void pri_board(char ch[ROW][COL],int row,int col){// int i = 0; int w = 0; //行的循环里有两个列的循环 //列的循环里有两个打印循环 for (i = 0; i < row; i++) { for (w = 0; w < col; w++) { printf(" %c ", ch[i][w]); if (w < col - 1) printf("|"); } printf("\n"); if (i < row - 1) { for (w = 0; w < col; w++) { printf("---"); if (w < col - 1) printf("|"); } printf("\n"); } } }void pla_move(char ch[ROW][COL], int row, int col){ while (1) { //玩家输入下棋坐标 int a = 0; int b = 0; printf("玩家走>:\n"); printf("请输入你要下的棋子坐标:"); scanf("%d%d", &a, &b);//判断坐标是否合法 if ((a >= 1 && a <= row) && (b >= 1 && b <= col)) { //符合规范后,判断棋子位置是否被占用 //玩家下棋的坐标和数组坐标有差异 if (ch[a-1][b-1] == ' ') { ch[a-1][b-1] = '*'; break; } else { printf("该位置被占用,请重新输入\n"); } } else { printf("你所输入的棋子位置不符合规范,请重新输入\n"); } }}void com_move( char ch[ROW][COL],int row,int col){ printf("电脑走>\n"); //涉及到srand和rand函数的使用(较难) //取余后坐标在正确范围内 while(1) { int a = rand()%row; int b = rand()%col; //判断坐标处是否已经下过 if (ch[a][b] == ' ') { ch[a][b] = '#'; break; } }}//通过遍历二维数组里面的内容判断是否平局int is_full(char ch[ROW][COL], int row, int col){ int i = 0; int w = 0; for (i = 0; i < row;i++) { for (w = 0; w < col; w++) { if(ch[i][w] == ' '); return 0; } } return 1;}char is_win(char ch[ROW][COL], int row, int col){ int i = 0; //判断行(三子棋版本) for (i = 0; i < row; i++) { if (ch[i][0] == ch[i][1] && ch[i][1] == ch[i][2] && ch[i][0] != ' ') return ch[i][0]; } //判断列(三子棋版本) for (i = 0; i < col; i++) { if (ch[0][i] == ch[1][i] && ch[1][i] == ch[2][i] && ch[0][i] != ' ') return ch[0][i]; } //判断对角线(三子棋版本) if (ch[0][0]==ch[1][1]&&ch[1][1]==ch[2][2]&&ch[1][1]!=' ') return ch[1][1];if (ch[0][2] == ch[1][1] && ch[1][1] == ch[2][0] && ch[0][2] != ' ') return ch[0][2]; //判断是否平局 int ispj = is_full(ch, ROW, COL); //棋盘满返回1 //不满返回0 if (ispj == 1) return 'Q'; else return 'C';}game.h
#define _CRT_SECURE_NO_WARNINGS 1#define ROW 3#define COL 3#include#include #include void innit(char ch[ROW][COL], int row, int col);void pri_board(char ch[ROW][COL], int row, int col);void pla_move(char ch[ROW][COL], int row, int col);void com_move(char ch[ROW][COL], int row, int col);char is_win(char ch[ROW][COL], int row, int col);
然而,这个三子棋代码只能在3*3棋盘下实现
我们可以通过改变is_win()输赢判断条件,来实现棋盘的自由变化.
修改
优化后的判断条件
列和行的判断
for (i = 0; i < col; i++) { int count = 0; for (q=0;q= 2) return ch[q][i]; }//判断行(三子棋版本)for (q = 0; q < row; q++){ int count = 0; for (i = 0; i < col; i++) {//行的判断 if (ch[q][i] == ch[q][i + 1] && ch[q][i] != ' ') { count++; continue; } else break; } if (count >= 2) return ch[q][i];}
对角线的判断
//判断对角线(三子棋版本)//左上角到右下角for (q = 0; q < row; q++){ for (i = 0; i < col; i++) { if (ch[q][i] == ' ') { continue; } else { if (ch[q][i] == ch[q + 1][i + 1]) { if (ch[q + 1][i + 1] == ch[q + 2][i + 2]) return ch[q][i]; } } } } //右上角到左下角for (q = 0; q < row; q++){ for (i = 0; i < col; i++) { if (ch[q][i] == ' ') { continue; } else { if (ch[q][i] == ch[q + 1][i - 1]) { if (ch[q + 1][i - 1] == ch[q + 2][i - 2]) return ch[q][i]; } } }}感谢各位的阅读!关于"C语言怎样实现三子棋游戏"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
三子
函数
玩家
数组
空间
棋盘
版本
电脑
坐标
文件
输赢
存储
循环
内容
对角
对角线
平局
二维
输入
选择
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
伟宏互联网科技
广东猪兼强互联网科技有限公司
互联网下的科技发展
朗新科技与工业互联网
互联网与未来科技
宜安科技 互联网金融
互联网科技大会案例
科技大学互联网专业好不好
广州恒生互联网科技有限
互联网科技创新服务
移动互联网科技公司
互联网5g黑科技有哪些
互联网媒体平台算高科技产业
智帮互联网科技公司最近动向
宇信科技在杭州互联网排第几
互联网科技接地气
互联网科技手抄报图片
兰石爱特工业互联网科技分公司
好易买互联网科技
利用互联网等科技手段
互联网电商科技
亿策互联网科技
互联网科技论文
奇士达互联网科技
互联网科技教育视频
互联网科技研发水平
互联网企业科技类企业如何做账
广西科技产业互联网是什么
广州智享互联网科技
唯美互联网科技