C语言怎样实现三子棋游戏
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,这篇文章给大家分享的是有关C语言怎样实现三子棋游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。思路:main函数结构部署game函数功能的实现①创建存储空间②初始化存储空
千家信息网最后更新 2025年02月19日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带来的网络安全问题
100m服务器价钱
网络安全三级系统每年测评多少次
东莞易特软件开发有限公司
网络安全事件分类的有
服务器bios的基本功能错误
夹娃娃软件开发
镇江网络安全课程
无限宝服务器
信息技术中网络技术及应用
网络安全股起飞
浙江中信网络技术有限公司
中国气象网络安全第一
有几大数据库
java 数据库长连接
软件开发项目转给别人
软件开发系统结构图图例
软件开发语言2018
2017网络技术三级
厦门大合网络技术晨胜
水晶石效果图软件开发
重庆三维可视化人口管理软件开发