上个礼拜写的,闲着无聊,没意思......::>_<::
struct move
{
int x,y;
}move[4]={-1,0,0,1,1,0,0,-1}; /*上右下左*/
char MAP[20][20]; int body[20][2],lenth,dis,x,y,SPEED=80;
bool canmove(int x,int y,int dis)
{
if(x+move[dis].x>-1&&x+move[dis].x<20&&y+move[dis].y>-1&&y+move[dis].y<20&&(MAP[x+move[dis].x][y+move[dis].y]==0||MAP[x+move[dis].x][y+move[dis].y]==2))
return true;
return false;
}
void creatpoint()
{
int i;
s: srand((unsigned)time(NULL));
x=rand()%20;
srand((unsigned)time(NULL)+x);
y=rand()%20;
for(i=0;i<lenth;i++)
if(body[i][0]==x&&body[i][1]==y)
goto s;
MAP[x][y]=2;
}
void gotoxy(int x,int y) /*移动光标*/
{
COORD C;
C.X = x;
C.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),C);
}
void show()
{
gotoxy(0,0);
int i,j;
for(i=0;i<20;i++,cout<<endl)
for(j=0;j<20;j++)
if(MAP[i][j]==1)
cout<<"◎";
else if(MAP[i][j]==2)
cout<<"★";
else
cout<<" ";
}
void first()
{
int i;
memset(MAP,0,sizeof(MAP));
lenth=3;
for(i=0;i<lenth;i++)
{
MAP[0][i]=1;
body[lenth-i-1][0]=0;
body[lenth-i-1][1]=i;
}
dis=1;
for(i=0;i<20;i++)
{ gotoxy(20*2,i); cout<<"┃"; }
gotoxy(0,20);
for(i=0;i<20;i++)
{ cout<<"━"; }
creatpoint();
show();
}
void moving(int dis)
{
int i;
for(i=0;i<lenth;i++)
MAP[body[i][0]][body[i][1]]=0;
for(i=lenth-1;i>0;i--)
{ body[i][0]=body[i-1][0]; body[i][1]=body[i-1][1]; }
body[0][0]+=move[dis].x; body[0][1]+=move[dis].y;
for(i=0;i<lenth;i++)
MAP[body[i][0]][body[i][1]]=1;
}
void eat()
{
int i;
if(body[0][0]==x&&body[0][1]==y)
{
for(i=0;i<4;i++)
if(body[lenth-1][0]+move[i].x==body[lenth-2][0]&&body[lenth-1][1]+move[i].x==body[lenth-2][1])
break;
body[lenth][0]=body[lenth-1][0]+move[(i+2)%4].x;
body[lenth][1]=body[lenth-1][1]+move[(i+2)%4].x;
lenth++;
creatpoint();
}
}
void control()
{
char op,i=0,dd;
while(i<SPEED)
{
if(kbhit()>0)
{
op=getch();
if(op=='d')
dd=1;
else if(op=='a')
dd=3;
else if(op=='s')
dd=2;
else if(op=='w')
dd=0;
if(dd!=(dis+2)%4)
{
if(canmove(body[0][0],body[0][1],dd)==false)
goto end;
dis=dd;
moving(dis);
eat();
show();
}
}
Sleep(3);
i++;
}
if(canmove(body[0][0],body[0][1],dis)==true)
{
moving(dis);
eat();
show();
return ;
}
end:system("cls");
cout<<"game over"<<endl;
exit(0);
}
int main()
{
first();
while(1)
{
control();
if(lenth>=17)
{ SPEED/=2; main(); return 0; }
}
}