#include void initialize(); //初始化
void near1(int a,int b,int a1,int b1); //算法
void print_chess(); //打印棋盘
int exit_chess(); //判断是否结束
//全局变量
char chessman[10][10]; //编译系统初始化每个元素为0
void main()
{
int row,line; //row是行号,line是列号
int row2,line2; //row是行号,line是列号
printf("\t\t\t按任意键开始\n");
fflush(stdin);
getch();
initialize(); //初始化棋盘内容
do
{
print_chess();
printf("输入第一个:");
fflush(stdin);
scanf("%d.%d",&line,&row);
printf("输入第二个:");
fflush(stdin);
scanf("%d.%d",&line2,&row2);
if(chessman[line][row]!=chessman[line2][row2])
{
printf("两数不相同!\n"); //两数不同
}
else if(line==line2&&row==row2)
{
printf("错误输入!!!\n"); //输入相同的坐标,提示用户错误
}
else if(line<=line2)
{
near1(line,row,line2,row2); //使用函数处理,第一个点一定在第二个点上方
}
else
{
near1(line2,row2,line,row); //使用函数处理
}
system("pause");
}while(exit_chess());
system("pause");
printf("\n\n\n\t\t恭喜您,您胜利了!\n");
printf("\n\t\t制作人:蒋睿立\n");
printf("\n\t博客:http:\\maidini.blog.163.com");
}
void initialize() //初始化棋盘
{
int i,j; //用于循环计数
int a[8]={0}; //记录哪些字符出现次数不是偶数
srand(time(NULL));
for(i=1;i<8;i++) //这里只随机前8行,留最后一行不打印
for(j=1;j<9;j++)
{
chessman[i][j]=rand()%8+65; //棋盘内容为大写字母A到H
if(chessman[i][j]==65) a[0]++; //记录A的个数
if(chessman[i][j]==66) a[1]++; //记录B的个数
if(chessman[i][j]==67) a[2]++; //记录C的个数
if(chessman[i][j]==68) a[3]++; //记录D的个数
if(chessman[i][j]==69) a[4]++; //记录E的个数
if(chessman[i][j]==70) a[5]++; //记录F的个数
if(chessman[i][j]==71) a[6]++; //记录G的个数
if(chessman[i][j]==72) a[7]++; //记录H的个数
}
for(i=0;i<8;i++)
{
if(a[i]%2!=0) //如果字符的个数是奇数就还需要打印一个
chessman[8][i+1]=i+65;
else //如果前面7行随机的A到H字符恰好是偶数,最后一行全是I字符
chessman[8][i+1]=73;
}
}
void print_chess() //打印棋盘内容
{
int i,j;
system("cls");
printf("\t 1 2 3 4 5 6 7 8 \n");
for(i=0;i<10;i++)
{
printf("\t\n\t");
for(j=0;j<10;j++)
{
printf("%4c",chessman[i][j]);
if(j==9&&i!=0&&i!=9)
printf("\t%d",i);
}
}
printf("\n\n\n\n");
}
int exit_chess() //判断是否满足退出
{
int i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
if(chessman[i][j]!=0)
return 1; //只要有1个棋子不为0,就返回1
}
return 0;
}
void near1(int a,int b,int a1,int b1)
{
int arow[2];
int aline[2];
int brow[2];
int bline[2];
int start=0,end=0; //临时两个点
int i,j,n; //用于循环
for(i=0;i<2;i++) //初始化数组
{
arow[i]=a;
brow[i]=a1;
aline[i]=b;
bline[i]=b1;
}
(a,b) a行中有哪些列
for(i=a+1;i<10;i++)
{
if(chessman[i][b]==0)
arow[1]=i; //arow[1]是A点a行向下向量
else
break;
}
for(i=a-1;i>=0;i--)
{
if(chessman[i][b]==0) //arow[0]是A点a行向上向量
arow[0]=i;
else
break;
}
(a1,b1) a1行中有哪些列
for(i=a1+1;i<10;i++)
{
if(chessman[i][b1]==0) //brow[1]是B点a1行向下向量
brow[1]=i;
else
break;
}
for(i=a1-1;i>=0;i--)
{
if(chessman[i][b1]==0) //brow[0]是B点a1行向上向量
{brow[0]=i;}
else
{break;}
}
//(a,b) b列中有哪些行
for(i=b+1;i<10;i++)
{
if(chessman[a][i]==0) //aline[1]是A点b列向右向量
{aline[1]=i;}
else
{break;}
}
for(i=b-1;i>=0;i--)
{
if(chessman[a][i]==0) //aline[0]是A点b列向左向量
{aline[0]=i;}
else
{break;}
}
//(a1,b1) b1列中有哪些行
for(i=b1+1;i<10;i++)
{
if(chessman[a1][i]==0) //bline[1]是B点b1列向右向量
{bline[1]=i;}
else
{break;}
}
for(i=b1-1;i>=0;i--)
{
if(chessman[a1][i]==0) //bline[0]是B点b1列向左向量
{bline[0]=i;}
else
{break;}
}
//关键算法///
/********************************
情况一
·
(a,b)
·(a1,b1)
*********************************/
/*********************************
情况二
·
(a,b)
·(a1,b1)
**********************************/
/*考虑上下向量*/
if(brow[0]>=arow[0]) //向上方向向量 有共同的列向量
start=brow[0]; //取大的
else
start=arow[0];
if(brow[1]<=arow[1]) //向下方向向量 有共同的列向量
end=brow[1]; //取小的
else
end=arow[1];
for(;start<=end;start++) //列向量上共同点start到end
{
/** b1要大于b,否则就交换
如果不交换将使下面的循环出错*/
if(b0)) //因为b与b1大小不能确定,所有有2个if
chessman[a][b]=chessman[a1][b1]=0;
if((n==b1-b)&&(n>0))
chessman[a][b]=chessman[a1][b1]=0;
}
/*考虑左右向量*/
if(aline[0]>=bline[0]) //向左的向量 有共同的行向量
start=aline[0]; //取大的
else
start=bline[0];
if(aline[1]0) //a1始终大于a
{
chessman[a][b]=chessman[a1][b1]=0;
break;
}
}
/*********************************************************************************
* 同行 或者 同列 ·(a,b)
*
* · · 或者
* (a,b) (a1,b1) ·(a1,b1)
*
*********************************************************************************/
if(a==a1) //同行
{
if((aline[1]>=b1)||(aline[0]<=b1))
chessman[a][b]=chessman[a1][b1]=0;
}
if(b==b1) //同列
{
if(arow[1]>=a1)
chessman[a][b]=chessman[a1][b1]=0;
}
}
连连看python自动处理 连连看编程代码
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
js实现连连看游戏
纯js实现连连看游戏
连连看 js游戏