第一次写的

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#define wiedth 10
#define height 10
#define snack struict snackpoint
char backapace[width] [height];

struct snackpoint
{
    int x;
    int y;
    struct snackpoint *next;
};


//map;
void inite()
{
    int a,b;
    for ( a = 0; a < width; a++)
    {
        for ( b = 0; b < height; b++)
        {
            if(backapace[a][b]!='x')
            backapace[a][b]=' ';
        }   
    }
    
}

void body(snack *p,int x,int y){
    p->next=(snack*)malloc(sizeof(snack));
    snack *p1;
    p1=p->next;
    p1->x=x;
    p1->y=y;
    p1->next=NULL;
}
//填充主体在面板上

void fix(snack *p){
    snack *n;
    n=p;
    inite();
    while(n!=NULL){
    backapace[n->x][n->y]='*';
    n=n->next;
    }
}

void map(){
    int a,b;
    for ( a = 0; a < width; a++)
    {
        putchar('\n');
        for ( b = 0; b < height; b++)
        {
            putchar(backapace[a][b]);
        }
        
    }
}

int chdir(snack *p,char dir){
    
    
    switch (dir)
    {
    case 'w':
        
        if (backapace[(p->x)-1][(p->y)]=='x')
        {
            body(p,(p->x)-1,(p->y));
            return 1;
        }
        if (backapace[(p->x)-1][(p->y)]=='*')
        return 3;
        body(p,(p->x)-1,(p->y));
        
                return 2;
    case 'a':
        if (backapace[(p->x)][(p->y)-1]=='x')
        {
            body(p,(p->x),(p->y)-1);
            return 1;
        }
        if (backapace[(p->x)][(p->y)-1]=='*')
        return 3;
            body(p,(p->x),(p->y)-1);
            
                return 2;
    case 's':
         if (backapace[(p->x)+1][(p->y)]=='x')
        {

            body(p,(p->x)+1,(p->y));
            return 1;
        }
        if (backapace[(p->x)+1][(p->y)]=='*')
            return 3;
            body(p,(p->x)+1,(p->y));
            return 2;
    case 'd':
         if (backapace[(p->x)][(p->y)+1]=='x')
        {
            body(p,(p->x),(p->y)+1);
            return 1;
        }
        if (backapace[(p->x)][(p->y)+1]=='*')
            return 3;
            body(p,(p->x),(p->y)+1);
            
                return 2;
    }        
    return 0;          
}
 void creat(){
     int x=rand()%10;
     srand((unsigned)(time(NULL)));
     int y=rand()%10;
     int se=serch();
    if (backapace[x][y]==' '&&se==0)
    {
        backapace[x][y]='x';
    }
    
 }
 int serch(){
     int a,b;
    for ( a = 0; a < width; a++)
    {
        for ( b = 0; b < height; b++)
        {
            if(backapace[a][b]=='x')
            return 1;

        }
    } 
    return 0;
 }
int keepdir(char dir,snack *p){
    switch (dir)
    {
    case 'w':
        
        if (backapace[(p->x)-1][(p->y)]=='x')
        {
            body(p,(p->x)-1,(p->y));
            return 1;
        }
        if (backapace[(p->x)-1][(p->y)]=='*')
        return 3;
        body(p,(p->x)-1,(p->y));
        
                return 2;
    case 'a':
        if (backapace[(p->x)][(p->y)-1]=='x')
        {
            body(p,(p->x),(p->y)-1);
            return 1;
        }
        if (backapace[(p->x)][(p->y)-1]=='*')
        return 3;
            body(p,(p->x),(p->y)-1);
            
                return 2;
    case 's':
         if (backapace[(p->x)+1][(p->y)]=='x')
        {

            body(p,(p->x)+1,(p->y));
            return 1;
        }
        if (backapace[(p->x)+1][(p->y)]=='*')
            return 3;
            body(p,(p->x)+1,(p->y));
            return 2;
    case 'd':
         if (backapace[(p->x)][(p->y)+1]=='x')
        {
            body(p,(p->x),(p->y)+1);
            return 1;
        }
        if (backapace[(p->x)][(p->y)+1]=='*')
            return 3;
            body(p,(p->x),(p->y)+1);
            
                return 2;
    }        
}
int main(){
    snack snack1;
    
    static snack *head;
    head=&snack1;
    head->x=5;
    head->y=6;
    head->next=NULL;
    
    snack *p=head,*p1=head;

    inite();
    //creat();
    
    // backapace[8][6]='x';
    // backapace[7][2]='x';
    fix(head);
    map(); 
    int x;
    int d;
    int soc=0;
    char diac;
    creat();
    char s;
    while(1){
        s=getche();

        //func
        while(kbhit()==0){
            
            for(x=0;x<100000000;x++){}

        d=chdir(p,s);
        p=p->next;
        if (d==2){
        head=head->next;//去头
        }else if(d==3)
        {
            break;//正常
        }else if (d==1)
        {
            soc++;//计分
        }
        //func
        fix(head);
        creat();
        system("cls");
        map();

        
        }
       if(d==3){
           break;
       }
    }    
   
    printf("%d",soc);
	return 0; 
}

极其愉悦 贪吃蛇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值