最新文章:

首页 C/C++

贪吃蛇

发布时间:2019年11月30日 评论数:抢沙发 阅读数:33

    随手写的一个贪吃蛇。别问,问就是又没有美工。 windows下才能使用


    /**
    *1、确定棋盘,蛇 #为墙,*为蛇,$为钱
    *2、键盘获取输入
    *3、屏幕刷新
    *4、判断逻辑
    **/
    #include<stdio.h>
    #include<stdlib.h>
    #include <conio.h>
    #include<windows.h>
    #define N 30
    struct Snack{
        //头
        int x1;
        int y1;
        //尾
        int x2;
        int y2;
        int flag; //1左,2上,3右,4下
    };
    int x3,y3;
    char layout[N][N];
    Snack init(){
        int i,j;
        //初始化棋盘
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                if(i==0||j==0||i==(N-1)||j==(N-1)){
                    layout[i][j] = '#';
                }else{
                    layout[i][j] = ' ';
                }
            }
        }
    
        //初始化蛇
        Snack s;
        s.x1 = rand()%(N/2)+(N/4);
        s.y1 = rand()%(N/2)+(N/4);
    
        s.x2 = s.x1-1;
        s.y2 = s.y1;
    
        s.flag = rand()%4+1;
        layout[s.x1][s.y1] = '*';
        layout[s.x2][s.y2] = '*';
        return s;
    }
    void menu(){
        system("cls");
        printf("--------欢迎来到贪吃蛇--------\n");
        int i,j;
        for(i=0;i<N;i++){
            for(j=0;j<N;j++){
                printf("%c",layout[i][j]);
            }
            printf("\n");
        }
        //随机出现食物
        if(layout[x3][y3]!='$'){
            x3 = rand()%(N*9/10)+4;
            y3 = rand()%(N*9/10)+4;
            while(layout[x3][y3]!=' '){
                x3 = rand()%(N*9/10)+4;
                y3 = rand()%(N*9/10)+4;
            }
            layout[x3][y3] = '$';
        }
    
    }
    //判断蛇死不死
    bool move_kill(Snack &s){
        if(s.flag==1){
            s.y1 -= 1;//移动
            if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己
                return false;//死了
            }
            if(layout[s.x1][s.y1]!='$'){ //没吃到食物
                //尾巴减1
                if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点
                    layout[s.x2][s.y2] = ' ';
                    s.x2-=1;
                }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.x2+=1;
                }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.y2-=1;
                }else{
                    layout[s.x2][s.y2] = ' ';
                    s.y2+=1;
                }
            }
            layout[s.x1][s.y1] = '*'; //棋盘标记为蛇
            return true;
        }
        if(s.flag==2){
            s.x1 -= 1;//移动
            if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己
                return false;//死了
            }
            if(layout[s.x1][s.y1]!='$'){ //没吃到食物
                //尾巴减1
                if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点
                    layout[s.x2][s.y2] = ' ';
                    s.x2-=1;
                }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.x2+=1;
                }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.y2-=1;
                }else{
                    layout[s.x2][s.y2] = ' ';
                    s.y2+=1;
                }
            }
            layout[s.x1][s.y1] = '*'; //棋盘标记为蛇
            return true;
        }
        if(s.flag==3){
            s.y1 += 1;//移动
            if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己
                return false;//死了
            }
            if(layout[s.x1][s.y1]!='$'){ //没吃到食物
                //尾巴减1
                if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点
                    layout[s.x2][s.y2] = ' ';
                    s.x2-=1;
                }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.x2+=1;
                }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.y2-=1;
                }else{
                    layout[s.x2][s.y2] = ' ';
                    s.y2+=1;
                }
            }
            layout[s.x1][s.y1] = '*'; //棋盘标记为蛇
            return true;
        }
        if(s.flag==4){
            s.x1 += 1;//移动
            if(layout[s.x1][s.y1]=='#'||layout[s.x1][s.y1]=='*'){ //是否撞墙或者咬自己
                return false;//死了
            }
            if(layout[s.x1][s.y1]!='$'){ //没吃到食物
                //尾巴减1
                if(s.x2-1>1&&layout[s.x2-1][s.y2]=='*'){//找尾巴下个点
                    layout[s.x2][s.y2] = ' ';
                    s.x2-=1;
                }else if(s.x2+1<N-1&&layout[s.x2+1][s.y2]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.x2+=1;
                }else if(s.y2-1>1&&layout[s.x2][s.y2-1]=='*'){
                    layout[s.x2][s.y2] = ' ';
                    s.y2-=1;
                }else{
                    layout[s.x2][s.y2] = ' ';
                    s.y2+=1;
                }
    
            }
            layout[s.x1][s.y1] = '*'; //棋盘标记为蛇
            return true;
        }
    }
    int main(){
        bool f = true;
        int time = 500;
        int t = 0;
        char c;
        Snack s;
        //初始化
        s = init();
        //显示菜单
        menu();
        while(f){
            if (_kbhit()){//如果有按键按下,则_kbhit()函数返回真
                c = _getch();//使用_getch()函数获取按下的键值
                if(c == 'q'){
                    break;
                }
                if(c == -32)
                    continue;
                if(c == 75)
                    s.flag = 1;
                if(c == 72)
                    s.flag = 2;
                if(c == 77)
                    s.flag = 3;
                if(c == 80)
                    s.flag = 4;
            }
            Sleep(time);
            f = move_kill(s);
            menu();
        }
        return 0;
    }
    //75 72 77 80
    

二维码加载中...
本文作者:HDC      文章标题: 贪吃蛇
本文地址:http://hdcin.cn/?post=310
版权声明:若无注明,本文皆为“小胖Blog's”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论