#include <turboc.h>

#include <stdio.h>

#include <time.h>

#include <stdlib.h>


#define MAX 20


typedef struct _position{

        int x;

        int y;

}position;


position snakeXY[MAX+4];

position snake_eat[MAX];

int front, rear;


void   init_snake      (void);

void   clear_snake    (void);

int             put_snake      (int Cx,int Cy);

position get_snake     (void);

void   erase_snake(int Cx, int Cy);

void   init_eat (void);

void   print_eat       (void);

void   turn_snake     (void);

void   eat_food       (void);

void   die_snake      (void);


void die_snake()

{

        for(int i=front; i<rear-3; i=++i%MAX){

                if(snakeXY[rear-1].x==snakeXY[i].x && snakeXY[rear-1].y==snakeXY[i].y){

                        printf(\"you lose\");

                        exit(0);

                }

        }

        if(snakeXY[rear-1].x==79||snakeXY[rear-1].x==0||snakeXY[rear-1].y==0||snakeXY[rear-1].y==25){

                printf(\"you lose\");

                exit(0);

        }

}

void eat_food()

{

        for(int i=0;i<MAX;i++){

                if(snakeXY[rear-1].x==snake_eat[i].x && snakeXY[rear-1].y==snake_eat[i].y){

                        put_snake(snakeXY[rear-1].x, snakeXY[rear-1].y);

                }

        }

}

void init_eat(void)

{

        for(int i=0;i<MAX;i++){

                snake_eat[i].x=rand()%79;

                snake_eat[i].y=rand()%24;

        }       

}

void print_eat(void)

{

        for(int i=0;i<MAX;i++){

                gotoxy(snake_eat[i].x,snake_eat[i].y);

                printf(\"#\");

        }

}

void init_snake(void)

{

        front=rear=0;

}

void clear_snake(void)

{

        front=rear;

}

int put_snake(int Cx,int Cy)

{

        if((rear+1) % MAX == front){

                printf(\"you win\");

                exit(0);

        }

        snakeXY[rear].x=Cx;

        snakeXY[rear].y=Cy;

        rear = ++rear % MAX;

        return 1;

}

position get_snake(void)

{

        position temp;

        if(front == rear){

                temp.x=temp.y=-1;

                return temp;

        }

        temp.x=snakeXY[front].x;

        temp.y=snakeXY[front].y;

        front = ++front % MAX;

        return temp;

}

void print_snake(void)

{

        for(int i=front; i!=rear; i=++i%MAX){

                gotoxy(snakeXY[i].x,snakeXY[i].y);

                printf(\"*\");

        }

}

void turn_snake(void)

{

        for(int i=front; i<rear-1; i=++i%MAX){

                if(i==rear-1) break;

                snakeXY[i].x=snakeXY[i+1].x;

                snakeXY[i].y=snakeXY[i+1].y;

        }

}

void erase_snake(int Cx, int Cy)

{

        gotoxy(Cx,Cy);

        printf(\" \");

}

int main(void)

{

        int key;

        int checkSum=1;

        int Cx=10,Cy=10;

        init_snake();

        init_eat();

        print_eat();

        put_snake(Cx,Cy);

        while(1){

                if(kbhit()){

                        key=getch();

                }

              if(key==27)

                        return 0;

                if(key==77){

                        erase_snake(snakeXY[front].x,snakeXY[front].y);

                        snakeXY[rear-1].x++;

         &nbsp