当前位置:网站首页>C语言实现小游戏【三子棋】注释详细 逻辑清晰 快来看看吧!!
C语言实现小游戏【三子棋】注释详细 逻辑清晰 快来看看吧!!
2022-07-26 22:48:00 【AF帆_】
三子棋_c语言实现
详细步骤
一、game.h(头文件)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3 //用define定义的棋盘行列大小 是因为方便后续扩大棋盘
#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);//电脑下棋
char is_win(char board[ROW][COL], int row, int col);//判断输赢或平局
二、game.c(游戏源文件)
代码如下(示例):
#include "game.h"
void initboard(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++)
{
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)
{
for (j = 0; j < col; j++)
{
printf("---");
if(j<col-1)
printf("|");
}
}
printf("\n");
}
}
void playermove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
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] = '*';//别再把赋值号打错了
}
else
{
printf("该位置已被占用。\n");
}
break;
}
else
{
printf("坐标输入错误;\n");
}
}
}
void computermove(char board[ROW][COL], int row, int col)
{
int x = 0;
int y = 0;
while (1)
{
x = rand() % row;//利用rand 产生随机数 之所以%row 是因为剩余的数一定在0~row之间
y = rand() % col;
if (board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
static int if_full(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++)
{
if (board[i][j] == ' ')
{
return 0;
}
}
}
return 1;
}
char is_win(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][0] != ' ')
return board[i][0] ;
}
//判断列
i = 0;
for (i = 0; i < col;i++)
{
if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[0][i] != ' ')
return board[0][i];
}
//对角线
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != ' ')
{
return board[0][0];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != ' ')
{
return board[0][2];
}
int m = 0;
m = if_full(board, ROW, COL);
if (m == 1)
{
return 'Q';
}
else
{
return 'c';
}
}
三、test.c(测试源文件)
#include "game.h"
void menu()
{
printf("*****************************\n");
printf("******** 1.play *************\n");
printf("******** 0.exit *************\n");
printf("*****************************\n");
}
void game()
{
char board[ROW][COL] = {
0};
initboard(board, ROW, COL);
displayboard(board, ROW, COL);
char ret = ' ';
while (1)
{
playermove(board, ROW, COL);
displayboard(board, ROW, COL);
ret=is_win(board, ROW, COL);
if (ret != 'c')
{
break;
}
computermove(board, ROW, COL);
displayboard(board, ROW, COL);
ret = is_win(board, ROW, COL);
if (ret != 'c')
{
break;
}
}
if (ret == '*')
{
printf("玩家获胜\n");
}
else if (ret == '#')
{
printf("电脑获胜\n");
}
else
{
printf("平局\n");
}
}
void test()
{
int input = 0;
do //具体下棋步骤
{
menu();
printf("请输入:");
scanf("%d", &input);
switch (input)
{
case 1:
printf("现在开始三子棋>\n");
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
} while (input);
}
int main()
{
srand((unsigned int)time(NULL));
test();
return 0;
}
四、效果展示!


平局真的好难下!!!!!!下了好几局都没下出平局来 电脑太笨了
总结
这是由C语言实现的三子棋,有问题欢迎在评论区 或者 私聊我!!!
边栏推荐
- MySQL stored procedure function
- [reprint] NVIDIA hardware and the accuracy mode supported by each hardware
- 2022年T2I文本生成图像 中文期刊论文速览-1(ECAGAN:基于通道注意力机制的文本生成图像方法+CAE-GAN:基于Transformer交叉注意力的文本生成图像技术)
- Tinyint type map is received and returned as Boolean
- Js九九乘法表
- Realize data interaction between two apps through fileprovider
- [详解C语言]一文带你玩转函数
- 预分频值和自动重装值对中断频率的影响
- Text to image论文精读SSA-GAN:基于语义空间感知的文本图像生成 Text to Image Generation with Semantic-Spatial Aware GAN
- Mysql数据库-面试题
猜你喜欢

科学计算库 —— Matplotlib

科学计算库 —— Numpy
![[详解C语言]一文带你玩转函数](/img/44/53cdac9b9cf0d3f77e5da05956c3dc.png)
[详解C语言]一文带你玩转函数

测开基础 日常刷题 (持续更新ing...)

详解文本生成图像的仿射变换模块(Affine Transformation)和条件批量标准化(CBN)

Js九九乘法表

Text to image论文精读DF-GAN:A Simple and Effective Baseline for Text-to-Image Synthesis一种简单有效的文本生成图像基准模型
![[详解C语言]一文带你玩转循环结构(for_while_do-while)](/img/d9/75053297873a5b5458514e7f557cdc.png)
[详解C语言]一文带你玩转循环结构(for_while_do-while)

ACM模式输入输出练习
![[daily question] 565. Array nesting](/img/d7/b3fbdbabdc4193816c490b684bba66.png)
[daily question] 565. Array nesting
随机推荐
Tinyint type map is received and returned as Boolean
初识C语言(2)
Is index reproduction text generation image is score quantitative experiment whole process reproduction inception score quantitative evaluation experiment step on the pit and avoid the pit process
Specify that SQL only supports select syntax
B - Bomb HDU - 5934
指针常量与常量指针详细讲解
行,表,页,共享,排他,悲观,乐观,死锁
shell课程总结
ViTGAN:用视觉Transformer训练生成性对抗网络 Training GANs with Vision Transformers
为啥不建议使用Select *
Atcoder D - increment of coins (probability DP)
[reprint] NVIDIA hardware and the accuracy mode supported by each hardware
TIM输出比较——PWM
Text to image论文精读RAT-GAN:文本到图像合成中的递归仿射变换 Recurrent Affine Transformation for Text-to-image Synthesis
Text to image论文精读SSA-GAN:基于语义空间感知的文本图像生成 Text to Image Generation with Semantic-Spatial Aware GAN
Autojs learning - realize the display of date and lunar time
FID指标复现踩坑避坑 文本生成图像FID定量实验全流程复现(Fréchet Inception Distance )定量评价实验踩坑避坑流程
超出隐藏显示省略号
JS logical operator
第三讲--GPIO输入输出库函数使用以及相关例程