<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • 簡單俄羅斯方塊程序代碼(c語言寫俄羅斯方塊的教程)


    C/C++編程入門基礎系列:俄羅斯方塊小游戲制作,直接源代碼分享

    1.要先下載一個 graphics.h 的頭文件來繪圖。

    2.初始化窗口:initgraph(x, y);這是先創建一個窗口的函數,以左上角為(0,0),向右為x軸,向下為y軸,其中x表示長x個單位,y表示寬y個單位。

    3.關閉圖像窗口:closegraph();結束時用來關閉用的。

    4.按任意鍵繼續:getch();這個就和getchar();差不多,為了防止以運行完就關了,這樣能停頓一下,他的頭文件是:conio.h 。

    5.畫線:line(x1, y1, x2, y2);在你創建的那么窗口里以(x1,y1)和(x2,y2)為兩個端點畫線。

    6.畫矩形:rectangle(x1,y1,x2,y2);以(x1,y1)和(x2,y2)為對角畫一個矩形。

    7.畫圓:circle(x,y,r);以(x,y)為圓點,r為半徑畫圓。

    8.顏色:setcolor(x);用來設置顏色的,其中x是你要設置的顏色,可以填這16種:黑 BLACK、藍 BLUE、綠 GREEN、青 CYAN、紅 RED、紫 MAGENTA、棕 BROWN、淺灰 LIGHTGRAY、深灰 DARKGRAY、亮藍 LIGHTBLUE、亮綠 LIGHTGREEN、亮青 LIGHTCYAN、亮紅 LIGHTRED、亮紫 LIGHTMAGENTA、黃 YELLOW、白 WHITE;當然,你也可以根據光的三原色來調自己喜歡的顏色,方法是:setcolor(RGB(x,y,z));其中RGB分別代表紅綠藍,對應的x,y,z是你選的該顏色的多少,范圍是[0,255]。

    C/C++編程入門基礎系列:俄羅斯方塊小游戲制作,直接源代碼分享

    #include <stdio.h>

    #include <windows.h>

    #include <conio.h>

    #include <time.h>

    //游戲窗口

    #define FrameX 4 //游戲窗口左上角的X軸坐標

    #define FrameY 4 //游戲窗口左上角的Y軸坐標

    #define Frame_height 20 //游戲窗口的高度

    #define Frame_width 18 //游戲窗口的寬度

    //定義全局變量

    int i,j,temp,temp1,temp2; //temp,temp1,temp2用于記住和轉換方塊變量的值

    int a[80][80]={0}; //標記游戲屏幕的圖案:2,1,0分別表示該位置為游戲邊框、方塊、無圖案;初始化為無圖案

    int b[4]; //標記4個”口”方塊:1表示有方塊,0表示無方塊

    //聲明俄羅斯方塊的結構體

    struct Tetris

    {

    int x; //中心方塊的x軸坐標

    int y; //中心方塊的y軸坐標

    int flag; //標記方塊類型的序號

    int next; //下一個俄羅斯方塊類型的序號

    int speed; //俄羅斯方塊移動的速度

    int count; //產生俄羅斯方塊的個數

    int score; //游戲的分數

    int level; //游戲的等級

    };

    //函數原型聲明

    //光標移到指定位置

    void gotoxy(HANDLE hOut, int x, int y);

    //制作游戲窗口

    void make_frame();

    //隨機產生方塊類型的序號

    void get_flag(struct Tetris *);

    //制作俄羅斯方塊

    void make_tetris(struct Tetris *);

    //打印俄羅斯方塊

    void print_tetris(HANDLE hOut,struct Tetris *);

    //清除俄羅斯方塊的痕跡

    void clear_tetris(HANDLE hOut,struct Tetris *);

    //判斷是否能移動,返回值為1,能移動,否則,不動

    int if_moveable(struct Tetris *);

    //判斷是否滿行,并刪除滿行的俄羅斯方塊

    void del_full(HANDLE hOut,struct Tetris *);

    //開始游戲

    void start_game();

    void main()

    {

    //制作游戲窗口

    make_frame();

    //開始游戲

    start_game();

    }

    /******光標移到指定位置**************************************************************/

    void gotoxy(HANDLE hOut, int x, int y)

    {

    COORD pos;

    pos.X = x; //橫坐標

    pos.Y = y; //縱坐標

    SetConsoleCursorPosition(hOut, pos);

    }

    /******制作游戲窗口******************************************************************/

    void make_frame()

    {

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //定義顯示器句柄變量

    gotoxy(hOut,FrameX+Frame_width-5,FrameY-2); //打印游戲名稱

    printf(“俄羅斯方塊”);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7); //打印選擇菜單

    printf(“**********下一個方塊:”);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);

    printf(“**********”);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);

    printf(“↑鍵:變體”);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);

    printf(“空格:暫停游戲”);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);

    printf(“Esc :退出游戲”);

    gotoxy(hOut,FrameX,FrameY); //打印框角并記住該處已有圖案

    printf(“╔”);

    gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);

    printf(“╗”);

    gotoxy(hOut,FrameX,FrameY+Frame_height);

    printf(“╚”);

    gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);

    printf(“╝”);

    a[FrameX][FrameY+Frame_height]=2;

    a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;

    for(i=2;i<2*Frame_width-2;i+=2)

    {

    gotoxy(hOut,FrameX+i,FrameY);

    printf(“═”); //打印上橫框

    }

    for(i=2;i<2*Frame_width-2;i+=2)

    {

    gotoxy(hOut,FrameX+i,FrameY+Frame_height);

    printf(“═”); //打印下橫框

    a[FrameX+i][FrameY+Frame_height]=2; //記住下橫框有圖案

    }

    for(i=1;i<Frame_height;i++)

    {

    gotoxy(hOut,FrameX,FrameY+i);

    printf(“║”); //打印左豎框

    a[FrameX][FrameY+i]=2; //記住左豎框有圖案

    }

    for(i=1;i<Frame_height;i++)

    {

    gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i);

    printf(“║”); //打印右豎框

    a[FrameX+2*Frame_width-2][FrameY+i]=2; //記住右豎框有圖案

    }

    }

    /******制作俄羅斯方塊********************************************************************/

    void make_tetris(struct Tetris *tetris)

    {

    a[tetris->x][tetris->y]=b[0]; //中心方塊位置的圖形狀態:1-有,0-無

    switch(tetris->flag) //共6大類,19種類型

    {

    case 1: //田字方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x+2][tetris->y-1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 2: //直線方塊:—-

    {

    a[tetris->x-2][tetris->y]=b[1];

    a[tetris->x+2][tetris->y]=b[2];

    a[tetris->x+4][tetris->y]=b[3];

    break;

    }

    case 3: //直線方塊: |

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x][tetris->y-2]=b[2];

    a[tetris->x][tetris->y+1]=b[3];

    break;

    }

    case 4: //T字方塊

    {

    a[tetris->x-2][tetris->y]=b[1];

    a[tetris->x+2][tetris->y]=b[2];

    a[tetris->x][tetris->y+1]=b[3];

    break;

    }

    case 5: //T字順時針轉90度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x][tetris->y+1]=b[2];

    a[tetris->x-2][tetris->y]=b[3];

    break;

    }

    case 6: //T字順時針轉180度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x-2][tetris->y]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 7: //T字順時針轉270度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x][tetris->y+1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 8: //Z字方塊

    {

    a[tetris->x][tetris->y+1]=b[1];

    a[tetris->x-2][tetris->y]=b[2];

    a[tetris->x+2][tetris->y+1]=b[3];

    break;

    }

    case 9: //Z字順時針轉90度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x-2][tetris->y]=b[2];

    a[tetris->x-2][tetris->y+1]=b[3];

    break;

    }

    case 10: //Z字順時針轉180度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x-2][tetris->y-1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 11: //Z字順時針轉270度方塊

    {

    a[tetris->x][tetris->y+1]=b[1];

    a[tetris->x+2][tetris->y-1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 12: //7字方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x][tetris->y+1]=b[2];

    a[tetris->x-2][tetris->y-1]=b[3];

    break;

    }

    case 13: //7字順時針轉90度方塊

    {

    a[tetris->x-2][tetris->y]=b[1];

    a[tetris->x-2][tetris->y+1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 14: //7字順時針轉180度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x][tetris->y+1]=b[2];

    a[tetris->x+2][tetris->y+1]=b[3];

    break;

    }

    case 15: //7字順時針轉270度方塊

    {

    a[tetris->x-2][tetris->y]=b[1];

    a[tetris->x+2][tetris->y-1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 16: //倒7字方塊

    {

    a[tetris->x][tetris->y+1]=b[1];

    a[tetris->x][tetris->y-1]=b[2];

    a[tetris->x+2][tetris->y-1]=b[3];

    break;

    }

    case 17: //倒7字順指針轉90度方塊

    {

    a[tetris->x-2][tetris->y]=b[1];

    a[tetris->x-2][tetris->y-1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    case 18: //倒7字順時針轉180度方塊

    {

    a[tetris->x][tetris->y-1]=b[1];

    a[tetris->x][tetris->y+1]=b[2];

    a[tetris->x-2][tetris->y+1]=b[3];

    break;

    }

    case 19: //倒7字順時針轉270度方塊

    {

    a[tetris->x-2][tetris->y]=b[1];

    a[tetris->x+2][tetris->y+1]=b[2];

    a[tetris->x+2][tetris->y]=b[3];

    break;

    }

    }

    }

    //******判斷是否可動*************************************************************************/

    int if_moveable(struct Tetris *tetris)

    {

    if(a[tetris->x][tetris->y]!=0)//當中心方塊位置上有圖案時,返回值為0,即不可移動

    {

    return 0;

    }

    else

    {

    if( //當為田字方塊且除中心方塊位置外,其他”口”字方塊位置上無圖案時,返回值為1,即可移動

    ( tetris->flag==1 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    //或為直線方塊且除中心方塊位置外,其他”口”字方塊位置上無圖案時,返回值為1,即可移動

    ( tetris->flag==2 && ( a[tetris->x-2][tetris->y]==0 &&

    a[tetris->x+2][tetris->y]==0 && a[tetris->x+4][tetris->y]==0 ) ) ||

    ( tetris->flag==3 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x][tetris->y-2]==0 && a[tetris->x][tetris->y+1]==0 ) ) ||

    ( tetris->flag==4 && ( a[tetris->x-2][tetris->y]==0 &&

    a[tetris->x+2][tetris->y]==0 && a[tetris->x][tetris->y+1]==0 ) ) ||

    ( tetris->flag==5 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y]==0 ) ) ||

    ( tetris->flag==6 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x-2][tetris->y]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==7 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==8 && ( a[tetris->x][tetris->y+1]==0 &&

    a[tetris->x-2][tetris->y]==0 && a[tetris->x+2][tetris->y+1]==0 ) ) ||

    ( tetris->flag==9 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x-2][tetris->y]==0 && a[tetris->x-2][tetris->y+1]==0 ) ) ||

    ( tetris->flag==10 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x-2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==11 && ( a[tetris->x][tetris->y+1]==0 &&

    a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==12 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y-1]==0 ) ) ||

    ( tetris->flag==13 && ( a[tetris->x-2][tetris->y]==0 &&

    a[tetris->x-2][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==14 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x][tetris->y+1]==0 && a[tetris->x+2][tetris->y+1]==0 ) ) ||

    ( tetris->flag==15 && ( a[tetris->x-2][tetris->y]==0 &&

    a[tetris->x+2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==16 && ( a[tetris->x][tetris->y+1]==0 &&

    a[tetris->x][tetris->y-1]==0 && a[tetris->x+2][tetris->y-1]==0 ) ) ||

    ( tetris->flag==17 && ( a[tetris->x-2][tetris->y]==0 &&

    a[tetris->x-2][tetris->y-1]==0 && a[tetris->x+2][tetris->y]==0 ) ) ||

    ( tetris->flag==18 && ( a[tetris->x][tetris->y-1]==0 &&

    a[tetris->x][tetris->y+1]==0 && a[tetris->x-2][tetris->y+1]==0 ) ) ||

    ( tetris->flag==19 && ( a[tetris->x-2][tetris->y]==0 &&

    a[tetris->x+2][tetris->y+1]==0 && a[tetris->x+2][tetris->y]==0 ) ) )

    {

    return 1;

    }

    }

    return 0;

    }

    /******隨機產生俄羅斯方塊類型的序號**********************************************************/

    void get_flag(struct Tetris *tetris)

    {

    tetris->count++; //記住產生方塊的個數

    srand((unsigned)time(NULL)); //初始化隨機數

    if(tetris->count==1)

    {

    tetris->flag = rand()%19+1; //記住第一個方塊的序號

    }

    tetris->next = rand()%19+1; //記住下一個方塊的序號

    }

    /******打印俄羅斯方塊**********************************************************************/

    void print_tetris(HANDLE hOut,struct Tetris *tetris)

    {

    for(i=0;i<4;i++)

    {

    b[i]=1; //數組b[4]的每個元素的值都為1

    }

    make_tetris(tetris); //制作俄羅斯方塊

    for( i=tetris->x-2; i<=tetris->x+4; i+=2 )

    {

    for(j=tetris->y-2;j<=tetris->y+1;j++)

    {

    if( a[i][j]==1 && j>FrameY )

    {

    gotoxy(hOut,i,j);

    printf(“□”); //打印邊框內的方塊

    }

    }

    }

    //打印菜單信息

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+1);

    printf(“level : %d”,tetris->level);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+3);

    printf(“score : %d”,tetris->score);

    gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+5);

    printf(“speed : %dms”,tetris->speed);

    C/C++編程入門基礎系列:俄羅斯方塊小游戲制作,直接源代碼分享

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费