【C语言】三子棋(详解+文末附全代码)
一.思想实现
三子棋又名井字棋,游玩方式就是在一个’井’字里画’X’或者’O’,直到出现下列三种情况则出现赢家:
1.三个’X’ 或 ‘O’ 在同一行;
2.三个’X’ 或 ‘O’ 在同一列;
3.三个’X’ 或 ‘O’ 在同一对角线;
那我们用C语言实现这个游戏,则需要经历下面的流程:
1.创建一个菜单界面可供玩家选择
2.创建棋盘
3.绘制棋盘
4.玩家落子
5.电脑落子
6.判断谁赢了游戏
7.返回空棋盘重新开始游戏
二.代码详解
1.创建一个菜单界面可供玩家选择
用switch()函数实现玩家的选择
void menu()//输出菜单界面
{
printf("******************\n");
printf("******0.exit******\n");
printf("******1.play******\n");
printf("******************\n");
}
int main()
{
int input = 0;
menu();//引入菜单栏
printf("请输入你的操作:\n");
scanf("%d", &input);
do
{
switch (input)//玩家进行选择是否玩游戏
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
break;
}
} while (input);
system("pause");
return 0;
}
2.创建棋盘
用一个二维数组实现棋盘的存放
void InitBoard(char board[][COL], int row, int col)
{
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
board[i][j] = ' ';//在数组中填满空格
}
}
}
3.绘制棋盘
棋盘具体是什么样子呢?
这样看不够详细,来一行一行看:
第一行:
只有三组三个“空格”和两条“|”组成
第二行:
由三组三个“-”和两条“|”组成
第三、四行和第一二行一样
第五行则再次重复第一行
所有第一行的组成格式要输出三次,第二行的组成格式要输出两次
最终组成一个完整的棋盘
void ShowBoard(char board[][COL], int row, int col)//画棋盘
{
printf("****************************\n");
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
printf(" %c ", board[i][j]);//打印空格
if (j < col - 1)
{
printf("|");//打印竖线
}
}
printf("\n");
//--- 控制行数
if (i < row - 1)
{
//循环控制---的列数
for (int j = 0; j < col; j++)
{
printf("---");
if (j < col - 1)
{
printf("|");
}
}
printf("\n");
}
}
printf("****************************\n");
}
4.玩家落子
让玩家输入落子的坐标,然后判断此处是否落过棋子,若没落过,则放入‘X’。(自己改为’O’也可)
void PlayerMove(char board[][COL], int row, int col)//玩家放棋子
{
int x = 0;
int y = 0;
while (1)
{
printf("请输入你的1-3坐标:\n");
scanf("%d%d", &x, &y);//1 3 --> 0 2
if (x >= 1 && x <= 3 && y >= 1 && y <= 3)
{
if (board[x - 1][y - 1] =