#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
enum OP1
{
EXIT, PLAY
};
void Menu1(void)
{
printf("************* 0.exit*************\n");
printf("************* 1.play*************\n");
}
void Init1(char (*p)[6], int len) //棋盘初始化
{
int i;
int j;
for (i = 0; i < len; i++)
{
for (j = 0; j < 6; j++)
{
if (j % 2 != 0)
{
p[i][j] = '|';
}
else
p[i][j] = '_';
}
}
}
void Print1(char (*p)[6], int len) //棋盘打印
{
int i, j = 0;
for (i = 0; i < len; i++)
{
for (j = 0; j < 6; j++)
{
putchar(p[i][j]);
}
putchar('\n');
}
}
void Play_move1(char (*p)[6],int len) //玩家走
{
int m = 0;
int n = 0;
while (1)
{
printf("请输入你要输入的坐标(横坐标:0,1,2, 纵坐标:0,2,4)->:");
scanf("%d%d",&m,&n);
if (p[m][n] == '_')
{
break;
}
else
{
printf("\n你输入的位置已经有旗子了-->\n\n");
}
}
p[m][n] = 'O';
}
void Computer_move1(char (*p)[6],int len) //电脑走
{
int i = 0;
int j = 0;
srand((unsigned)(time(NULL)));
while (1)
{
i = rand() % 3;
j = rand() % 6;
if (p[i][j] == '_') //如果计算机的随机值落在空格里,可以下。否则继续产生随机值。
{
break;
}
}
p[i][j] = 'X';
}
int Is_full1(char (*p)[6], int len) //判断是否满了
{
int i = 0;
int j = 0;
for (i = 0; i < len; i++)
{
for (j = 0; j < 6; j += 2)
{
if (p[i][j] == '_')
{
return 0; //0表示还没满。
}
}
}
return 1; //表示棋盘满了。
}
int Judge_win1(char (*p)[6], int len) //判断输赢函数
{
int i = 0;
int j = 0;
int winner;
for (i = 0; i < len; i++)
{
if ((p[i][0] == p[i][2]) && (p[i][2] == p[i][4]) && (p[i][0] != '_')) //横行。
{
winner = p[i][0];
return winner;
}
}
for (j = 0; j < 6;j += 2)
{
if ((p[0][j] == p[1][j]) && (p[1][j] == p[2][j]) && (p[0][j] != '_')) //列行
{
winner = p[0][j];
return winner;
}
}
if ((p[0][0] == p[1][2]) && (p[1][2] == p[2][4])&& (p[0][0] != '_')) //右对角线
{
winner = p[0][0];
return winner;
}
if ((p[0][4] == p[1][2]) && (p[1][2] == p[2][0])&& (p[0][4] != '_')) //左对角线
{
winner = p[0][4];
return winner;
}
return Is_full1(p,3); //判断满了没。 //两个函数封装成一个判断输赢平局的函数。
}
void Play_game1(char (*p)[6], int len) //封装成一个游戏。
{
int count = 0;
int ret = 0;
Init1(p, 3);
Print1(p,3); //打印出棋盘。
while (1)
{
Play_move1(p,3); //玩家先走。
//printf("%d\n",Judge_win1(p,3));
ret = Judge_win1(p, 3);
if (ret != 0)
{
break;
}
Computer_move1(p, 3); //计算机走。
ret = Judge_win1(p, 3);
if (ret != 0)
{
break;
}
Print1(p,3);
}
if (ret == 'X')
{
Print1(p,3);
printf("计算机赢!\n");
}
if (ret == 'O')
{
Print1(p,3);
printf("玩家赢!\n");
}
if (ret == 1)
{
Print1(p,3);
printf("平局!\n");
}
}
int main3()
{
int input = 1;
char array[3][6]; //将这个行和列放在宏定义中效果更好。
while (input)
{
Menu1();
printf("请输入你要选择的内容:\n");
scanf("%d",&input);
switch (input)
{
case EXIT:
break;
case PLAY:
Play_game1(array, 3);
break;
default:
printf("你输入的有误,请重新输入!!\n");
break;
}
}
printf("hello...\n");
system("pause");
return 0;
}