news 2026/6/23 12:03:28

C语言小游戏 — 三子棋

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 11:55:14

Golang的函数

函数是Go语言中的基本构建块&#xff0c;用于组织可重用的代码逻辑。本文将详细介绍Go中函数的定义、参数传递、返回值以及高级用法。 1. 函数的基本格式 完整语法结构 func 函数名(参数列表) (返回值列表) {// 函数体return 返回值 }组成部分说明 组成部分说明是否必需fun…

作者头像 李华
网站建设 2026/6/23 11:47:46

轻集料混凝土哪家强?LC5.0型厂家这样选才靠谱

“垫层又要轻又要强&#xff0c;怎么选&#xff1f;”这句话背后&#xff0c;是无数项目经理和采购人员在面对卫生间回填、屋面找坡、地下室垫层等场景时的真实困惑。轻集料混凝土作为一种轻质高强的材料&#xff0c;近年来越来越受到建筑工程的青睐&#xff0c;尤其是LC5.0型这…

作者头像 李华
网站建设 2026/6/23 11:36:01

基于 Harmony 7.0 应用的手写签名应用首页实现

基于 Harmony 7.0 应用的手写签名应用首页实现 前言 电子签名已经成为无纸化办公的标配。从合同签署到文件审批&#xff0c;从报销单据到会议纪要——手写签名让电子文档具有了法律效力。一款好的手写签名工具&#xff0c;应该像一张无限大的签名纸——书写区域宽敞、签名流畅自…

作者头像 李华
网站建设 2026/6/23 11:34:59

AI领域每日资讯日报 | 2026年6月22日

&#x1f4f0; 今日头条 1. &#x1f3c6; 诺奖得主、AlphaFold之父投奔Anthropic&#xff01;谷歌48小时连跑俩大将 Demis Hassabis&#xff08;AlphaFold之父、诺贝尔奖得主&#xff09;等谷歌顶尖AI人才集体跳槽Anthropic&#xff0c;引发业界震动。谷歌48小时内连失两员大将…

作者头像 李华
网站建设 2026/6/23 11:30:02

信托制物业缴费模式的数智化落地实践与技术架构

作为深耕物业行业20年的从业者&#xff0c;我们在全国12个城市的信托制物业试点中&#xff0c;通过构建"智能缴费中台物联网监管系统AI工单引擎"三位一体技术架构&#xff0c;实现了业主资金安全与服务质量的动态平衡。以下从技术落地角度&#xff0c;拆解五大核心问…

作者头像 李华