天天看点

寒假-05,贪吃蛇

实现了蛇的构成,以及蛇的上下左右操作。

后面还需要添加如:1.如何让蛇吃食物。

2.如何让蛇在没有操作的情况下移动。

源代码下。VC++6.0实现

#include<iostream>

#include<ctime>

#include<cstdlib>

#include<conio.h>

using namespace std;

#define M 20

#define UP      72

#define DOWN    80

#define LEFT    75

#define RIGHT   77

struct snake{

    int x;

    int y;

    snake *next;

};

snake *head,*rear,*mid;

snake *dot;

int quyu[M][M]={0};

void build(){//初始化蛇

    head=new snake;

    head->x=10;

    head->y=10;

    mid=new snake;

    mid->x=10;

    mid->y=9;

    rear=new snake;

    rear->x=10;

    rear->y=8;

    head->next=mid;

    mid->next=rear;

    rear->next=0;

}

void printf(){//验证

    snake *temp;

    temp=head;

    cout<<"..............."<<endl;

//    system("CLS");

    while(temp){

        cout<<temp->x<<'\t'<<temp->y<<endl;

        temp=temp->next;

    }

//    cout<<rear->x<<'\t'<<rear->y<<endl;

}

void game(){//输出

    int i,j;

    snake *temp;

    temp=head;

    while(temp){

        quyu[temp->x][temp->y]=1;

        temp=temp->next;

    }

    system("CLS");

    for(i=0;i<M;i++){

        for(j=0;j<M;j++){

            if(quyu[i][j]==0)

                cout<<"  ";

            if(quyu[i][j]==1&&!(i==rear->x&&j==rear->y))

                cout<<"○";

            if(i==rear->x&&j==rear->y)

                cout<<"●";

        }

        cout<<endl;

    }

    temp=head;

    while(temp){

        quyu[temp->x][temp->y]=0;

        temp=temp->next;

    }

}

void chi(){//吃食物

    mid=rear;

    rear->next=dot;

    rear=dot;

}

int control(char a){//控制

    snake *o;

    if(a==UP&&rear->x!=mid->x+1){

        o=new snake;

        o->x=rear->x-1;

        o->y=rear->y;

        o->next=0;

    }

    else

    if(a==DOWN&&rear->x!=mid->x-1){

        o=new snake;

        o->x=rear->x+1;

        o->y=rear->y;

        o->next=0;

    }

    else

    if(a==LEFT&&rear->y!=mid->y+1){

        o=new snake;

        o->x=rear->x;

        o->y=rear->y-1;

        o->next=0;

    }

    else

    if(a==RIGHT&&rear->y!=mid->y-1){

        o=new snake;

        o->x=rear->x;

        o->y=rear->y+1;

        o->next=0;

    }

    else

        return 1;

    snake *temp;

    temp=head;

    head=temp->next;

    delete temp;

    mid=rear;

    rear->next=o;

    rear=o;

    if(rear->x>=M||rear->y>=M||rear->x==-1||rear->y==-1)

        return -1;

    else

        return 0;

}

void newdot(){//产生果实

    snake *temp;

    temp=head;

    int xx,yy;

    while(temp)

    {

        srand(time(0));

        xx=rand()%M;

        yy=rand()%M;

        if(temp->x!=xx&&temp->y!=yy)

            temp=temp->next;

    }

    dot=new snake;

    dot->x=xx;

    dot->y=yy;

    dot->next=0;

}

void main(){

    build();

//    printf();

    newdot();

//    chi();

    int a;

    char key;

//    printf();

//    printf();

    game();

    while(1){

        key=_getch();

        a=control(key);

        if(a==-1){

            cout<<"您失败了";

            break;

        }

        else{

            game();

        }

    }

}

blog.memomuse.com

2012.1.14

继续阅读