贪吃蛇

来源:互联网 发布:淘宝运营商 编辑:程序博客网 时间:2024/04/26 14:44


#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include <time.h>
struct sb
{
    int x,y;
    struct sb *hou;
}*fuck,*tou,shi;
char o='d';
int qwe=6,sqwe=100;
void gotoxy(int x,int y)
{
    COORD loc;
    loc.X  =  y;
    loc.Y  =  x;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), loc);
}//坐标定位函数
void bian()
{
    int i;
    for(i=0;i<=50;i++)
    {
        gotoxy(0,i);
        putchar('M');
    }
    for(i=1;i<23;i++)
    {
        gotoxy(i,0);
        putchar('I');
    }
    for(i=0;i<=50;i++)
    {
        gotoxy(23,i);
        putchar('M');
    }
    for(i=1;i<23;i++)
    {
        gotoxy(i,50);
        putchar('I');
    }
    gotoxy(8,57);
    puts("按住不放可以加速");
    gotoxy(12,57);
    printf("                      ");
    gotoxy(12,57);
    printf("距离胜利还差%d\n",50-qwe);
}
void jia(int q,int w)
{
    sb *p;
    p=(sb *)malloc(sizeof(sb));
    p->x=q;
    p->y=w;
    p->hou=NULL;
    fuck->hou=p;
    fuck=p;
}//将q,w加入蛇中
void chushe()
{
    sb *jb;
    jb=tou;
    gotoxy(tou->x,tou->y);
    putchar('@');//头
    while(jb->hou!=NULL)
    {
        gotoxy(jb->hou->x,jb->hou->y);
        printf("*");//身子
        jb=jb->hou;
    }
}//画蛇
void dongshe()
{
    sb *jb;
    jb=tou;
    gotoxy(tou->x,tou->y);
    putchar('@');//头
    gotoxy(jb->hou->x,jb->hou->y);
    printf("*");//身子
}
void yidong(char s)
{
    sb *jb;
    jb=tou;
    int q=tou->x;
    int w=tou->y;
    if(s=='a')
    {
        tou->y--;
    }
    else if(s=='w')
    {
        tou->x--;
    }
    else if(s=='s')
    {
        tou->x++;
    }
    else if(s=='d')
    {
        tou->y++;
    }
    while(jb->hou!=NULL)
    {
        int m=q,n=w;
        q=jb->hou->x;
        w=jb->hou->y;
        jb->hou->x=m;
        jb->hou->y=n;
        jb=jb->hou;
    }
}//根据方向移动
void qingchu()
{
    sb *jb;
    jb=tou;
    gotoxy(tou->x,tou->y);
    putchar(' ');
    while(jb->hou!=NULL)
    {
        //gotoxy(jb->hou->x,jb->hou->y);
        //putchar(' ');
        jb=jb->hou;
    }
    gotoxy(jb->x,jb->y);
    putchar(' ');
}//清除蛇
void shibai()
{
    if(tou->x<=0||tou->x>=23||tou->y<=0||tou->y>=50)
    {
        Sleep(1000);

        system("cls");
        gotoxy(5,30);
        puts("GAME OVER");
        Sleep(1000);
        exit(0);
    }
    //else if()
    sb *jb;
    jb=tou;
    while(jb->hou!=NULL)
    {
        if(jb->hou->x!=tou->x||jb->hou->y!=tou->y)
            jb=jb->hou;
        else
        {
            Sleep(1000);
            system("cls");
            gotoxy(5,30);
            puts("GAME OVER");
            Sleep(1000);
            exit(0);
        }
    }
}//判断失败
void zhongzi()
{
loop:
    srand(time(NULL));
    shi.x=rand()%21+1;
    shi.y=rand()%48+1;
    sb *jb;
    jb=tou;
    while(jb->hou!=NULL)
    {
        if(shi.x==jb->hou->x&&shi.y==jb->hou->y)
            goto loop;
        else
            jb=jb->hou;
    }
    gotoxy(shi.x,shi.y);
    putchar('&');
}//随机种子
void chizhong()
{
    if(tou->x==shi.x&&tou->y==shi.y)
    {
        //srand(time(NULL));
        int q=5;
        int w=5;
        jia(q,w);
        //qingchu();
        //yidong(o);
        //chushe();
        zhongzi();
        qwe++;
        //Sleep(200);
        sqwe=100-2*qwe;
        bian();
        if(qwe==50)
        {
            system("cls");
            gotoxy(5,30);
            puts("恭喜你赢了");
            Sleep(1000);
            exit(0);
        }
        //Sleep(200);
    }
}//吃
int main()
{

    //system("color 02");
    bian();
    fuck=(sb *)malloc(sizeof(sb));
    tou=fuck;
    int q=3,w=10;//初始位置
    tou->x=q;
    tou->y=w;
    int n=6;//初始长
    while(n--)
        jia(q,--w);
    chushe();
    n=1;
    zhongzi();
    int cao=0;
    while(n)
    {
        while(!_kbhit())
        {
            qingchu();
            yidong(o);
            dongshe();//chushe();
            shibai();
            chizhong();
            Sleep(sqwe);
            if(_kbhit())
            break;
            Sleep(20);
            if(_kbhit())
            break;
            Sleep(20);
            if(_kbhit())
            break;
            Sleep(20);
            if(_kbhit())
            break;
            Sleep(20);
            if(_kbhit())
            break;
            Sleep(20);
            if(_kbhit())
            break;
            Sleep(20);
        }//自行控制检测键盘输入,和加速
        char u=getch();
        if(cao==1)
        {
            if(u==75)
                if(o!='d')
                    o='a';
            if(u==80)
                if(o!='w')
                    o='s';
            if(u==77)
                if(o!='a')
                    o='d';
            if(u==72)
                if(o!='s')
                    o='w';//防误走
            //system("cls");
           // putchar(o);
           cao=0;
        }
        if(u==-32)
        {
            cao=1;
            //puts(">>>>>>>>>>>>");
        }
        if(u==32)
        {
            system("cls");
            gotoxy(10,30);
            system("pause");
            system("cls");
            bian();
            gotoxy(shi.x,shi.y);
            putchar('&');//暂停
            chushe();
        }
    }
    return 0;
}//用C++编译器写的,C语言编译器上运行不了,但写的时候还不会纯C++的风格,算是刚刚接触编程的一个小程序吧

 

 


 

0 0
原创粉丝点击