国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C++ > 正文

C++貪吃蛇200行以內(nèi)實(shí)現(xiàn)完整功能

2019-11-11 01:01:59
字體:
供稿:網(wǎng)友
#include <iostream>#include<cstdio>#include<cstdlib>#include<ctime>#include<conio.h>using namespace std;#define Size 22#define Max_snake_length 400typedef struct{    int x,y;}Point;char map[Size][Size];Point snake[Max_snake_length],food,Next;     //定義蛇,食物,下一步蛇頭的位置int head,tail;int grade,length,autotime;   //游戲等級(jí),蛇長(zhǎng)度,自動(dòng)前進(jìn)所需時(shí)間char direction;inline void Update(char map[][Size],int grade,int length,int autotime){   //inline定義內(nèi)聯(lián)函數(shù),節(jié)省程序運(yùn)行時(shí)   //的內(nèi)存調(diào)度開銷   //刷新地圖    system("cls");    int i,j;    PRintf("/n");    for(i=0;i<Size;i++){        printf("/n");        for(j=0;j<Size;j++)            printf("%c ",map[i][j]);        if(i==0)            printf("/t等級(jí)為: %d",grade);        if(i==2)            printf("/t長(zhǎng)度為: %d",length);        if(i==6)            printf("/t自動(dòng)前進(jìn)實(shí)踐");        if(i==8)            printf("/t間隔為: %d ms",autotime);        printf("/n");    }}//Welcome界面inline void hello(){    puts("/n/n/n/t/t/t貪吃蛇即將開始!");    double start;    for(int i=3;i>=0;i--){        start=(double)clock()/CLOCKS_PER_SEC;        while((double)clock()/CLOCKS_PER_SEC-start<=1);  //經(jīng)過1秒以后        if(i>0){            system("cls");            printf("/n/n/n/t/t/t進(jìn)入倒計(jì)時(shí): %d/n",i);   //倒計(jì)時(shí)        }        else{            Update(map,grade,length,autotime);        }    }}//隨機(jī)生成食物位置inline void create_food(){    srand(int(time(0)));     //開始掉用種子函數(shù),為后面生成隨機(jī)數(shù)準(zhǔn)備    do{        food.x=rand()%20+1;        food.y=rand()%20+1;    }while(map[food.x][food.y]!=' ');    map[food.x][food.y]='!';}//初始化inline void init(){    int i,j;    for(i=1;i<=20;i++){        for(j=1;j<=20;j++){            map[i][j]=' ';        }    }    for(i=0;i<=21;i++){        map[0][i]=map[21][i]=map[i][0]=map[i][21]='*';    //邊界用星號(hào)表示    }    map[1][1]=map[1][2]='O';     //蛇出生點(diǎn)處,蛇身的位置    map[1][3]='@';    head=2;         //頭部在snake[]蛇數(shù)組中的下標(biāo)    tail=0;           //數(shù)組下標(biāo)    snake[head].x=1;   //出生點(diǎn)蛇的頭和尾的X,Y坐標(biāo)    snake[head].y=3;    snake[tail].x=1;    snake[tail].y=1;    snake[1].x=1;      //出生點(diǎn)蛇身的X,Y坐標(biāo)    snake[1].y=2;    create_food();    grade=1;length=3;autotime=500;    direction=77;        //初始時(shí)方向}//預(yù)前進(jìn)inline int GO(){    bool timeover=true;    double start=(double)clock()/CLOCKS_PER_SEC;      //程序到目前為止運(yùn)行的時(shí)間    //自動(dòng)經(jīng)過1秒,或者等待1秒內(nèi)的額鍵盤輸入    while((timeover=((double)clock()/CLOCKS_PER_SEC-start<=autotime/1000.0))&&!_kbhit());    if(timeover){   //鍵盤輸入        _getch();        direction=_getch();   //獲取方向    }    switch(direction){        case 72:   //上方向鍵,ASCii 碼為72            Next.x=snake[head].x-1;            Next.y=snake[head].y;            break;        case 80:   //下方向鍵,ASCii 碼為80            Next.x=snake[head].x+1;            Next.y=snake[head].y;            break;        case 75:   //左方向鍵,ASCii 碼為75            Next.x=snake[head].x;            Next.y=snake[head].y-1;            break;        case 77:   //左方向鍵,ASCii 碼為77            Next.x=snake[head].x;            Next.y=snake[head].y+1;            break;        default:            puts("/tGame over!");            return 0;    }    //觸碰邊界    if(Next.x==0||Next.x==21||Next.y==0||Next.y==21){        puts("/tGame over!");        return 0;    }    //吃到自己    if(map[Next.x][Next.y]!=' '&&!(Next.x==food.x&&Next.y==food.y)){        puts("/tGame over!");        return 0;    }    if(length==400){        puts("/tGood game!");        return 0;    }    return 1;}//吃到食物inline void eating_food(){    length++;    //長(zhǎng)度加1    int _grade=length/10+1;    if(_grade!=grade){        grade=_grade;        if(autotime>=100){            autotime=550-grade*50;     //難度加1,降落速度加快50ms        }    }    map[Next.x][Next.y]='@';       //蛇頭位置移動(dòng)到下一格    map[snake[head].x][snake[head].y]='O';   //原蛇頭處變蛇身    head=(head+1)%400;             //蛇頭下標(biāo)加1    snake[head].x=Next.x;          //蛇頭下標(biāo)變化    snake[head].y=Next.y;    create_food();    Update(map,grade,length,autotime);   //刷新地圖}inline void eating_fail(){    map[snake[tail].x][snake[tail].y]=' ';   //蛇尾原來的位置變成空格    tail=(tail+1)%400;             //蛇尾下標(biāo)加1    map[Next.x][Next.y]='@';       //蛇頭位置變化    map[snake[head].x][snake[head].y]='O';    //原蛇頭位置變化為蛇身    head=(head+1)%400;             //蛇頭下標(biāo)加1    snake[head].x=Next.x;          //蛇頭下標(biāo)變化    snake[head].y=Next.y;    Update(map,grade,length,autotime);   //刷新地圖}int main(){    init();    hello();    while(1){        if(GO()){            if(Next.x==food.x&&Next.y==food.y){                eating_food();            }else{                eating_fail();            }        }else{            return 0;        }    }    return 0;

}

運(yùn)行效果:

       


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 肃北| 穆棱市| 兰州市| 闽侯县| 江西省| 武隆县| 咸阳市| 东乌| 松滋市| 沁源县| 上林县| 那曲县| 永顺县| 东平县| 亳州市| 东城区| 玉门市| 招远市| 法库县| 饶河县| 莒南县| 红河县| 松滋市| 玛纳斯县| 丰镇市| 镇安县| 馆陶县| 竹山县| 图木舒克市| 武胜县| 吴江市| 简阳市| 上虞市| 嫩江县| 西吉县| 吉木萨尔县| 久治县| 平陆县| 白河县| 攀枝花市| 玉山县|