当前位置: 首页 > news >正文

C语言小游戏 — 三子棋

函数的声明:

#include <stdio.h> #include <stdlib.h> #include <time.h> //符号的定义 #define ROW 3 #define COL 3 //函数的声明 //初始化棋盘 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 ComputerMove(char board[ROW][COL], int row, int col); // 玩家赢了 返回 * // 电脑赢了 返回 # // 平局 返回 Q // 游戏继续 返回 C //判断游戏输赢 char IsWin(char board[ROW][COL], int row, int col);

函数的实现:

void menu() { printf("******************************\n"); printf("****** 1. play *****\n"); printf("****** 0. exit *****\n"); printf("******************************\n"); } 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; for (i = 0; i < row; i++) { int j = 0; for (j = 0; j < col; j++) { printf(" %c ", board[i][j]); if (j < col - 1)//控制多打印的 | printf("|"); } printf("\n"); //打印分隔 if (i < row - 1) { int j = 0; for (j = 0; j < col; j++) { printf("---"); if (j < col - 1) printf("|"); } printf("\n"); } } } void PlayerMove(char board[][COL], int row, int col) { int x = 0; int y = 0; printf("玩家走\n"); while (1) { printf("请输入下棋的坐标"); 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"); } } } void ComputerMove(char board[ROW][COL], int row, int col) { printf("电脑走\n"); while (1) { int x = rand() % row; int y = rand() % col; //判断棋盘是否满了 if (board[x][y] == ' ') { board[x][y] = '#'; break; } } } int 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;//棋盘满了 } char IsWin(char board[ROW][COL], int row, int col) { int i = 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 (i = 0; i < col; i++) { if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ') { return board[1][i]; } } //判断对角线 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]; } //判断平局 //棋盘满了返回1, 不满返回0 int ret = IsFull(board, row, col); if (ret == 1) { return 'Q'; } //继续游戏 return 'C'; } void game() { //存储数据 char board[ROW][COL]; //初始化棋盘 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; 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 { printf("平局\n"); } DisplayBoard(board, ROW, COL); }

函数的整体调用:

int main() { int input = 0; //设置变化随机值 srand((unsigned int)time(NULL)); do { menu(); printf("请选择:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出游戏\n"); break; default: printf("选择错误,重新选择\n"); break; } } while (input); return 0; }
http://www.gsyq.cn/news/1579203.html

相关文章:

  • 【Azure Function App】本地调试PowerShell Function时需要注意两类错误:加载失败和认证失败
  • 运维监控大屏踩坑记:一条 SQL 的“CASE 陷阱”与跨库优化实践
  • 搬瓦工 KiwiVM 面板免费 AI 助手 Amy 功能演示 | 告别繁琐的命令行
  • 2026年SEO+GEO优化指南:搜索排名机制解析与实用工具推荐
  • 非对称密码体系的密码分析方法研究
  • Pendulum:Python 日期时间处理的终极解决方案
  • 深入 .NET AI Agent 开发:利用 Microsoft.Agents.AI 提取思考、调用工具与执行脚本
  • 2026 佛山传统企业升级|短视频矩阵赋能,加快数字化内容建设
  • 低成本创业辅助软件客观梳理
  • CS16S:01
  • 安全审计系统有哪些?2026年5大安全审计软件功能详解,最新分享
  • RAG 检索质量从 60% 到 90%:混合检索 + 重排序的完整实践
  • 基于知识图谱的百科知识问答系统:Django+Neo4j 智能问答平台项目实战
  • 全网最全!2026AI论文平台榜单(覆盖 99% 毕业论文需求)
  • 92-Java 多线程编程
  • 《B4501 [GESP202603 四级] 山之谷》
  • API中转站搭建完整教程:从零部署专属New API服务为什么自建API中转站
  • GLM-5.2实测:国产模型追上GPT梯队,但千万别直接切主力
  • 从“不可能三角”到模块化突围:2026年区块链开发的技术范式转型
  • 那个写稿的行业,完了
  • 他40岁,身价5万欧,一夜涨粉500万——这才是世界杯存在的意义
  • Ubuntu如何卸載LibreOfflice
  • 多智能体辩论为什么有效?这篇 arXiv 论文给出了“隐藏锚点“的数学证明
  • 为什么90%的企业AI项目会失败?7层能力建设架构告诉你答案
  • AI原生上下文学习正在淘汰传统微调——SITS 2026 ICL协议发布后,你的模型还剩多少有效上下文窗口?
  • 福州高端整木定制怎么选?6 家品牌实测对比,避坑必看
  • 断尺问题:戴德金分割现实悖论
  • 信托制物业缴费模式的数智化落地实践与技术架构
  • 二分查找解题
  • 国产BIM神器!翻模+BIM咨询全流程提速