三子棋:在一个九宫格里 玩家依次下棋 率先凑齐一行或一列或任一对角线相同棋子即获胜。
思路:创建棋盘并初始化---打印棋盘----玩家下棋---判断输赢---电脑随机下棋---判断输赢
玩家和电脑每次下棋完都要进行一次判断输赢
game函数部分
void game()
{
char arr[3][3];//创建数组
char a = ' ';//创建字符变量存放判断输赢返回的值
chushi(arr);//初始化棋盘
print(arr);//打印棋盘
while (1)
{
player(arr);//玩家下棋
print(arr);//打印棋盘
printf("\n");
a = jud(arr);//判断输赢
if (a == '*')
{
printf("玩家赢了\n");
break;
}
if (a == 'c')
{
printf("平局了\n");
break;
}
computer(arr);//电脑下棋
print(arr);//打印棋盘
printf("\n");
a = jud(arr);//判断输赢
if (a == 'c')
{
printf("平局了\n");
break;
}
if (a == '#')
{
printf("电脑赢了\n");
break;
}
}
}
初始化棋盘函数
void chushi(char arr[3][3])//定义初始化棋盘
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
arr[i][j] = ' ';
}
}
打印棋盘函数
void print(char arr[3][3])//定义打印棋盘
{
int i, j;
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
printf(" %c ",arr[i][j]);
if (j < 2)
printf("|");
}
printf("\n");
if (i < 2)
{
for (j = 0; j < 3; j++)
{
printf("---");
if (j < 2)
printf("|");
}
}
printf("\n");
}
}
棋盘效果如图
玩家下棋操作函数
void player(char arr[3][3])//定义玩家下棋操作
{
int x, y;
while (1)
{
printf("请输入你要下的坐标:");
scanf("%d%d", &x, &y);
if (x >= 1 && x <= 3 && y >= 1 && y <= 3)//判断输入的坐标是否合法
{
//判断坐标是否已被使用
if (arr[x - 1][y - 1] == ' ')
{
arr[x - 1][y - 1] = '*';
break;
}
else
printf("坐标已被占用,请重新输入\n");
}
else
printf("输入坐标有误\n");
}
}
判断输赢函数
int pingju(char arr[3][3])//判断是否为平局
{
int x, y;
//如果九个格还有未下棋的坐标则返回0
for (x = 0; x < 3; x++)
{
for (y = 0; y < 3; y++)
{
if (arr[x][y] == ' ')
return 0;
}
}
//如果九个格子都下满了则返回1
return 1;
}
char jud(char arr[3][3])//判断输赢
{
int x, y;
//判断一行
for (x = 0; x < 3; x++)
{
if (arr[x][0] == arr[x][1] && arr[x][1] == arr[x][2] && arr[x][1] != ' ')
return arr[x][1];
}
//判断一列
for (y = 0; y < 3; y++)
{
if (arr[0][y] == arr[1][y] && arr[1][y] == arr[2][y] && arr[1][y] != ' ')
return arr[1][y];
}
//判断对角线
if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[1][1] != ' ')
return arr[1][1];
if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0] && arr[1][1] != ' ')
return arr[1][1];
if (pingju(arr) == 1)//如果平局则返回c
return 'c';
}
电脑下棋操作函数
void computer(char arr[3][3])//定义电脑下棋
{
int x, y;
//随机生成电脑下棋坐标
while (1)
{
x = rand() % 3 + 0;
y = rand() % 3 + 0;
if (arr[x][y] == ' ')
{
arr[x][y] = '#';
break;
}
}
}
主函数部分
int main()
{
srand((unsigned)time(NULL));//设置随机数起点
int i;
do
{
printf("1、play 0、退出\n");
printf("请输入你的选择:");
scanf("%d", &i);
switch (i)
{
case 0:
printf("exit\n");
break;
case 1:
game();
break;
default:
printf("输入错误\n");
break;
}
} while (i);
return 0;
}
最终效果