当前位置: 首页 > 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.jsqmd.com/news/1067256/

相关文章:

  • OpenClaw-RL
  • 运维监控大屏踩坑记:一条 SQL 的“CASE 陷阱”与跨库优化实践
  • 文字编辑器EditPlus
  • 2026年SEO+GEO优化指南:搜索排名机制解析与实用工具推荐
  • 搬瓦工 KiwiVM 面板免费 AI 助手 Amy 功能演示 | 告别繁琐的命令行
  • 【Azure Function App】本地调试PowerShell Function时需要注意两类错误:加载失败和认证失败
  • 前端学习笔记-vue组件通信常用方式
  • 在本地运行任意 Hugging Face 模型:GGUF 完全指南
  • 2026最权威AI论文写作工具榜单:这些被高校和导师偷偷推荐的软件你还没用?
  • OpenTracing Python:分布式追踪的标准 API
  • 先说基因:一个做自动化起家,一个做采集起家
  • AI写作辅助软件的使用规范:如何让AI生成内容通过严格学术审查
  • 我做了一个只用来搜歌词的小 App
  • 非对称密码体系的密码分析方法研究
  • Pendulum:Python 日期时间处理的终极解决方案
  • 告别新手级RAG!一文掌握专业级后检索优化之「校正」
  • Edge浏览器停止更新,并回退到老版本方法
  • 深入 .NET AI Agent 开发:利用 Microsoft.Agents.AI 提取思考、调用工具与执行脚本
  • Manim物理模拟:别自己写欧拉了!
  • 古典密码 - 维吉尼亚密码破解
  • [APM32F4] 跟随 Fabrice Bellard 的脚步,把 MicroQuickJS 移植到 APM32F427
  • 2026 佛山传统企业升级|短视频矩阵赋能,加快数字化内容建设
  • 在线 AI 开发平台-MonkeyCode
  • 吉他选购指南2026年入门级1000-2000元横评:参数对比+真实评测
  • 每日一个开源项目(第138篇):OpenMontage - 把 AI 编程助手变成完整的视频制作团队
  • HAProxy 学习总结
  • CS16S:01
  • 低成本创业辅助软件客观梳理
  • 无损FLAC音乐怎么变成MP3?一篇讲清楚flac转mp3操作步骤
  • 安全审计系统有哪些?2026年5大安全审计软件功能详解,最新分享