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

首頁 > 編程 > C++ > 正文

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

2019-11-10 23:08:22
字體:
供稿:網(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í),蛇長度,自動(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長度為: %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++;    //長度加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ā)表

圖片精選

主站蜘蛛池模板: 新乐市| 华亭县| 阜平县| 五原县| 子长县| 商河县| 肇源县| 缙云县| 新郑市| 六安市| 图木舒克市| 榆社县| 文安县| 泗水县| 莎车县| 保定市| 阿克陶县| 阳西县| 当雄县| 峨边| 安康市| 利津县| 阳山县| 宁海县| 绥江县| 郎溪县| 石台县| 肥乡县| 连山| 石台县| 平罗县| 锦屏县| 梅河口市| 沂源县| 当雄县| 金乡县| 石林| 济阳县| 岐山县| 阜南县| 银川市|