签到

05月08日
尚未签到

共有回帖数 0

    cynthie

    等级:
    #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 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知