共有回帖数 0 个
-
#includestdio.h
#includestdlib.h
#includegraphics.h
#includebios.h
#includeconio.h
#include time.h
#include ctype.h
#define red 4
#define blue 1
#define magenta 5
#define BACK 0
#define SPACE 0x3920 /*变换*/
#define DOWN 0x5000
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define ESC 0x011b
struct node
{ int l,t,r,b;
int color;
}q1[27][14];
struct list
{ int x1,y1;
int x2,y2;
int x3,y3;
int x4,y4;
int relation;
}q2[20];
int mark,mark1,mark2,change=1;
int a[27]={0};
int dx,dy; /*水平,纵向平移量*/
int key;
int score=0;
int levle;
void bgegin() /*19种方快*/
{ q2[1].x1=4; q2[1].x2=4; q2[1].x3=4; q2[1].x4=4; q2[2].x1=4; q2[2].x2=3; q2[2].x3=2; q2[2].x4=1; /*竖*/
q2[1].y1=5; q2[1].y2=6; q2[1].y3=7; q2[1].y4=8; q2[2].y1=6; q2[2].y2=6; q2[2].y3=6; q2[2].y4=6;
q2[1].relation=2; q2[2].relation=1;
q2[3].x1=4; q2[3].x2=4; q2[3].x3=3; q2[3].x4=3; /*方*/
q2[3].y1=6; q2[3].y2=7; q2[3].y3=6; q2[3].y4=7;
q2[3].relation=3;
q2[4].x1=4; q2[4].x2=3; q2[4].x3=3; q2[4].x4=2; q2[5].x1=3; q2[5].x2=3;q2[5].x3=4; q2[5].x4=4; /* 右Z*/
q2[4].y1=6; q2[4].y2=6; q2[4].y3=7; q2[4].y4=7; q2[5].y1=6; q2[5].y2=7;q2[5].y3=7; q2[5].y4=8;
q2[4].relation=5; q2[5].relation=4;
q2[6].x1=4;q2[6].x2=4;q2[6].x3=3; q2[6].x4=3; q2[7].x1=4; q2[7].x2=3;q2[7].x3=3; q2[7].x4=2; /* 左Z*/
q2[6].y1=5;q2[6].y2=6;q2[6].y3=6; q2[6].y4=7; q2[7].y1=6; q2[7].y2=6;q2[7].y3=5; q2[7].y4=5;
q2[6].relation=7; q2[7].relation=6;
q2[8].x1=4; q2[8].x2=3; q2[8].x3=2; q2[8].x4=2; q2[9].x1=3; q2[9].x2=3; q2[9].x3=3; q2[9].x4=4; /*F*/
q2[8].y1=6; q2[8].y2=6; q2[8].y3=6; q2[8].y4=7; q2[9].y1=5; q2[9].y2=6; q2[9].y3=7; q2[9].y4=7;
q2[10].x1=4; q2[10].x2=4; q2[10].x3=3; q2[10].x4=2; q2[11].x1=4; q2[11].x2=3; q2[11].x3=4; q2[11].x4=4;
q2[10].y1=5; q2[10].y2=6; q2[10].y3=6; q2[10].y4=6; q2[11].y1=5; q2[11].y2=5; q2[11].y3=6; q2[11].y4=7;
q2[8].relation=9;q2[9].relation=10;q2[10].relation=11;q2[11].relation=8;
q2[12].x1=2;q2[12].x2=2;q2[12].x3=3; q2[12].x4=4; q2[13].x1=4;q2[13].x2=4;q2[13].x3=4; q2[13].x4=3; /*左F*/
q2[12].y1=5;q2[12].y2=6;q2[12].y3=6; q2[12].y4=6; q2[13].y1=5;q2[13].y2=6;q2[13].y3=7; q2[13].y4=7;
q2[14].x1=4;q2[14].x2=4;q2[14].x3=3; q2[14].x4=2; q2[15].x1=4;q2[15].x2=3;q2[15].x3=3; q2[15].x4=3;
q2[14].y1=5;q2[14].y2=6;q2[14].y3=5; q2[14].y4=5; q2[15].y1=5;q2[15].y2=5;q2[15].y3=6; q2[15].y4=7;
q2[12].relation=13;q2[13].relation=14;q2[14].relation=15;q2[15].relation=12;
q2[16].x1=4;q2[16].x2=4;q2[16].x3=4; q2[16].x4=3; q2[17].x1=4;q2[17].x2=3;q2[17].x3=3; q2[17].x4=2; /*卡*/
q2[16].y1=5;q2[16].y2=6;q2[16].y3=7; q2[16].y4=6; q2[17].y1=6;q2[17].y2=6;q2[17].y3=7; q2[17].y4=6;
q2[18].x1=4;q2[18].x2=3;q2[18].x3=3; q2[18].x4=3; q2[19].x1=4;q2[19].x2=3;q2[19].x3=3; q2[19].x4=2;
q2[18].y1=6;q2[18].y2=5;q2[18].y3=6; q2[18].y4=7; q2[19].y1=6;q2[19].y2=6;q2[19].y3=5; q2[19].y4=6;
q2[16].relation=17;q2[17].relation=18;q2[18].relation=19;q2[19].relation=16;
}
void drawmap() /*画图*/
{ int i,j;
setbkcolor(BLACK);
for(i=0;i=13;i++)
{for(j=0;j=26;j++)
{ if(i==0||i==12||j==0||j==26||i==13)
q1[j].color=red;
else
{setfillstyle(1,blue);
q1[j].color=blue;
}
q1[j].l=83+(i)*17; q1[j].t=5+(j)*17;
q1[j].r=98+(i)*17; q1[j].b=20+(j)*17;
bar(q1[j].l,q1[j].t,q1[j].r,q1[j].b );
if(i==0||i==12||j==0||j==26||i==13)
Draw3dRect(q1[j].l,q1[j].t,q1[j].r,q1[j].b );
if(j4)
{setfillstyle(1,0);
bar(q1[j].l,q1[j].t,q1[j].r,q1[j].b );
}
if(j==4)
Draw3dRect(q1[j].l,q1[j].t,q1[j].r,q1[j].b );
if(i==13)
{setfillstyle(1,0);
bar(q1[j].l,q1[j].t,q1[j].r,q1[j].b );
}
}
}
for(i=1;i=4;i++)
{for(j=1;j=4;j++)
{setfillstyle(1,blue);
bar( 304+(i-1)*17,90+(j-1)*17,319+(i-1)*17,105+(j-1)*17);
if(i==1||i==2||i==3||i==4)
if(j==1)
Draw3dRect( 304+(i-1)*17,90+(j-2)*17,319+(i-1)*17,105+(j-2)*17);
if(i==4)
{ if(j==1)
Draw3dRect( 304+(i)*17,90+(j-2)*17,319+(i)*17,105+(j-2)*17);
Draw3dRect( 304+(i)*17,90+(j-1)*17,319+(i)*17,105+(j-1)*17);
if(j!=1)
Draw3dRect( 304+(i)*17,90+(j-1)*17,319+(i)*17,105+(j-1)*17);
}
}
}
}
void rands() /*随机产生方快*/
{if(mark!=0)
{
setfillstyle(1,blue);
bar(q1[q2[mark].x1][q2[mark].y1].l+8*17,q1[q2[mark].x1][q2[mark].y1].t+4*17,q1[q2[mark].x1][q2[mark].y1].r+8*17,q1[q2[mark].x1][q2[mark].y1].b+4*17 );
bar(q1[q2[mark].x2][q2[mark].y2].l+8*17,q1[q2[mark].x2][q2[mark].y2].t+4*17,q1[q2[mark].x2][q2[mark].y2].r+8*17,q1[q2[mark].x2][q2[mark].y2].b+4*17 );
bar(q1[q2[mark].x3][q2[mark].y3].l+8*17,q1[q2[mark].x3][q2[mark].y3].t+4*17,q1[q2[mark].x3][q2[mark].y3].r+8*17,q1[q2[mark].x3][q2[mark].y3].b+4*17 );
bar(q1[q2[mark].x4][q2[mark].y4].l+8*17,q1[q2[mark].x4][q2[mark].y4].t+4*17,q1[q2[mark].x4][q2[mark].y4].r+8*17,q1[q2[mark].x4][q2[mark].y4].b+4*17);
}
switch(random(20))
{ case 1: mark=1; break;
case 2: mark=2; break;
case 3: mark=3; break;
case 4: mark=4; break;
case 5: mark=5; break;
case 6: mark=6; break;
case 7: mark=7; break;
case 8: mark=8; break;
case 9: mark=9; break;
case 10: mark=10; break;
case 11: mark=11; break;
case 12: mark=12; break;
case 13: mark=13; break;
case 14: mark=14; break;
case 15: mark=15; break;
case 16: mark=16; break;
case 17: mark=17; break;
case 18: mark=18; break;
case 19: mark=19; break;
default: mark=2; break;
}
setfillstyle(1,magenta);
bar(q1[q2[mark].x1][q2[mark].y1].l+8*17,q1[q2[mark].x1][q2[mark].y1].t+4*17,q1[q2[mark].x1][q2[mark].y1].r+8*17,q1[q2[mark].x1][q2[mark].y1].b+4*17 );
bar(q1[q2[mark].x2][q2[mark].y2].l+8*17,q1[q2[mark].x2][q2[mark].y2].t+4*17,q1[q2[mark].x2][q2[mark].y2].r+8*17,q1[q2[mark].x2][q2[mark].y2].b+4*17 );
bar(q1[q2[mark].x3][q2[mark].y3].l+8*17,q1[q2[mark].x3][q2[mark].y3].t+4*17,q1[q2[mark].x3][q2[mark].y3].r+8*17,q1[q2[mark].x3][q2[mark].y3].b+4*17 );
bar(q1[q2[mark].x4][q2[mark].y4].l+8*17,q1[q2[mark].x4][q2[mark].y4].t+4*17,q1[q2[mark].x4][q2[mark].y4].r+8*17,q1[q2[mark].x4][q2[mark].y4].b+4*17);
}
int downdirection(int d, int b)
{ int i,j,c,num=0;
char buffer[20];
if(q1[q2[mark1].x1+d][q2[mark1].y1+b].color==red||q1[q2[mark1].x2+d][q2[mark1].y2+b].color==red||q1[q2[mark1].x3+d][q2[mark1].y3+b].color==red||q1[q2[mark1].x4+d][q2[mark1].y4+b].color==red)
{ q1[q2[mark1].x1+dx-1][q2[mark1].y1+b].color=red;q1[q2[mark1].x2+dx-1][q2[mark1].y2+b].color=red;
q1[q2[mark1].x3+dx-1][q2[mark1].y3+b].color=red;q1[q2[mark1].x4+dx-1][q2[mark1].y4+b].color=red;
a[q2[mark1].x1+d-1]++; a[q2[mark1].x2+d-1]++;
a[q2[mark1].x3+d-1]++; a[q2[mark1].x4+d-1]++; /*所在的层加一*/
for(i=25;i=4;i--)
{ if(a[4]!=0) exit(0);
if(a==11) /*去一层*/
{ for(j=1;j=11;j++)
{ setfillstyle(1,blue);
bar(q1[j].l,q1[j].t,q1[j].r,q1[j].b);
q1[j].color=blue;
a--;
c=i-1; delay(5000000);
}
num++;
for(;c=5;c--) /*下移*/
for(j=1;j=11;j++)
{ if(q1[c][j].color==red)
{ setfillstyle(1,blue);
bar(q1[c][j].l,q1[c][j].t,q1[c][j].r,q1[c][j].b);
q1[c][j].color=blue;
setfillstyle(1,magenta-(levle-1));
bar(q1[c+1][j].l,q1[c+1][j].t,q1[c+1][j].r,q1[c+1][j].b);
q1[c+1][j].color=red;
a[c+1]++;
}
a[c]=0;
}
i++;
}
}
if(num==1) score=score+10; /*得分*/
if(num==2) score=score+30;
if(num==3) score=score+50;
if(num==4) score=score+70;
gotoxy(46,13);
setfillstyle(1,0);
bar(353,193,394,207 );
sprintf(buffer,"0%d",score);
setcolor(LIGHTGREEN);
outtextxy(355,196,buffer);
return(0);
}
else
{
return(1);
}
}
int appear1(int d ,int b,int mark,int color)
{ setfillstyle(1,color);
if(q2[mark].x1+d4)
bar(q1[q2[mark].x1+d][q2[mark].y1+b].l,q1[q2[mark].x1+d][q2[mark].y1+b].t,q1[q2[mark].x1+d][q2[mark].y1+b].r,q1[q2[mark].x1+d][q2[mark].y1+b].b );
if(q2[mark].x2+d4)
bar(q1[q2[mark].x2+d][q2[mark].y2+b].l,q1[q2[mark].x2+d][q2[mark].y2+b].t,q1[q2[mark].x2+d][q2[mark].y2+b].r,q1[q2[mark].x2+d][q2[mark].y2+b].b );
if(q2[mark].x3+d4)
bar(q1[q2[mark].x3+d][q2[mark].y3+b].l,q1[q2[mark].x3+d][q2[mark].y3+b].t,q1[q2[mark].x3+d][q2[mark].y3+b].r,q1[q2[mark].x3+d][q2[mark].y3+b].b );
if(q2[mark].x4+d4)
bar(q1[q2[mark].x4+d][q2[mark].y4+b].l,q1[q2[mark].x4+d][q2[mark].y4+b].t,q1[q2[mark].x4+d][q2[mark].y4+b].r,q1[q2[mark].x4+d][q2[mark].y4+b].b );
}
void outtexts()
{Draw3dRect(304,310,482,462);
setcolor(MAGENTA);
outtextxy(306,315,"Space :Chang");
outtextxy(306,335,"ELSE KEY:Pause/Start");
outtextxy(306,355,"ESC :Exit");
outtextxy(306,375,"LEFT ");
outtextxy(306,395,"RIGHT");
outtextxy(306,415,"UP ");
outtextxy(306,435,"DOWN ");
outtextxy(306,454,"THE FOUR KEYES TO MOVE");
setcolor(BACK);
Draw3dRect(304,165,400,183);
outtextxy (305,170,"Level:");
Draw3dRect(304,191,400,209);
outtextxy (306,197,"Score:");
setcolor(LIGHTGREEN);
outtextxy(30,40," Welcome to play game and Please any key begin !");
}
int Draw3dRect(int l,int t,int r,int b)
{ int oldcolor=getcolor();
setfillstyle(1,LIGHTGRAY);
bar(l,t,r,b);
setcolor(WHITE);
line( l, t, r, t);
line( l, t, l, b);
setcolor(BACK);
line( l, b, r, b);
line( r, t, r, b);
setcolor(oldcolor);
}
main()
{int gdrive=VGA; /*图形驱动器(gdriver) 图形模式(gmode) */
int gmode=VGAHI;
char str[10];
initgraph(&gdrive,&gmode,"c:\tc");
randomize();
bgegin();
drawmap();
outtexts();
rands();
getch();
for(levle=1;levle=3;levle++)
{ gotoxy(46,12);
setfillstyle(1,0);
bar(353,166,394,180 );
sprintf(str,"0%d",levle);
setcolor(LIGHTGREEN);
outtextxy(355,170,str);
while(1)
{if(score==1000||score==2000||score==3000)
break;
if(change==1)
{
dx=dy=0;
mark1=mark;
change=0;
rands();
}
while(bioskey(1)!=0)
{
key=bioskey(0);
switch(key)
{case DOWN : dx++;
if(q1[q2[mark1].x1+dx][q2[mark1].y1+dy].color==red||q1[q2[mark1].x2+dx][q2[mark1].y2+dy].color==red||q1[q2[mark1].x3+dx][q2[mark1].y3+dy].color==red||q1[q2[mark1].x4+dx][q2[mark1].y4+dy].color==red)
dx--;
else
{
appear1(dx-1,dy,mark1,blue);
appear1(dx,dy,mark1,magenta-(levle-1));
}
break;
case LEFT: dy--;
if(q1[q2[mark1].x1+dx][q2[mark1].y1+dy].color==red||q1[q2[mark1].x2+dx][q2[mark1].y2+dy].color==red||q1[q2[mark1].x3+dx][q2[mark1].y3+dy].color==red||q1[q2[mark1].x4+dx][q2[mark1].y4+dy].color==red)
dy++;
else
{
appear1(dx,dy+1,mark1,blue);
appear1(dx,dy,mark1,magenta-(levle-1));
}
break;
case RIGHT: dy++;
if(q1[q2[mark1].x1+dx][q2[mark1].y1+dy].color==red||q1[q2[mark1].x2+dx][q2[mark1].y2+dy].color==red||q1[q2[mark1].x3+dx][q2[mark1].y3+dy].color==red||q1[q2[mark1].x4+dx][q2[mark1].y4+dy].color==red)
dy--;
else
{
appear1(dx,dy-1,mark1,blue);
appear1(dx,dy,mark1,magenta-(levle-1));
}
break;
case SPACE: mark2=mark1; /*变向*/
mark1=q2[mark1].relation;
if(q1[q2[mark1].x1+dx][q2[mark1].y1+dy].color==red||q1[q2[mark1].x2+dx][q2[mark1].y2+dy].color==red||q1[q2[mark1].x3+dx][q2[mark1].y3+dy].color==red||q1[q2[mark1].x4+dx][q2[mark1].y4+dy].color==red)
mark1=mark2;
else
{appear1(dx,dy,mark2,blue);
appear1(dx,dy,mark1,magenta-(levle-1));
}
break;
case ESC: exit(0);
default : getch(); /*暂停*/
}
}
do
{
delay(5500000);
dx++;
if(downdirection(dx,dy)==0)
{
change=1;
break;
}
if(downdirection(dx,dy)==1)
{appear1(dx-1,dy,mark1,blue);
appear1(dx,dy,mark1,magenta-(levle-1));
}
} while(bioskey(1)==0);
}
}
closegraph();
}
还不错,
就是没有准确定时,不然每个人的机器速度就不一样,小小不足;
还有就是按向下键时,很别扭.
这是我改的地方:
int gdrive=VGA; /*图形驱动器(gdriver) 图形模式(gmode) */
int gmode=VGAHI,frequency=11,save,DownFlag;
char str[10];
clock_t start, end;
............
switch(key)
{
case DOWN : frequency=1;DownFlag=1;break;
............
do
{
start = clock();
dx++;
if(downdirection(dx,dy)==0)
{
change=1;
break;
}
if(downdirection(dx,dy)==1)
{appear1(dx-1,dy,mark1,blue);
appear1(dx,dy,mark1,magenta-(levle-1));
}
end = clock();
if(end-startfrequency) {
while(end-startfrequency) {
delay(1);
end=clock();
}
}
} while(bioskey(1)==0);
if(DownFlag) {frequency=save;DownFlag=0;}
改了就好玩多��
楼主 2016-01-28 14:27 回复
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈 |
关于直线 |
版权声明 |
会员须知