由于技术有限,PVC只做到了防守以及四颗子且无遮挡自动补全五颗的功能,欢迎各位大佬指正与完善,下面是原码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int qp_print(int arr[16][16]);
int chuzhi(int arr[16][16]);
int game(int arr[16][16]);
int people(int arr[16][16]);
int win(int arr[16][16],int y,int b);
int heng(int arr[16][16],int flag,int h);
int panduan(int arr[16][16],int flag)
{
int i,j,a=0;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
if(arr[i][j]==flag)
a++;
return a;
}
int chuzhi(int arr[16][16])
{
int i,j;
for(i=0;i<15;i++)
for(j=0;j<16;j++)
arr[i][j]=0;
}
int people(int arr[16][16])
{
int i=1,j=1,a=1,b=1,flag;
while(b)
{
x:
printf("\nif you want to quit,please input '0'\n");
printf("\nuser%d:\n",a?1:2);
scanf("%d-%d",&i,&j);
system("clear");
if(i==0)
break;
else if(arr[i-1][j-1]==1||arr[i-1][j-1]==2)
{
qp_print(arr);
printf("\ninput error,this place is inputed! pleas input agin:\n");
goto x;
}
else if(i>0&&j>0&&i<16&&j<16)
{
arr[i-1][j-1]=a?1:2;
a=!a;
qp_print(arr);
flag=win(arr,5,8);
if(flag!=0)
{
printf("\nuser%d win!\n",flag);
b=0;
}
}
else
{
qp_print(arr);
printf("\ninput error,no this place! pleas input agin:\n");
goto x;
}
}
chuzhi(arr);
return 0;
}
int shu(int arr[16][16],int flag, int h)
{
int i,j,a,b=0;
for(i=0;i<=15-h;i++)
for(j=0;j<15;j++)
if(arr[i][j]==flag)
{
b=0;
for(a=1;a<h;a++)
if(arr[i][j]==arr[i+a][j])
b++;
if(b==h-1)
return flag;
}
return 0;
}
int heng(int arr[16][16],int flag,int h)
{
int i,j,a,b=0;
for(i=0;i<15;i++)
for(j=0;j<=15-h;j++)
if(arr[i][j]==flag)
{
b=0;
for(a=1;a<h;a++)
if(arr[i][j]==arr[i][j+a])
b++;
if(b==h-1)
return flag;
}
return 0;
}
int fanxie(int arr[16][16],int flag,int h)
{
int i,j,a,b=0;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
if((arr[i][j]==flag)&&(i+j-h+1>=0)&&(i+j+h-30<=0))
{
b=0;
for(a=1;a<h;a++)
if(arr[i][j]==arr[i+a][j-a])
b++;
if(b==h-1)
return flag;
}
return 0;
}
int xie(int arr[16][16],int flag,int h)
{
int i,j,a,b=0;
for(i=0;i<15;i++)
for(j=0;j<15;j++)
if((arr[i][j]==flag)&&(i-j+15-h>=0)&&(i-j+h-15<=0))
{
b=0;
for(a=1;a<h;a++)
if(arr[i][j]==arr[i+a][j+a])
b++;
if(b==h-1)
return flag;
}
return 0;
}
int win(int arr[16][16],int y,int b)
{
int p[8];
int a;
p[0]=shu(arr,1,y);
p[1]=heng(arr,1,y);
p[2]=xie(arr,1,y);
p[3]=fanxie(arr,1,y);
p[4]=shu(arr,2,y);
p[5]=heng(arr,2,y);
p[6]=fanxie(arr,2,y);
p[7]=fanxie(arr,2,y);
for(a=0;a<b;a++)
if(p[a]!=0)
return p[a];
if(a=b)
return 0;
}
int wink(int arr[16][16],int y)
{
int q[4];
int a;
q[0]=shu(arr,2,y);
q[1]=heng(arr,2,y);
q[2]=fanxie(arr,2,y);
q[3]=fanxie(arr,2,y);
for(a=0;a<4;a++)
if(q[a]!=0)
return q[a];
if(a=4)
return 0;
}
int qp_print(int arr[16][16])
{
int i,j,a;
printf(" ");
for(i=0;i<15;i++)
printf(" %x",i+1);
printf("\n\n");
for(i=0;i<15;i++)
{
printf("%x ",i+1);
for(j=0;j<15;j++)
printf("%d ",arr[i][j]);
printf("\n");
}
return 0;
}
int attack(int arr[16][16],int flag)
{
int i=0,j,m,n,a=1;
while(a)
{
for(m=0;m<15;m++)
for(n=0;n<15;n++)
if(arr[m][n]==0)
{
arr[m][n]=2;
arr[m][n]=(wink(arr,flag+1)==2)?2:0;
if(arr[m][n]!=0)
{
a=0;
return 1;
}
}
return 0;
}
}
int AIthink(int arr[16][16],int flag)
{
int i=0,a=1,m,n,c,d;
while(a)
{
if(flag==0)
break;
for(m=0;m<15;m++)
for(n=0;n<15;n++)
if(arr[m][n]==0)
{
arr[m][n]=1;
arr[m][n]=win(arr,flag+1,4)?2:0;
if(arr[m][n]==2)
{
a=0;
return 1;
}
}
if(m==15)
flag--;
}
return 0;
}
int AI(int arr[16][16])
{
int a=1,b=0,m,n,i=1;
system("clear");
if((wink(arr,4)==2)&&attack(arr,4));
else
AIthink(arr,4);
}
int computer(int arr[16][16])
{
int i=1,j=1,a=1,b=1,flag;
while(b)
{
x:
printf("\nif you want to quit,please input '0'\n");
if(a)
{
printf("\nuser:\n");
scanf("%d-%d",&i,&j);
system("clear");
if(i==0)
break;
else if(arr[i-1][j-1]==1||arr[i-1][j-1]==2)
{
qp_print(arr);
printf("\ninput error,this place is inputed! pleas input agin:\n");
goto x;
}
else if(i>0&&j>0&&i<16&&j<16)
{
arr[i-1][j-1]=1;
qp_print(arr);
flag=win(arr,5,8);
if(flag!=0)
{
printf("\nuser%d win!\n",flag);
b=0;
}
a=!a;
}
else
{
qp_print(arr);
printf("\ninput error,no this place! pleas input agin:\n");
goto x;
}
}
else
{
AI(arr);
qp_print(arr);
flag=win(arr,5,8);
if(flag!=0)
{
printf("\nuser%d win!\n",flag);
b=0;
}
a=!a;
}
}
chuzhi(arr);
return 0;
}
int game(int arr[16][16])
{
int i,j,a=1,b;
while(a)
{
printf("\nplease choose 1-3:\n");
printf("\n1:people VS people\n2:people VS computer\n3:exit\n");
scanf("%d",&b);
if(b>3||b<1)
{
printf("input error! please input agin:\n");
scanf("%d",&b);
}
switch(b)
{
case 1:
{
system("clear");
people(arr);
break;
}
case 2:
{
system("clear");
printf("\nyou--user1\ncomputer--user2\n");
computer(arr);
break;
}
case 3:
a=0;
}
}
return 0;
}
int main(void)
{
int arr[16][16];
system("clear");
srand(time(NULL));
chuzhi(arr);
game(arr);
return 0;
}
|