#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;
}
极其愉悦 贪吃蛇