C语言井字棋人人对战源代码,已经琢磨了半个月的井字棋电脑对战 问题颇多 求解...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这是代码

#include

#include

#include

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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值