C语言怎样实现三子棋游戏
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章给大家分享的是有关C语言怎样实现三子棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。思路:main函数结构部署game函数功能的实现①创建存储空间②初始化存储空
千家信息网最后更新 2025年11月13日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安全错误
数据库的锁怎样保障安全
越南服务器公司网站
安装数据库被挂起
新中大数据库master
车辆识别系统软件开发合同
金仓数据库忘记密码
诺格弗格服务器如何
mc炸服务器
数据库与系统概论考试
杭州市神舟网络技术有限公司
数据库连接无法上网
怎么给数据库添加图片
互联网科技学什么大学专业
软件开发技术工作
惠普服务器进入pe
垃圾分类软件开发方案文档
乐视手机主服务器连接不上
查询mysql数据库名
华为软件开发岗要学什么
宁海软件开发项目管理
app的服务器长什么样子
排查网络安全细则
哪个数据库安全系数高
台州软件开发公司报价
网络安全特别重大的响应是几级
网安支队网络安全检查学院
dbs数据库系统是采用了
网络安全装饰品手抄报
hp服务器怎么从U盘启动
网络安全口号小学生
网络安全宣传周开幕式方案