#include<stdio.h>

#include<stdlib.h>

#include<windows.h> 

#include<time.h>

#include<conio.h> 

int X=60;//屏幕大小 

int Y=20;

int dx=0;//移动 

int dy=0;

int fs=0;//分数

 

struct st {//蛇的身体坐标 

    int x;

    int y;

};


struct cdhst {//蛇的长度与储存蛇的身体坐标 

    int size;

    struct st ccst[60*20];

};


int sw[2] = {0};//初始化食物 

struct cdhst  syzgdx; //为了使用这个东西 


void qb()//初始化墙壁 

{

int a,c;

for(a=0;a<=20;a++)

{

for(c=0;c<=60;c++)

{

if(c==60)

printf ("■");

else if(a==20)

printf ("■");

else

printf (" ");

}

printf ("\n"); 

}

}



void xssw() {//显示食物 

    srand(time(NULL));

    sw[0] = rand() % X;

    sw[1] = rand() % Y;

}


void cshst() {//初始化刚开始的身体 

    syzgdx.size = 3;

    syzgdx.ccst[0].x = X / 2;

    syzgdx.ccst[0].y = Y / 2;

    syzgdx.ccst[1].x = X / 2;

    syzgdx.ccst[1].y = Y / 2 + 1;

    syzgdx.ccst[2].x = X / 2;

    syzgdx.ccst[2].y = Y / 2 + 2;

}


void gxzyddx() {//更新这一堆东西,身体食物

    COORD coord;

    

    for (int i = 0; i < syzgdx.size; i++) {

        coord.X = syzgdx.ccst[i].x;

        coord.Y = syzgdx.ccst[i].y;

        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

        if (i == 0)

            putchar('@');

        else

            putchar('*');

    }

    coord.X=sw[0];

    coord.Y=sw[1];

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

    putchar('#');

    

coord.X = syzgdx.ccst[syzgdx.size-1].x;//擦除多出的蛇尾 ,一定要在更新身体的后面,要不然擦除了又更新身体没用 

    coord.Y = syzgdx.ccst[syzgdx.size-1].y;

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);

    putchar(' ');

}


void wlwyx() {//为了玩游戏的函数 

    char yd='w';//初始化移动 

    while (!(syzgdx.ccst[0].x<0|| syzgdx.ccst[0].x>=X||syzgdx.ccst[0].y<0||syzgdx.ccst[0].y>=Y)) {//不撞墙就一直玩 

        gxzyddx();

        while (_kbhit()) {

            yd = _getch();//移动 

        }

        switch (yd) {

            case 'D': case 'd': if(dx ==-1,dy == 0)break;dx = 1;dy = 0; break;

            case 'A': case 'a': if(dx ==1,dy == 0)break;dx = -1; dy = 0; break;

            case 'W': case 'w': if(dx ==0,dy == 1)break;dx = 0; dy = -1; break;

            case 'S': case 's': if(dx ==0,dy == -1)break;dx = 0; dy = 1; break;

            

        }

        for (int i=1;i<syzgdx.size;i++) {//撞到自己出局 

            if (syzgdx.ccst[0].x==syzgdx.ccst[i].x&&syzgdx.ccst[0].y==syzgdx.ccst[i].y) {

                return;

            }

        }

        if (syzgdx.ccst[0].x==sw[0]&&syzgdx.ccst[0].y==sw[1]) {//吃到食物长度增加,重新显示食物 ,分数加100 

            xssw();

            syzgdx.size++;fs+=100;

        }

        for (int i=syzgdx.size-1;i>0;i--) {

            syzgdx.ccst[i].x = syzgdx.ccst[i-1].x;

            syzgdx.ccst[i].y = syzgdx.ccst[i-1].y;

        }

        syzgdx.ccst[0].x+=dx;

        syzgdx.ccst[0].y+=dy;

        Sleep(150);fs+=5;//每更新一次就+5分 

        //system("cls");  

    }printf(" \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t分数:%d\n",fs);

}


int main() {

    qb();

    xssw();

    cshst(); 

    wlwyx();

    if(fs<500&&syzgdx.size<5){printf("\t\t\t\t菜就多练"); printf("\n");}

    if(fs>2000&&fs<4000&&syzgdx.size<10){printf("\t\t\t\t略有成色"); printf("\n");}

    if(fs>4000&&fs<10000&&syzgdx.size<10){printf("\t\t\t\t保命高手"); printf("\n");}

    if(syzgdx.size>=5&&syzgdx.size<10){printf("\t\t\t\t成蟒"); printf("\n");}

    if(syzgdx.size>=10&&syzgdx.size<15){printf("\t\t\t\t成蚺"); printf("\n");}

    if(syzgdx.size>=15&&syzgdx.size<25){printf("\t\t\t\t化蛟"); printf("\n");}

    if(syzgdx.size>=25){printf("\t\t\t\t洗   净   铅   华!升   华   成   龙!"); printf("\n");}

    return 0;

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论