回覆列表
  • 1 # 使用者1754428943113991

    最基礎的貪吃蛇的程式碼

    #include<stdio.h>

    #include<windows.h>//基本型態定義。支援型態定義函式。使用者介面函式圖形裝置介面函式。

    #include<conio.h>

    //使用者透過按鍵盤產生的對應操作(控制檯)

    #include<stdlib.h>

    #include<time.h>//日期和時間標頭檔案

    #defineLEN30

    #defineWID25

    intSnake[LEN][WID]={0};

    //陣列的元素代表蛇的各個部位

    charSna_Hea_Dir='a';//記錄蛇頭的移動方向

    intSna_Hea_X,Sna_Hea_Y;//記錄蛇頭的位置

    intSnake_Len=3;//記錄蛇的長度

    clock_tNow_Time;//記錄當前時間,以便自動移動

    intWait_Time;//記錄自動移動的時間間隔

    intEat_Apple=1;//吃到蘋果表示為1

    intLevel;

    intAll_Score=-1;

    intApple_Num=-1;

    HANDLEhConsole=GetStdHandle(STD_OUTPUT_HANDLE);

    //獲取標準輸出的控制代碼<windows.h>

    //控制代碼:標誌應用程式中的不同物件和同類物件中的不同的例項方便操控,

    voidgotoxy(intx,inty)//設定游標位置

    {

    COORDpos={x,y};

    //定義一個字元在控制檯螢幕上的座標POS

    SetConsoleCursorPosition(hConsole,pos);

    //定位游標位置的函式<windows.h>

    }

    voidHide_Cursor()//隱藏游標固定函式

    {

    CONSOLE_CURSOR_INFOcursor_info={1,0};

    SetConsoleCursorInfo(hConsole,&cursor_info);

    }

    voidSetColor(intcolor)//設定顏色

    {

    SetConsoleTextAttribute(hConsole,color);

    //是API設定字型顏色和背景色的函式格式:SetConsoleTextAttribute(控制代碼,顏色);

    }

    voidPrint_Snake()//列印蛇頭和蛇的脖子和蛇尾

    {

    intiy,ix,color;

    for(iy=0;iy<WID;++iy)

    for(ix=0;ix<LEN;++ix)

    {

    if(Snake[ix][iy]==1)//蛇頭

    {

    SetColor(0xf);//oxf代表分配的記憶體地址setcolor:34行自定義設定顏色的函式

    gotoxy(ix*2,iy);

    printf("※");

    }

    if(Snake[ix][iy]==2)//蛇的脖子

    {

    color=rand()%15+1;

    //rand()函式是產生隨機數的一個隨機函式。C語言裡還有srand()函式等。

    //標頭檔案:stdlib.h

    if(color==14)

    color-=rand()%13+1;

    //變色

    SetColor(color);

    gotoxy(ix*2,iy);

    printf("■");

    }

    if(Snake[ix][iy]==Snake_Len)

    {

    gotoxy(ix*2,iy);

    SetColor(0xe);

    printf("≈");

    }

    }

    }

    voidClear_Snake()//擦除貪吃蛇

    {

    intiy,ix;

    for(iy=0;iy<WID;++iy)

    for(ix=0;ix<LEN;++ix)

    {

    gotoxy(ix*2,iy);

    if(Snake[ix][iy]==Snake_Len)

    printf("");

    }

    }

    voidRand_Apple()//隨機產生蘋果

    {

    intix,iy;

    do

    {

    ix=rand()%LEN;

    iy=rand()%WID;

    }while(Snake[ix][iy]);

    Snake[ix][iy]=-1;

    gotoxy(ix*2,iy);

    printf("⊙");

    Eat_Apple=0;

    }

    voidGame_Over()//蛇死掉了

    {

    gotoxy(30,10);

    printf("GameOver");

    Sleep(3000);

    system("pause>nul");

    exit(0);

    }

    voidMove_Snake()//讓蛇動起來

    {

    intix,iy;

    for(ix=0;ix<LEN;++ix)//先標記蛇頭

    for(iy=0;iy<WID;++iy)

    if(Snake[ix][iy]==1)

    {

    switch(Sna_Hea_Dir)//根據新的蛇頭方向標誌蛇頭

    {

    case'w':

    if(iy==0)

    Game_Over();

    else

    Sna_Hea_Y=iy-1;

    Sna_Hea_X=ix;

    break;

    case's':

    if(iy==(WID-1))

    Game_Over();

    else

    Sna_Hea_Y=iy+1;

    Sna_Hea_X=ix;

    break;

    case'a':

    if(ix==0)

    Game_Over();

    else

    Sna_Hea_X=ix-1;

    Sna_Hea_Y=iy;

    break;

    case'd':

    if(ix==(LEN-1))

    Game_Over();

    else

    Sna_Hea_X=ix+1;

    Sna_Hea_Y=iy;

    break;

    default:

    break;

    }

    }

    if(Snake[Sna_Hea_X][Sna_Hea_Y]!=1&&Snake[Sna_Hea_X][Sna_Hea_Y]!=0&&Snake[Sna_Hea_X][Sna_Hea_Y]!=-1)

    Game_Over();

    if(Snake[Sna_Hea_X][Sna_Hea_Y]<0)//吃到蘋果

    {

    ++Snake_Len;

    Eat_Apple=1;

    }

    for(ix=0;ix<LEN;++ix)//處理蛇尾

    for(iy=0;iy<WID;++iy)

    {

    if(Snake[ix][iy]>0)

    {

    if(Snake[ix][iy]!=Snake_Len)

    Snake[ix][iy]+=1;

    else

    Snake[ix][iy]=0;

    }

    }

    Snake[Sna_Hea_X][Sna_Hea_Y]=1;//處理蛇頭

    }

    voidGet_Input()//控制蛇的移動方向

    {

    if(kbhit())

    {

    switch(getch())

    {

    case87:

    Sna_Hea_Dir='w';

    break;

    case83:

    Sna_Hea_Dir='s';

    break;

    case65:

    Sna_Hea_Dir='a';

    break;

    case68:

    Sna_Hea_Dir='d';

    break;

    default:

    break;

    }

    }

    if(clock()-Now_Time>=Wait_Time)//蛇到時間自動行走

    {

    Clear_Snake();

    Move_Snake();

    Print_Snake();

    Now_Time=clock();

    }

    }

    voidInit()//初始化

    {

    system("title貪吃毛毛蛇");

    system("modecon:cols=80lines=25");

    Hide_Cursor();

    gotoxy(61,4);

    printf("YouScore:");

    gotoxy(61,6);

    printf("YouLevel:");

    gotoxy(61,8);

    printf("TheLenght:");

    gotoxy(61,10);

    printf("TheSpeed:");

    gotoxy(61,12);

    printf("AppleNum:");

    inti;

    for(i=0;i<Snake_Len;++i)//生成蛇

    Snake[10+i][15]=i+1;

    intiy,ix;//列印蛇

    for(iy=0;iy<WID;++iy)

    for(ix=0;ix<LEN;++ix)

    {

    if(Snake[ix][iy])

    {

    SetColor(Snake[ix][iy]);

    gotoxy(ix*2,iy);

    printf("■");

    }

    }

    }

    voidPri_News()//列印資訊

    {

    SetColor(0xe);

    gotoxy(73,4);

    All_Score+=Level;

    printf("%3d",All_Score);

    gotoxy(73,6);

    printf("%3d",Level);

    gotoxy(73,8);

    printf("%3d",Snake_Len);

    gotoxy(73,10);

    printf("0.%3ds",Wait_Time/10);

    gotoxy(73,12);

    printf("%d",Apple_Num);

    }

    voidLev_Sys()//等級系統

    {

    if(((Apple_Num-1)/10)==Level)

    {

    ++Level;

    if(Wait_Time>50)

    Wait_Time-=50;

    else

    if(Wait_Time>10)

    Wait_Time-=10;

    else

    Wait_Time-=1;

    }

    }

    intmain(void)

    {

    Init();

    srand((unsigned)time(NULL));//設定隨機數的種子

    Now_Time=clock();

    intspeed1=1000,speed2,a;

    printf("\n");

    printf("請輸入你想要的速度\n");

    scanf("%d",&speed2);

    Level=1;

    Wait_Time=speed1-speed2;

    printf("請輸入你想要的蘋果數\n");

    scanf("%d",&a);

    while(a--)

    Rand_Apple();

    while(1)

    {

    if(Eat_Apple)

    {

    ++Apple_Num;

    Rand_Apple();

    Lev_Sys();

    Pri_News();

    }

    Get_Input();

    Sleep(10);

    }

    return0;

    }

  • 中秋節和大豐收的關聯?
  • 巜薪級》工資檔次6?