#include<graphics.h> #include<conio.h> #include<dos.h> #include<malloc.h> #include<math.h> /**********/ #define PATH "D:\\学习\\turboc2" /*你的TC安装目录*/ #define BK 7 #define DC 8 #define LC 15 #define P1 1 #define P2 4 #define X 41 #define Y 41 #define M 22 #define SX 490 #define SY1 50 #define SY2 107 #define HJ 32 #define TX 410 #define TY 160 /************/ int newmap[M][M] ={ {1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1}, }; /*****************************************************************/ int overmap[M][M] ={ {1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,1,1,0,0,0,1,1,0,0,1,0,0,0,1,0,1,1,1,1, 1}, {1, 1,0,0,1,0,1,0,0,1,0,1,1,0,1,1,0,1,0,0,0, 1}, {1, 1,0,0,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0, 1}, {1, 1,0,1,1,0,1,1,1,1,0,1,0,1,0,1,0,1,1,1,0, 1}, {1, 1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0, 1}, {1, 1,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0, 1}, {1, 0,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,1,1,1,1, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 0,1,1,0,0,1,0,0,0,1,0,1,1,1,1,0,1,1,1,0, 1}, {1, 1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1, 1}, {1, 1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,0,0,1, 1}, {1, 1,0,0,1,0,1,0,0,0,1,0,1,1,1,0,0,1,1,1,0, 1}, {1, 1,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,1,1,0,0, 1}, {1, 1,0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,1,0, 1}, {1, 0,1,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1, 1}, {1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 1}, {1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1}, }; int bmp[20][20]={{0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}, {0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0}, {1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1}, {1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1}, {1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1}, {1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1}, {1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1}, {1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1}, {1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1}, {1,1,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,1}, {1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1,1}, {1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1}, {1,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1}, {1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1}, {1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1}, {1,1,1,0,0,0,1,1,0,0,0,0,1,1,0,0,0,1,1,1}, {0,1,1,1,1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,0}, {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0}}; int map[2][M][M]; int nextx,nexty; int score=3,level=0,dirx=0,diry=1; int bady[400][2]; char * bit[3],*sim; /************/ int getkey(); void edge(int l,int t,int r,int b,int c1,int c2); void init(); void draw(int x,int y,int c); void show(); void close(); void go(); void over(); void add(); void showscore(); /**************/ int getkey() { char ch=0; if(kbhit()) ch=getch(); return(ch); } /************/ void init() { int gdriver=DETECT,gmode; int size,i,j; registerbgidriver(EGAVGA_driver); initgraph(&gdriver,&gmode,PATH); setbkcolor(BK); setfillstyle(11,8); edge(X-9,Y-9,X+568,Y+408,DC,DC); floodfill(1,1,DC); edge(X-9,Y-9,X+568,Y+408,LC,DC); edge(X-1,Y-1,X+400,Y+400,DC,LC); size=imagesize(X+1,Y+1,X+20,Y+20); bit[0]=(char *)malloc(size); if(bit[0]==NULL){printf("\n\nERROR!!");getch();exit(1);} getimage(X+1,Y+1,X+20,Y+20,bit[0]); for(i=0;i<20;i++) for(j=0;j<20;j++) if(bmp[i][j]==1) putpixel(X+1+j,Y+1+i,P1); bit[1]=(char*)malloc(size); if(bit[1]==0){printf("\n\nERROR!!");getch();exit(1);} getimage(X+1,Y+1,X+20,Y+20,bit[1]); for(i=0;i<20;i++) for(j=0;j<20;j++) if(bmp[i][j]==1) putpixel(X+1+j,Y+1+i,P2); bit[2]=(char*)malloc(size); if(bit[2]==0){printf("\n\nERROR!!");getch();exit(1);} getimage(X+1,Y+1,X+20,Y+20,bit[2]); size=imagesize(X+240,Y+107,X+290,Y+122); sim=(char *)malloc(size); if(sim==0){printf("\n\nERROR!!");getch();exit(1);} getimage(X+440,Y+107,X+490,Y+122,sim); if(bit[0]==0||bit[1]==0||bit[2]==0||sim==0) { close(); exit(1); } putimage(X+1,Y+1,bit[0],0); edge(X+TX-3,Y+TY+19,X+TX+150,Y+TY+210,DC,LC); setcolor(LC); outtextxy(X+TX,Y+TY+5, "Control Options:"); outtextxy(X+TX,Y+TY+HJ*1," [P]--Start/Pause"); outtextxy(X+TX,Y+TY+HJ*2," [W]--Up"); outtextxy(X+TX,Y+TY+HJ*3," [S]--Down"); outtextxy(X+TX,Y+TY+HJ*4," [A]--Left"); outtextxy(X+TX,Y+TY+HJ*5," [D]--Right"); outtextxy(X+TX,Y+TY+HJ*6," [ESC]--Quit"); setcolor(DC); outtextxy(X+TX-1,Y+TY+4,"Control Options:"); outtextxy(X+TX-1,Y+TY+HJ*1-1," [P]--Start/Pause"); outtextxy(X+TX-1,Y+TY+HJ*2-1," [W]--Up"); outtextxy(X+TX-1,Y+TY+HJ*3-1," [S]--Down"); outtextxy(X+TX-1,Y+TY+HJ*4-1," [A]--Left"); outtextxy(X+TX-1,Y+TY+HJ*5-1," [D]--Right"); outtextxy(X+TX-1,Y+TY+HJ*6-1," [ESC]--Quit"); outtextxy(X+TX-2,Y+TY+HJ*7," [11#522] Jackin"); showscore(); } /*************/ void edge(int l,int t,int r,int b,int c1,int c2) { int cl=getcolor(); setcolor(c1); line(l,t,r-1,t); line(l,t,l,b-1); setcolor(c2); line(r,t,r,b); line(l,b,r,b); setcolor(cl); } /*************/ void draw(int x,int y,int c) { putimage(X+20*(y-1),Y+(x-1)*20,bit[c],0); } /************/ void show() { int i,j; for(i=1;i<M-1;i++) for(j=1;j<M-1;j++) if(map[1][i][j]!=map[0][i][j]) { map[0][i][j]=map[1][i][j]; draw(i,j,map[1][i][j]); } } /******************/ void close() { int i; for(i=0;i<3;i++) if(bit[i]!=0) free(bit[i]); closegraph(); } /**************/ void new() { int i,j; for(i=0;i<M;i++) for(j=0;j<M;j++) { map[1][i][j]=newmap[i][j]; map[0][i][j]=3; } score=3; dirx=0;diry=1; bady[0][0]=20;bady[0][1]=3; bady[1][0]=20;bady[1][1]=2; bady[2][0]=20;bady[2][1]=1; for(i=0;i<score;i++) map[1][bady[i][0]][bady[i][1]]=1; nextx=rand()%(M-2); nexty=rand()%(M-2); map[1][nextx+1][nexty+1]=2; } /**********/ void newk() { for(;map[1][nextx+1][nexty+1]!=0;) { nextx=rand()%(M-2); nexty=rand()%(M-2); } map[1][nextx+1][nexty+1]=2; show(); } /*************/ void go() { int i; map[1][bady[score-1][0]][bady[score-1][1]]=0; for(i=score-1;i>0;i--) { bady[i][0]=bady[i-1][0]; bady[i][1]=bady[i-1][1]; } bady[0][0]+=dirx; bady[0][1]+=diry; map[1][bady[0][0]][bady[0][1]]=1; } /**************/ void over() { int i,j; for(i=1;i<M-1;i++) { for(j=1;j<M-1;j++) map[1][i][j]=overmap[i][j]; delay(5000); show(); } } /*****************/ void add() { int i; map[1][bady[0][0]+dirx][bady[0][1]+diry]=1; for(i=score;i>0;i--) { bady[i][0]=bady[i-1][0]; bady[i][1]=bady[i-1][1]; } bady[0][0]+=dirx; bady[0][1]+=diry; score++; level=(score-3)/5; } /********************/ void showscore() { char s[20],l[20]; itoa(score-3,s,10); itoa(level,l,10); setcolor(4); outtextxy(X+SX-55,Y+SY1+4,"SCORE"); edge(X+SX-1,Y+SY1-1,X+SX+51,Y+SY1+16,DC,LC); outtextxy(X+SX-55,Y+SY2+4,"LEVEL"); edge(X+SX-1,Y+SY2-1,X+SX+51,Y+SY2+16,DC,LC); putimage(X+SX,Y+SY1,sim,0); putimage(X+SX,Y+SY2,sim,0); outtextxy(X+SX+1,Y+SY1+4,s); outtextxy(X+SX+1,Y+SY2+4,l); } /*******************/ main() { int i,j; char cc,c; init(); start: cc=getkey(); for(;cc!='p'&&cc!='P';) { rand(); if(cc==27)goto end; cc=getkey(); } new(); show(); showscore(); for(;;) { for(i=0,cc=0;i<1500-level*50;i++) { c=getkey(); if(c!=0) cc=c; delay(10); } switch(cc) { case 27: over(); goto end; break; case 'w': case 'W': if(dirx!=1) { dirx=-1; diry=0; } break; case 'a': case 'A': if(diry!=1) { diry=-1; dirx=0; } break; case 's': case 'S': if(dirx!=-1) { dirx=1; diry=0; } break; case 'd': case 'D': if(diry!=-1) { diry=1; dirx=0; } break; case ' ': break; case 'p': case 'P': cc=getkey(); for(;cc!='p'&&cc!='P';) { if(cc==27)goto end; cc=getkey(); } break; default:break; }/*end switch*/ switch(map[1][bady[0][0]+dirx][bady[0][1]+diry]) { case 1: over(); goto start; case 2: add(); showscore(); newk(); break; case 0: go(); break; default:break; } show(); } end: close(); }

评论