#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<math.h>
#define NUM 8
char OutLine[NUM][NUM]={' ',' ',' ',' ',' ',' ',' ',' ',' ','a','a','b','b','c','c',' ',' ','d','d','e','e','f','f',' ',' ','g','g','h','h','i','i',' ',' ','j','j','k','k','l','l',' ',' ','m','m','n','n','o','o',' ',' ','p','p','q','q','r','r',' ',' ',' ',' ',' ',' ',' ',' ',' '};
int count=0;
void Sort(char );
void Print(char );
void Line1(char ,int ,int ,int ,int );
void Line2(char ,int ,int ,int ,int );
void Line3(char ,int ,int ,int ,int );
void Game(char );
void Sort(char OutLine[NUM][NUM])
{
int i,j,newrow=0,newcolumn=0;
int row[8]={0,1,2,3,4,5,6,7};
int column[8]={0,1,2,3,4,5,6,7};
char newLetter;
srand(time(NULL));
for(i=1;i<=6;i++)
{
for(j=1;j<=6;j++)
{
newrow=rand()%6+1;
newcolumn=rand()%6+1;
newLetter=OutLine[row[i]][column[j]];
OutLine[row[i]][column[j]]=OutLine[newrow][newcolumn];
OutLine[newrow][newcolumn]=newLetter;
}
}
}
void Line1(char OutLine[NUM][NUM],int x1,int y1,int x2,int y2)
{
int i=0,j=0,interval=0,block=1,flag=1,rabs,cabs,i1,j1;
cabs=abs(y1-y2);
rabs=abs(x1-x2);
//一条直线水平相连或一条直线垂直相连
if(x1==x2&&cabs==1||y1==y2&&rabs==1)
{
OutLine[x1][y1]=' ';
OutLine[x2][y2]=' ';
count=count+2;
block=0;
if(count==36)
printf("恭喜你,你赢了!");
}
//一条直线水平不相连
if(x1==x2&&cabs!=1)
{
interval=abs(y1-y2)-1;
for(;interval>0;interval--)
{
if(y1<y2&&OutLine[x1][y1+1]==' ')
y1++;
else if(y1>y2&&OutLine[x2][y2+1]==' ')
y2++;
else
{
flag=0;
break;
}
}
if(flag==1)
{
OutLine[x1][y1]=' ';
OutLine[x2][y2]=' ';
count=count+2;
block=0;
if(count==36)
printf("恭喜你,你赢了!");
}
}
//一条直线垂直不相连
if(y1==y2&&rabs!=1)
{
interval=abs(x1-x2)-1;
for(;interval>0;interval--)
{
if(x1<x2&&OutLine[x1+1][y1]==' ')
x1++;
else if(x1>x2&&OutLine[x2+1][y2]==' ')
x2++;
else
{
flag=0;
break;
}
}
if(flag==1)
{
OutLine[x1][y1]=' ';
OutLine[x2][y2]=' ';
count=count+2;
block=0;
if(count==36)
printf("恭喜你,你赢了!");
}
}
}
void Line2(char OutLine[NUM][NUM],int x1,int y1,int x2,int y2)
{
int i=0,j=0,rinterval=0,cinterval=0,block=1,flag=1;
cinterval=abs(y1-y2)-1;
rinterval=abs(x1-x2);
if(y1<y2)
{
for(;cinterval>0;cinterval--)
{
if(x1<x2)
{
for(;rinterval>0;rinterval--)
{
if(OutLine[x2][y1]==' ')
x2--;
else if(OutLine[x1][y2]==' ')
x1++;
else
{
flag=0;
break;
}
}
if(OutLine[x2][y1++]==' ')
y1++;
else if(OutLine[x1][y2--]==' ')
y2--;
else
{
flag=0;
break;
}
}
else if(x1>x2)
{
for(;rinterval>0;rinterval--)
{
if(OutLine[x1][y2]==' ')
x1--;
else if(OutLine[x2][y1]==' ')
x2++;
else
{
flag=0;
break;
}
}
if(OutLine[x1][y2--]==' ')
y2--;
else if(OutLine[x2][y1++]==' ')
y1++;
else
{
flag=0;
break;
}
}
}
}
if(y1>y2)
{
for(;cinterval>0;cinterval--)
{
if(x1>x2)
{
for(;rinterval>0;rinterval--)
{
if(OutLine[x1][y2]==' ')
x1--;
else if(OutLine[x2][y1]==' ')
x2++;
else
{
flag=0;
break;
}
}
if(OutLine[x1][y2++]==' ')
y2++;
else if(OutLine[x2][y1--]==' ')
y1--;
else
{
flag=0;
break;
}
}
else if(x1<x2)
{
for(;rinterval>0;rinterval--)
{
if(OutLine[x2][y1]==' ')
x2--;
else if(OutLine[x1][y2]==' ')
x1++;
else
{
flag=0;
break;
}
}
if(OutLine[x2][y1--]==' ')
y1--;
else if(OutLine[x1][y2++]==' ')
y2++;
else
{
flag=0;
break;
}
}
}
}
if(flag==1)
{
OutLine[x1][y1]=' ';
OutLine[x2][y2]=' ';
count=count+2;
block=0;
if(count==36)
printf("恭喜你,你赢了!");
}
}
void Line3(char OutLine[NUM][NUM],int x1,int y1,int x2,int y2)
{
int i=0,j=0,block=1,flag=1,cinterval=0,rinterval=0;
if(x1==1&&x2==1||x1==6&&x2==6||y1==1&&y2==1||y1==6&&y2==6)
{
OutLine[x1][y1]=' ';
OutLine[x2][y2]=' ';
block=0;
}
else if(x1!=1&&x2!=1&&x1==x2||x1!=6&&x2!=6&&x1==x2)
{
cinterval=abs(y1-y2)+1;
if(y1<y2)
{
for(;cinterval>0;cinterval--)
{
if(OutLine[x1-1][y1]==' ')
y1++;
else if(OutLine[x1+1][y1]==' ')
y1++;
else
{
flag=0;
break;
}
}
}
else if(y1>y2)
{
for(;cinterval>0;cinterval--)
{
if(OutLine[x2-1][y2]==' ')
y2++;
else if(OutLine[x2+1][y2]==' ')
y2++;
else
{
flag=0;
break;
}
}
}
}
else if(y1!=1&&y2!=1&&y1==y2||y1!=6&&y2!=6&&y1==y2)
{
rinterval=abs(x1-x2)+1;
if(x1<x2)
{
for(;rinterval>0;rinterval--)
{
if(OutLine[x1][y1-1]==' ')
x1++;
else if(OutLine[x1][y1+1]==' ')
x1++;
else
{
flag=0;
break;
}
}
}
else if(x1>x2)
{
for(;rinterval>0;rinterval--)
{
if(OutLine[x2][y2-1]==' ')
x2++;
else if(OutLine[x2][y2+1]==' ')
x2++;
else
{
flag=0;
break;
}
}
}
}
if(flag==1)
{
OutLine[x1][y1]=' ';
OutLine[x2][y2]=' ';
count=count+2;
block=0;
if(count==36)
printf("恭喜你,你赢了!");
}
}
void Print(char OutLine[NUM][NUM])
{
int i,j,i1,j1;
printf("**********************Game Start*********************\n\n");
printf("*********************位置指示坐标********************\n");
for(i=1;i<(NUM-1);i++)
{
for(j=1;j<(NUM-1);j++)
{
printf(" <%d,%d>",i,j);
}
printf("\n");
}
printf("*****************************************************\n\n*****************************************************\n");
for(i1=1;i1<(NUM-1);i1++)
{
for(j1=1;j1<(NUM-1);j1++)
{
printf(" %c ",OutLine[i1][j1]);
}
printf("\n");
}
printf("*****************************************************\n\n\n");
}
void Game(char OutLine[NUM][NUM])
{
int x1,y1,x2,y2;
char option;
int flag=1;
Print(OutLine);
printf("***********************OPTIONS***********************\n\n");
printf("**********************a: Select**********************\n**********************b: Sort************************\n**********************c:ReStart**********************\n**********************d:Exit************************\n\n");
printf("请输入你的选择:\n");
option=getch();
switch(option)
{
case 'a':
{
printf("请输入相同字母的坐标:\n");
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
if(x1==x2&&abs(y1-y2)==1||y1==y2&&abs(x1-x2)==1||x1==x2&&abs(y1-y2)!=1||y1==y2&&abs(x1-x2)!=1)
{
Line1(OutLine,x1,y1,x2,y2);
system("cls");
Game(OutLine);
break;
}
else if(x1!=x2&&y1!=y2)
{
Line2(OutLine,x1,y1,x2,y2);
system("cls");
Game(OutLine);
break;
}
else
{
Line3(OutLine,x1,y1,x2,y2);
system("cls");
Game(OutLine);
break;
}
}
case 'b':
{
Sort(OutLine);
Print(OutLine);
system("cls");
}
case 'c':
{
system("cls");
Game(OutLine);
}
case 'd':exit(0);
}
}
void main()
{
Game(OutLine);
}