签到

06月21日
尚未签到

共有回帖数 0

    空城旧事

    等级:
    /*-----------------俄罗斯方块C语言版 V0.12beta---------------*/
    //V0.1 程序大致成型 发现一些bug
    //V0.11 修复部分bug 优化代码 加入下落 加入欢迎界面
    //V0.12b 加入插砖块代码 有待测试
    #include stdio.h
    #include windows.h
    #include stdlib.h
    #include time.h
    #include conio.h
    int r,p,q=0,score=0,speed=25;
    int static b[20][10];
    int static block[7][3][2]
    ={{-1,0,0,-1,1,-1},
    {-1,-1,0,-1,1,0},
    {-1,0,-1,1,1,0},
    {-1,-1,-1,0,1,0},
    {0,-1,1,0,1,-1},
    {-2,0,-1,0,1,0},
    {0,-1,0,1,-1,0}};
    void Display(void);
    void Block_Random(void);
    void GotoXY(int x, int y);
    void Fill_Block(void);
    void Clean_Block(void);
    void Move_Left(void);
    void Move_Right(void);
    void Move_Down(void);
    void Fast_Down(void);
    void End(void);
    void Check_Block(void);
    void Check_Line(void);
    void Clean_Line(int);
    void Change_Block(void);
    void Swap(int&,int&);
    void Welcome(void);
    void Pause(void);
    /*----------------------------------------*/
    int main(void)
    {int i,j,k;
    char c;
    p=1;
    for(i=0;i20;i++)
    for(j=0;j10;j++)
    b[j]=0;
    Block_Random();
    Welcome();
    Display();
    while(1)
    {
    for(k=0;k20;k++)
    {
    if(kbhit())
    {c=getch();
    switch©
    {case 'a':case '4':Move_Left();break;
    case 'd':case '6':Move_Right();break;
    case 'w':case '8':Clean_Block();Change_Block();Display();break;
    case 's':case '5':Fast_Down();break;
    case 'x':case '2':Move_Down();break;
    case 'p':Pause();break;
    case 'q':{GotoXY(1,24);printf("Game Over");
    GotoXY(1,25);printf("Press any key to ESC...");
    c=getch();
    exit(1);};break;
    }}

    Sleep(speed);}
    Move_Down();
    }


    return 0;}
    /*----------------------------------------*/
    void Display()
    {int i,j;
    Fill_Block();
    GotoXY(1,1);
    for(i=0;i20;i++)
    {printf("■");
    for(j=0;j10;j++)
    {switch(b[j])
    {case 0:printf("  ");break;
    case 1:printf("□");break;
    case 2:printf("■");break;}}
    printf("■n");}
    for(i=0;i12;i++)
    printf("■");
    GotoXY(1,22);printf("SCORE:%d",score);
    GotoXY(1,23);printf("LEVEL=%d",score/100);
    }
    /*----------------------------------------*/
    void GotoXY(int x, int y) {  
    COORD c;  
    c.X = x-1;  
    c.Y = y-1;  
    SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);  
    }  
    /*----------------------------------------*/
    void Block_Random()
    {
    srand((unsigned)time(NULL));  
    int k,rr,i;
    k=rand()%7;rr=rand()%4;
    r=k;
    for (i=0;i=rr;i++)
    Change_Block();
    }
    /*----------------------------------------*/
    void Fill_Block()
    {int i,x,y;
    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    if(b[x+p][5+y+q]!=2) b[x+p][5+y+q]=1; else End();
    if(5+y+q9) Move_Left();
    if(5+y+q0) Move_Right();
    }
    if(b[p][5+q]!=2) b[p][5+q]=1; else End();
    }
    /*----------------------------------------*/
    void Clean_Block(void)
    {int i,x,y;
    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    b[x+p][5+y+q]=0;
    }
    b[p][5+q]=0;
    }

    /*----------------------------------------*/
    void Move_Left(void)
    {if(p==0) return;
    int i,x,y;
    for(i=0;i20;i++)
    if(b[0]==1) return;
    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    if(b[x+p][4+y+q]==2) return;}
    Clean_Block();
    q--;
    Fill_Block();
    Display();
    }
    /*----------------------------------------*/
    void Move_Right(void)
    {if(p==0) return;
    int i,x,y;
    for(i=0;i20;i++)
    if(b[9]==1) return;
    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    if(b[x+p][6+y+q]==2) return;}
    Clean_Block();
    q++;
    Fill_Block();
    Display();
    }
    /*----------------------------------------*/
    void Move_Down(void)
    {
    Clean_Block();
    p++;
    Display();
    Check_Block();
    }
    /*----------------------------------------*/
    void End()
    {char c=0;
    int i,j,x,y;
    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    b[x+p][5+y+q]=2;
    }
    b[p][5+q]=2;
    GotoXY(1,1);
    for(i=0;i20;i++)
    {printf("■");
    for(j=0;j10;j++)
    {switch(b[j])
    {case 0:printf("  ");break;
    case 1:printf("□");break;
    case 2:printf("■");break;}}
    printf("■n");}
    for(i=0;i12;i++)
    printf("■");
    GotoXY(1,22);printf("SCORE:%d",score);
    GotoXY(1,23);printf("LEVEL=%d",score/100);
    //Display();
    GotoXY(1,24);printf("Game Over");
    GotoXY(1,25);printf("Press Q to ESC...");
    do
    {c=getch();}
    while(c!='q');
    exit(1);
    }
    /*----------------------------------------*/
    void Check_Block()
    {int i,x,y,k;
    char c;
    Display();
    for(i=0;i10;i++)
    if(b[0]==1&&b[1]==2) End();

    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    if(b[x+p+1][5+y+q]==2||b[p+1][5+q]==2||x+p==19)

    {

    /*-----------------v0.12b-----------------------*/
    for(k=0;k10;k++)
    {
    if(kbhit())
    {c=getch();
    switch©
    {case 'a':case '4':Move_Left();break;
    case 'd':case '6':Move_Right();break;
    case 'w':case '8':Clean_Block();Change_Block();Display();break;
    case 'p':Pause();break;
    case 'q':{GotoXY(1,24);printf("Game Over");
    GotoXY(1,25);printf("Press any key to ESC...");
    c=getch();
    exit(1);};break;
    }}

    Sleep(5);}
    /*-----------------v0.12b-----------------------*/
    if(!(b[x+p+1][5+y+q]==2||b[p+1][5+q]==2||x+p==19)) Check_Block();
    for(i=0;i3;i++)
    {x=block[r][0];
    y=block[r][1];
    b[x+p][5+y+q]=2;
    }
    b[p][5+q]=2;Check_Line();Block_Random();p=0;q=0;Fill_Block();Check_Block();Display();}
    }
    }
    /*----------------------------------------*/
    void Check_Line()
    {int i,j,s=0,t=0;
    for(i=0;i20;i++)
    {s=0;
    for(j=0;j10;j++)

    s+=b[j];

    if (s==20) {s=0;Clean_Line(i);t++;}
    }
    switch (t)
    {case 1:score++;break;
    case 2:score+=3;break;
    case 3:score+=5;break;
    case 4:score+=8;break;
    }
    switch(score/100)
    {case 0:speed=25;break;
    case 1:speed=20;break;
    case 2:speed=17;break;
    case 3:speed=15;break;
    case 4:speed=12;break;
    case 5:speed=10;break;
    case 6:speed=7;break;
    case 7:speed=5;break;
    case 8:speed=2;break;
    case 9:{speed=0;break;}
    }
    }

    /*----------------------------------------*/
    void Clean_Line(int l)
    {int i,j;
    for(i=l-1;i=0;i--)
    for(j=0;j10;j++)
    b[i+1][j]=b[j];
    for(i=0;i10;i++)
    b[0][j]=0;
    }

    /*----------------------------------------*/

    void Change_Block(void)
    {int i,yy;
    if (r==4) return;


    for(i=0;i3;i++)
    {
    if(block[r][0]*block[r][1]0) block[r][1]=(-1)*block[r][1]; else
    if(block[r][0]*block[r][1]0) block[r][0]=(-1)*block[r][0]; else
    if(block[r][0]==0) Swap(block[r][0],block[r][1]); else


    if(block[r][1]==0) {Swap(block[r][0],block[r][1]);block[r][1]*=-1;}
    }
    for(i=0;i3;i++)
    {
    yy=block[r][1];
    if(5+yy+q9) q--;
    if(5+yy+q0) q++;
    if(5+yy+q9) q--;
    if(5+yy+q0) q++;}
    }

    /*----------------------------------------*/

    void Swap(int& x,int& y)
    {
    int temp;
    temp=x;
    x=y;
    y=temp;
    }

    /*----------------------------------------*/

    void Welcome(void)
    {
    printf("◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");
    printf("◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");
    printf("◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");
    printf("■■■■■■■◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥■■■◥◥◥◥◥◥◥◥◥n");
    printf("■■■■■■■◥◥◥◥◥◥◥◥■■■◥◥◥◥◥◥◥◥■■■◥◥◥◥◥◥◥◥◥n");
    printf("◥◥■■■◥◥◥◥◥◥◥◥◥◥■■■◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");
    printf("◥◥■■■◥◥◥■■■■■◥◥■■■■◥■■■◥■◥■■■◥◥■■■■■◥◥n");
    printf("◥◥■■■◥◥■■■■■■■◥■■■■◥■■■■■◥■■■◥■■■■■■■◥n");
    printf("◥◥■■■◥◥■■■◥■■■◥■■■◥◥■■■■■◥■■■◥■■■◥■■■◥n");
    printf("◥◥■■■◥◥■■■■■■■◥■■■◥◥■■■◥◥◥■■■◥■■■◥◥◥◥◥n");
    printf("◥◥■■■◥◥■■■■■■■◥■■■◥◥■■■◥◥◥■■■◥◥■■■■◥◥◥n");
    printf("◥◥■■■◥◥■■■◥◥◥◥◥■■■◥◥■■■◥◥◥■■■◥◥◥■■■■■◥n");
    printf("◥◥■■■◥◥■■■◥■■■◥■■■◥◥■■■◥◥◥■■■◥◥◥◥◥■■■◥n");
    printf("◥◥■■■◥◥■■■◥■■■◥■■■◥◥■■■◥◥◥■■■◥■■■◥■■■◥n");
    printf("◥◥■■■◥◥■■■■■■■◥■■■■◥■■■◥◥◥■■■◥■■■■■■■◥n");
    printf("◥◥■■■◥◥◥■■■■■◥◥■■■■◥■■■◥◥◥■■■◥◥■■■■■◥◥n");
    printf("◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");
    printf("◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");
    printf("◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥◥n");

    printf("【C语言俄罗斯方块】V0.12bn");
    printf("[旋转:W/8 下落:X/2 左移:A/4 右移:D/6 瞬间下落:S/5 暂停:P 退出:Q]n");
    printf("*平均每提高100分 速度会加快一个级别n");
    printf("*瞬间下落:S/5 为快速下落 按下后直接落到底部n");
    printf("(BUG可能还会有一些 会慢慢改进)n");
    //printf("By wjlJack@DragonSoftn");
    system("pause");
    system("cls");
    }

    /*----------------------------------------*/

    void Fast_Down(void)
    { while(p)
    Move_Down();
    Move_Down();
    }

    /*----------------------------------------*/
    void Pause(void)
    {char c;
    GotoXY(1,23);printf("Pause! ");
    do
    {c=getch();}
    while(c!='p');
    }
    /*----------------------------------------*/



    楼主 2016-01-08 13:46 回复

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

登录直线网账号

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