200行C语言代码实现简易三子棋游戏
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#define ROW 3
#define COL 3
void reset(char arr[ROW][COL])//将棋盘arr[ROW][COL]数据赋值为空格
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
arr[i][j] = ' ';
}
}
}
void dis_play(char arr[ROW][COL])//打印棋盘
{
for (int i = 0; i < ROW; i++)//for每一次进去,打印一行数组和一条分割线
{ //数组行为:(空格)元素(空格)|(空格)元素(空格)|(空格)元素(空格)
//分割线为: - - - | - - - | - - -
for (int j = 0; j < COL; j++)//一行数组
{
printf(" %c ", arr[i][j]);
if (j < COL - 1)//为了美观,最后的“|”不打印
{
printf("|");
}
}
printf("
");
for (int k = 0; k < COL; k++)//一行分割线
{
printf("---");
if (k < COL - 1)//为了美观,最后的“|”不打印
{
printf("|");
}
}
printf("
");
}
}
void player_move(char arr[ROW][COL])//玩家下棋
{
int row = 0, col = 0;
while (1)
{
printf("玩家下棋,请输入坐标>:");
scanf("%d %d", &row, &col);
if (arr[row - 1][col - 1] == ' ')//判断是否可以下棋
{
arr[row - 1][col - 1] = '*';
break;
}
printf("输入错误,请再次输入
");
}
}
void computer_move(char arr[ROW][COL])//电脑下棋
{
int row = rand() % ROW;//生成行号
int col = rand() % COL;//生成列标
printf("电脑下棋:>
");
while (1)
{
if (arr[row][col] == ' ')//判断是否可以下棋
{
arr[row][col] = '#';
break;
}
row = rand() % ROW;
col = rand() % COL;
}
}
int is_full(char arr[ROW][COL])//用于在is_win()中判断是否为平局
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (arr[i][j] == ' ')
return 0;
}
}
return 1;
}
char is_win(char arr[ROW][COL])//三子棋胜利无非就三种情况:行相同、列相同和对角线相同。除开胜利还有平局
{
for (int i = 0; i < ROW; i++)//判断行
{
if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] != ' ')
return arr[i][0];
}
for (int i = 0; i < COL; i++)//判断列
{
if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] != ' ')
return arr[0][i];
}
//判断对角线
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[0][0] != ' ')
return arr[0][0];
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[0][2] != ' ')
return arr[0][2];
//判断平局
if (is_full(arr))
{
return 'q';
}
//都不满足游戏继续运行 return ‘c'
return 'c';
}
void meau()
{
printf("------------------
");
printf("| 1.play |
");
printf("|----------------|
");
printf("| 0.exit |
");
printf("------------------
");
}
void game()
{
char arr[ROW][COL];//初始化棋盘
char ch;
reset(arr);//将棋盘里每一个元素赋值为空格
dis_play(arr);
do
{
player_move(arr);
dis_play(arr);
ch=is_win(arr);
if (ch != 'c')
{
break;
}
computer_move(arr);
dis_play(arr);
ch=is_win(arr);
if (ch != 'c')
{
break;
}
} while (1);
switch (ch)//根据返回字符判断结果
{
case '#':
printf("电脑胜利
"); break;
case '*':
printf("玩家胜利
"); break;
case 'q':
printf("平局
"); break;
}
}
int main()
{
srand((unsigned)time(NULL));
int input = 0;
do
{
meau();
scanf("%d", &input);
switch (input)
{
case 1 :
game(); break;
case 0 :
break;
default :
printf("输入错误
");
}
} while (input);
return 0;
}
- .NET Core系列之MemoryCache 初识
- 007手机一键Root(安机网一键Root) v3.0 官方最新版 一键ROOT您的Android手机
- 12306密码被盗了怎么办?12306密码外泄解决方法
- 12个字的qq网名
- 150M迷你型无线路由器怎么设置?
- 192.168.1.1打不开怎么办?路由器192.168.1.1打不开的原因以及解决办法
- 2011年电子报合订本 电子报 编辑部 中文 PDF版 [84M]
- 2015年1月15日小米新旗舰发布会现场图文直播
- 2016.3.1vivo Xplay5新品发布会现场视频直播 优酷直播
- 2016华为P9发布会视频直播地址 4月15日华为P9国行发布会直播