正文

TC2.0环境下的贪食蛇!!2004-12-24 17:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jackin0627/34.html

分享到:

#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(); }

阅读(3566) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册