这是代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char a[3][3]={'1','2','3','4','5','6','7','8','9'}; //九宫格
int k,q,i,z;
char ch;
int s,m; //长和宽
unsigned winner=0;
void drawer() //玩家下子
{
printf("玩家 请输入你所下的位置");
scanf("%d",&k);
s=--k/3;
m=k%3;
for(;;)
{
if(a[s][m]=='o'||a[s][m]=='x')
{
printf("该位置已经被占用 请重新输入\n");
scanf("%d",&k);
s=--k/3;
m=k%3;
}
else
{
a[s][m]='x';
break;
}
}
}
void win() //胜利条件判定
{
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
winner=1;
else
{
for(int L=0;L<=2;L++)
{
if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
winner=1;
}
}
}
int main() //开始位置
{
printf("\n"); //画图
printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]);
printf("---+---+---\n");
srand(unsigned(time(0)));
for(i=0;i<=9;i++)
{
drawer();
win();
if (i>=9)
{
printf("游戏结束 平局");
break;
}
if (winner==1)
{
printf("游戏结束 %s胜利",(i%2==0)?"玩家":"电脑");
break;
}
//判断电脑下子 (问题所在)
i+=1;
for(z=1;z<=9;z++)
{
s=--z/3;
m=z%3;
if(a[s][m]=='o'||a[s][m]=='x') //如果此处有子 跳过
continue;
a[s][m]='o';
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]|| //以下是胜利条件 即下在此处电脑赢
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
break;
else
{
for(int L=0;L<=2;L++)
{
if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
break;
break;
}
}
a[s][m]='x'; //以下是防止玩家胜利的条件
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
{
a[s][m]='o';
break;
}
else
{
for(int L=0;L<=2;L++)
{
if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
{
a[s][m]='o';
break;
break;
}
}
}
itoa(z,&ch,10); //前面的判断都不成立时 把a[s][m]变回来 但是这里好像有问题 ch一直都是0
a[s][m]=ch;
if (z=9)
{
for(;;)
{
q=rand()%8+1;
s=--q/3;
m=q%3;
if(a[s][m]!='o'&&a[s][m]!='x')
{
a[s][m]='o';
break;
}
}
}
}
//问题结束
win();
if (winner==1)
{
printf("游戏结束 %s胜利",(i%2==0)?"玩家":"电脑");
break;
}
system("cls"); //画图
printf("\n");
printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]);
printf("---+---+---\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char a[3][3]={'1','2','3','4','5','6','7','8','9'}; //九宫格
int k,q,i,z;
char ch;
int s,m; //长和宽
unsigned winner=0;
void drawer() //玩家下子
{
printf("玩家 请输入你所下的位置");
scanf("%d",&k);
s=--k/3;
m=k%3;
for(;;)
{
if(a[s][m]=='o'||a[s][m]=='x')
{
printf("该位置已经被占用 请重新输入\n");
scanf("%d",&k);
s=--k/3;
m=k%3;
}
else
{
a[s][m]='x';
break;
}
}
}
void win() //胜利条件判定
{
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
winner=1;
else
{
for(int L=0;L<=2;L++)
{
if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
winner=1;
}
}
}
int main() //开始位置
{
printf("\n"); //画图
printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]);
printf("---+---+---\n");
srand(unsigned(time(0)));
for(i=0;i<=9;i++)
{
drawer();
win();
if (i>=9)
{
printf("游戏结束 平局");
break;
}
if (winner==1)
{
printf("游戏结束 %s胜利",(i%2==0)?"玩家":"电脑");
break;
}
//判断电脑下子 (问题所在)
i+=1;
for(z=1;z<=9;z++)
{
s=--z/3;
m=z%3;
if(a[s][m]=='o'||a[s][m]=='x') //如果此处有子 跳过
continue;
a[s][m]='o';
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]|| //以下是胜利条件 即下在此处电脑赢
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
break;
else
{
for(int L=0;L<=2;L++)
{
if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
break;
break;
}
}
a[s][m]='x'; //以下是防止玩家胜利的条件
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]||
a[0][2]==a[1][1]&&a[0][2]==a[2][0])
{
a[s][m]='o';
break;
}
else
{
for(int L=0;L<=2;L++)
{
if (a[L][0]==a[L][1]&&a[L][0]==a[L][2]||
a[0][L]==a[1][L]&&a[0][L]==a[2][L])
{
a[s][m]='o';
break;
break;
}
}
}
itoa(z,&ch,10); //前面的判断都不成立时 把a[s][m]变回来 但是这里好像有问题 ch一直都是0
a[s][m]=ch;
if (z=9)
{
for(;;)
{
q=rand()%8+1;
s=--q/3;
m=q%3;
if(a[s][m]!='o'&&a[s][m]!='x')
{
a[s][m]='o';
break;
}
}
}
}
//问题结束
win();
if (winner==1)
{
printf("游戏结束 %s胜利",(i%2==0)?"玩家":"电脑");
break;
}
system("cls"); //画图
printf("\n");
printf(" %c | %c | %c \n",a[0][0],a[0][1],a[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[1][0],a[1][1],a[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c \n",a[2][0],a[2][1],a[2][2]);
printf("---+---+---\n");
}
return 0;
}