C语言小游戏 — 三子棋

发布时间:2026/10/11 13:59:40
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; }

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询