c++小白贪吃蛇(主要功能已实现)

来源:互联网 发布:软件测试自学视频教程 编辑:程序博客网 时间:2024/05/29 03:15

使用的easyx,搜索即可

#include <graphics.h>

#include <time.h>  
#include <conio.h>
typedef struct she
{
    she *last;
    she *next;
    char nowfangxiang;
    char nextfangxiang;
    int x, y, z, h;

}*Lshe;
void yizhizou(she & head);
int main(int argc, char* argv[]) {


    initgraph(600, 800);
    setfillcolor(WHITE);
    char c = '0';
    she p, q,d;
    she head = { NULL, &p, 's','s',190, 180, 200,190
    };
        
    p = { &head,&q, 's',head.nowfangxiang,190,170,200,180 };

    q = { &p ,&d ,'s',p.nowfangxiang,190,160,200,170};
    d = { &q ,NULL ,'s',p.nowfangxiang,190,160,200,170 };
    fillrectangle(head.x, head.y, head.z, head.h);
    fillrectangle(p.x, p.y, p.z, p.h);
    fillrectangle(q.x, q.y, q.z, q.h);
    int a = 0, b = 0;
    srand((unsigned)time(NULL));
    a = ((rand() % (80 - 1 + 1)) + 1)*10;
    b = ((rand() % (60 - 1 + 1)) + 1)*10;
    fillrectangle(b - 10, a - 10, b, a);
    she *k = new she[100];
    int n = 0;
    while (c != 27)
    {
        
        if ((head.z == b&&head.h==a)|| (head.x == b&&head.h == a)|| (head.x == b&&head.y == a)|| (head.z == b&&head.y == a))
        {
            
            
            if ((*(d.last)).nextfangxiang == 's')
            {
                k[n].x = (*(d.last)).x;
                k[n].z = (*(d.last)).z;
                k[n].y= (*(d.last)).y-10;
                k[n].h= (*(d.last)).h-10;
                k[n].last = d.last;
                k[n].next = &d;
                k[n].nowfangxiang= (*(d.last)).nowfangxiang ;
                k[n].nextfangxiang = (*(d.last)).nextfangxiang;
                (*(d.last)).next = &k[n];
                d.last = &k[n];
            }
            else if ((*(d.last)).nextfangxiang == 'w')
            {
                k[n].x = (*(d.last)).x;
                k[n].z = (*(d.last)).z;
                k[n].y = (*(d.last)).y +10;
                k[n].h = (*(d.last)).h + 10;
                k[n].last = d.last;
                k[n].next = &d;
                k[n].nowfangxiang = (*(d.last)).nowfangxiang;
                k[n].nextfangxiang = (*(d.last)).nextfangxiang;
                (*(d.last)).next = &k[n];
                d.last = &k[n];
            }
            else if ((*(d.last)).nextfangxiang == 'a')
            {
                k[n].y = (*(d.last)).y;
                k[n].h = (*(d.last)).h;
                k[n].x = (*(d.last)).x + 10;
                k[n].z = (*(d.last)).z + 10;
                k[n].last = d.last;
                k[n].next = &d;
                k[n].nowfangxiang = (*(d.last)).nowfangxiang;
                k[n].nextfangxiang = (*(d.last)).nextfangxiang;
                (*(d.last)).next = &k[n];
                d.last = &k[n];
            }
            else if ((*(d.last)).nextfangxiang == 'd')
            {
                k[n].y = (*(d.last)).y;
                k[n].h = (*(d.last)).h;
                k[n].x = (*(d.last)).x - 10;
                k[n].z = (*(d.last)).z - 10;
                k[n].last = d.last;
                k[n].next = &d;
                k[n].nowfangxiang = (*(d.last)).nowfangxiang;
                k[n].nextfangxiang = (*(d.last)).nextfangxiang;
                (*(d.last)).next = &k[n];
                d.last = &k[n];

            }
            srand((unsigned)time(NULL));
            //yizhizou(head);
            a = ((rand() % (80 - 1 + 1)) + 1) * 10;
            b = ((rand() % (60 - 1 + 1)) + 1) * 10;
            fillrectangle(b - 10, a - 10, b, a);
            n++;
            
        }
        
        if (c == 's'&&(head.nowfangxiang !='s'&& head.nowfangxiang !='w'))
        {
            head.nowfangxiang = c;
            yizhizou(head);
            
        }
        else if (c == 'w' && (head.nowfangxiang != 's' && head.nowfangxiang != 'w'))
        {
            head.nowfangxiang = c;
            yizhizou(head);
        }
        else if (c == 'a' && (head.nowfangxiang != 'a' && head.nowfangxiang != 'd'))
        {
            head.nowfangxiang = c;
            yizhizou(head);

        }
        else if (c == 'd' && (head.nowfangxiang != 'a' && head.nowfangxiang != 'd'))
        {
            head.nowfangxiang = c;
            yizhizou(head);
        }
        else
        {
            yizhizou(head);
        }
        if(_kbhit())
            c = _getch();
        Sleep(300);
        
    }
    
    closegraph();
    delete[]k;
    return 0;
}
void yizhizou(she &head)
{
    she *p;
    she n = *head.next;
    setcolor(BLACK);
    setfillcolor(BLACK);

    fillrectangle(head.x, head.y, head.z, head.h);
    //Sleep(1000000);
    p = head.next;
    while((*p).next!=NULL)
    {
        fillrectangle((*p).x, (*p).y, (*p).z, (*p).h);
        
        p = p->next;
        
    }
    setfillcolor(WHITE);
    //Sleep(10000);
    if (head.nowfangxiang == 's')
    {
        (head.y) += 10;
        (head.h) += 10;
        if ((head.h) > 800)
        {
            head.h = 10;
            (head.y) = (head.h) - 10;
        }
        fillrectangle(head.x, head.y, head.z, head.h);
        
        //Sleep(10000);
    }
    else if (head.nowfangxiang == 'w')
    {
        (head.y) -= 10;
        (head.h) -= 10;
        if ((head.y) <= 0)
        {
            head.h = 800;
            (head.y) = (head.h) - 10;
        }
        fillrectangle(head.x, head.y, head.z, head.h);
    }
    else if (head.nowfangxiang == 'a')
    {
        (head.x) -= 10;
        (head.z) -= 10;
        if ((head.x) < 0)
        {
            head.x = 590;
            (head.z) = (head.x) + 10;
        }
        fillrectangle(head.x, head.y, head.z, head.h);
    }
    else if (head.nowfangxiang == 'd')
    {
        (head.x) += 10;
        (head.z) += 10;
        if ((head.z) >600)
        {
            head.x = 0;
            (head.z) = (head.x) + 10;
        }
        fillrectangle(head.x, head.y, head.z, head.h);
    }
    p = head.next;
    //Sleep(1000000);
    while ((*p).next != NULL)
    {
        (*p).nowfangxiang = (*p).nextfangxiang;
        (*p).nextfangxiang = (*((*p).last)).nowfangxiang;
        if ((*p).nowfangxiang == 's')
        {
            ((*p).y) += 10;
            ((*p).h) += 10;
            if (((*p).h) > 800)
            {
                (*p).h = 10;
                (*p).y = ((*p).h) - 10;
                //fillrectangle((*p).x, 10, (*p).z, 0);
            }
            fillrectangle((*p).x, (*p).y, (*p).z, (*p).h);
            
        }
        else if ((*p).nowfangxiang == 'w')
        {
            ((*p).y) -= 10;
            ((*p).h) -= 10;
            if (((*p).y)<= 0)
            {
                (*p).h = 800;
                ((*p).y) = ((*p).h) - 10;
            }
            fillrectangle((*p).x, (*p).y, (*p).z, (*p).h);
        }
        else if ((*p).nowfangxiang == 'a')
        {
            ((*p).x) -= 10;
            ((*p).z) -= 10;
            if (((*p).x) < 0)
            {
                (*p).x = 590;
                ((*p).z) = ((*p).x) + 10;
            }
            fillrectangle((*p).x, (*p).y, (*p).z, (*p).h);
        }
        else if ((*p).nowfangxiang == 'd')
        {
            ((*p).x) += 10;
            ((*p).z) += 10;
            if (((*p).z) > 600)
            {
                (*p).x = 0;
                ((*p).z) = ((*p).x) + 10;
            }
            fillrectangle((*p).x, (*p).y, (*p).z, (*p).h);
        }
        //fillrectangle((*p).x, (*p).y, (*p).z, (*p).h);
        
        
        p = (*p).next;
    }
}
原创粉丝点击