C语言程序设计连连看.docx

上传人:b****6 文档编号:4322481 上传时间:2022-11-29 格式:DOCX 页数:16 大小:17.33KB
下载 相关 举报
C语言程序设计连连看.docx_第1页
第1页 / 共16页
C语言程序设计连连看.docx_第2页
第2页 / 共16页
C语言程序设计连连看.docx_第3页
第3页 / 共16页
C语言程序设计连连看.docx_第4页
第4页 / 共16页
C语言程序设计连连看.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

C语言程序设计连连看.docx

《C语言程序设计连连看.docx》由会员分享,可在线阅读,更多相关《C语言程序设计连连看.docx(16页珍藏版)》请在冰豆网上搜索。

C语言程序设计连连看.docx

C语言程序设计连连看

#include

#include

#include

#include

#include

usingnamespacestd;

#include

intmai()//倒计时

{

for(inti=3;i>=0;i--)

{longt=time(NULL);

for(;;)

{

longn=time(NULL);

if(n!

=t)

break;}

system("cls");

cout<<""<

cout<<""<

cout<<"离史上最卡哇依的游戏开始还有**"<

!

!

"<

}return0;

}

voidinit1();

voidprint1();

intexit1();

voidinit2();

voidprint2();

intexit2();

voidinit3();

voidprint3();

intexit3();

voidnear1(inta,intb,inta1,intb1);

charchessman[10][10];

voidmain()//主函数

{time_tstart,end,time;

start=clock();

mai();

intd;

cout<<""<

cout<<""<

cout<<""<

cout<<"****************************************************************"<

cout<<"****************************************************************"<

cout<<"**亲,请选择适合您智商的级别:

[1]低级[2]中级[3]登峰造极**"<

cout<<"****************************************************************"<

cout<<"****************************************************************"<

cout<<""<

cout<<""<

cout<<"研发小组:

QYQ"<

cout<<"请选择:

***-";

cin>>d;

cout<<"-***"<

system("pause");

switch(d)

{

case1:

init1();break;

case2:

init2();break;

case3:

init3();break;

default:

cout<<"你个逗比";

}

intop;

introw,line;

introw2,line2;

do

{if(d==1)

print1();

elseif(d==2)

print2();

elseif(d==3)

print3();

printf("options:

\n");

printf("\t1.select\n");

printf("\t2.restart\n");

printf("\t3.sort\n");

scanf("%d",&op);

if(op==1)

{

printf("不造亲第一个相中了谁呢:

");

scanf("%d%d",&line,&row);

printf("再给他找个伴儿吧,亲:

");

scanf("%d%d",&line2,&row2);

if(chessman[line][row]!

=chessman[line2][row2])

{

printf("有缘无分呐!

\n");

system("pause");

}

elseif(line==line2&&row==row2)

{

printf("有搞错哦,亲!

!

!

\n");

system("pause");

}

elseif(line<=line2)

{

near1(line,row,line2,row2);

}

else

{

near1(line2,row2,line,row);

}

}

if(op==2)

{

}

if(op==3)

{main();}

}while(exit1(),exit2(),exit3());

system("pause");

printf("\n\n\n\t\t哇呀!

你好厉害!

\n");

end=clock();

time=end-start;//这里的时间是计算机内部时间

cout<

"<

system("pause");

cout<<"本次得分:

98分!

继续保持哦!

"<

system("pause");

}

 

voidinit1()//4乘4矩阵

{

inti,j;

inta[4]={0};

srand(time(NULL));

for(i=1;i<4;i++)

for(j=1;j<5;j++)

{

chessman[i][j]=rand()%4+65;

if(chessman[i][j]==65)a[0]++;

if(chessman[i][j]==66)a[1]++;

if(chessman[i][j]==67)a[2]++;

if(chessman[i][j]==68)a[3]++;

}

for(i=0;i<4;i++)

{

if(a[i]%2!

=0)

chessman[4][i+1]=i+65;

else

chessman[4][i+1]=69;

}

}

voidprint1()

{

inti,j;

system("cls");

printf("\t1234\n");

for(i=0;i<5;i++)

{

printf("\t\n\t");

for(j=0;j<5;j++)

{

printf("%4c",chessman[i][j]);

if(j==4&&i!

=0&&i!

=5)

printf("\t%d",i);

}

}

printf("\n\n\n\n");

}

intexit1()

{

inti,j;

for(i=0;i<6;i++)

{

for(j=0;j<6;j++)

if(chessman[i][j]!

=0)

return1;

}

return0;

}

voidinit2()//6乘6矩阵

{

inti,j;

inta[6]={0};

srand(time(NULL));

for(i=1;i<6;i++)

for(j=1;j<7;j++)

{

chessman[i][j]=rand()%6+65;

if(chessman[i][j]==65)a[0]++;

if(chessman[i][j]==66)a[1]++;

if(chessman[i][j]==67)a[2]++;

if(chessman[i][j]==68)a[3]++;

if(chessman[i][j]==69)a[4]++;

if(chessman[i][j]==70)a[5]++;

}

for(i=0;i<6;i++)

{

if(a[i]%2!

=0)

chessman[6][i+1]=i+65;

else

chessman[6][i+1]=71;

}

}

voidprint2()

{

inti,j;

system("cls");

printf("\t123456\n");

for(i=0;i<8;i++)

{

printf("\t\n\t");

for(j=0;j<8;j++)

{

printf("%4c",chessman[i][j]);

if(j==6&&i!

=0&&i!

=7)

printf("\t%d",i);

}

}

printf("\n\n\n\n");

}

intexit2()

{

inti,j;

for(i=0;i<8;i++)

{

for(j=0;j<8;j++)

if(chessman[i][j]!

=0)

return1;

}

return0;

}

voidinit3()//8乘8矩阵

{

inti,j;

inta[8]={0};

srand(time(NULL));

for(i=1;i<8;i++)

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]++;

if(chessman[i][j]==67)a[2]++;

if(chessman[i][j]==68)a[3]++;

if(chessman[i][j]==69)a[4]++;

if(chessman[i][j]==70)a[5]++;

if(chessman[i][j]==71)a[6]++;

if(chessman[i][j]==72)a[7]++;

}

for(i=0;i<8;i++)

{

if(a[i]%2!

=0)

chessman[8][i+1]=i+65;

else

chessman[8][i+1]=73;

}

}

voidprint3()

{

inti,j;

system("cls");

printf("\t12345678\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");

}

intexit3()

{

inti,j;

for(i=0;i<10;i++)

{

for(j=0;j<10;j++)

if(chessman[i][j]!

=0)

return1;

}

return0;

}

 

voidnear1(inta,intb,inta1,intb1)//三种路径

{

intarow[2];

intaline[2];

intbrow[2];

intbline[2];

intstart=0,end=0;//临时两个点

inti,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)a行中有哪些列

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[1]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[1]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++)//列向量上共同sart到end

{

//b1要大于b,否则就交换

如果不交换将使下面的循环出错、//

if(b

{

j=b;//小的赋值到j

i=b1;//大的赋值到i

}

else

{

j=b1;

i=b;

}

///这里节约一个变量

for(n=0;j

{

if(chessman[start][j]==0)//同一行上,所有列都是0

n++;

else

break;

}

if((n==b-b1)&&(n>0))//因为b和b1大小不能确定,所以有两个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]

end=aline[1];

else

end=bline[1];

for(i=start;i<=end;i++)

{

for(j=a,n=0;j

{

if(chessman[j][i]==0)//同一列上所有行都是0

n++;

else

break;

}

if(n==a1-a&&n>0)

{

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;

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1