#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
int x=5, y=5,life=0,goals=0,changdu=1,direction=1;
char map[20][20];
int map2[20][20],a[20],b[20];
void print()
{
int i, j;
for(i=0; i<=19; i++)
{ for(j=0; j<=19; j++)
{
printf("%c",map[i][j]);
}
printf("\n");
}
printf("goal:%d",goals);
}
void control(int ch)
{
int i,j;
switch(ch)
{
case 2:
for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
map2[a[changdu]][b[changdu]]=0;
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
b[i]=b[i-1];a[i]=a[i-1];
}
b[0]++;
if(b[0]==19){
life=1;
break;
}
for(i=1;i<=changdu;i++)
{
if(a[i]==a[0]&&b[i]==b[0])
{
life=1;
break;
}
}
if(life)
break;
for(i=0;i<changdu;i++)
{
map[a[i]][b[i]]='\1';
map2[a[i]][b[i]]=1;
map[a[i+1]][b[i+1]]='\1';
map2[a[i+1]][b[i+1]]=1;}
break;
case 4:
for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
map2[a[changdu]][b[changdu]]=0;
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
b[i]=b[i-1];a[i]=a[i-1];}
b[0]--;
if(b[0]==0)
{
life=1;
break;
}
for(i=1;i<=changdu;i++)
{
if(a[i]==a[0]&&b[i]==b[0])
{
life=1;
break;
}
}
if(life)
break;
for(i=0;i<changdu;i++)
{
map[a[i+1]][b[i+1]]='\1';
map2[a[i+1]][b[i+1]]=1;
map[a[i]][b[i]]='\1';
map2[a[i]][b[i]]=1;}
break;
case 3:
for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
map2[a[changdu]][b[changdu]]=0;
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
a[i]=a[i-1];b[i]=b[i-1];}
for(j=0;j<1;j++)
a[j]++;
if(a[0]==19)
{
life=1;
break;
}
for(i=1;i<=changdu;i++)
{
if(a[i]==a[0]&&b[i]==b[0])
{
life=1;
break;
}
}
if(life)
break;
for(i=0;i<changdu;i++)
{
map[a[i]][b[i]]='\1';
map2[a[i]][b[i]]=1;
map[a[i+1]][b[i+1]]='\1';
map2[a[i+1]][b[i+1]]=1;}
break;
case 1:
for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
map2[a[changdu]][b[changdu]]=0;
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
a[i]=a[i-1];b[i]=b[i-1];}
a[0]--;
if(a[0]==0){
life=1;
}
for(i=1;i<=changdu;i++)
{
if(a[i]==a[0]&&b[i]==b[0])
{
life=1;
break;
}
}
if(life)
break;
for(i=0;i<changdu;i++)
{
map[a[i+1]][b[i+1]]='\1';
map2[a[i+1]][b[i+1]]=1;
map[a[i]][b[i]]='\1';
map2[a[i]][b[i]]=1;}
break;
}
}
int main()
{
int i,j,c,d,v=3;
int success=0;
char ch;
for(i=0; i<=19; i++)
{ for(j=0; j<=19; j++)
{
map[i][j]='\4';
}
}
for(i=1;i<=18;i++)
{
for(j=1;j<=18;j++)
{
map[i][j]=' ';
}
}
map[y][x]='\1';
map[y-1][x]='\1';
a[0]=y;a[1]=y-1;
b[0]=x;b[1]=x;
map2[y][x]=1;
map2[y-1][x]=1;
while (1)
{
system("cls");
if(success==2)
break;
if(life)
break;
success=0;
srand((unsigned)time(NULL));
c=rand()%17+1;
d=rand()%17+1;
if(map2[c][d]!=1)
{
map[c][d]='\3';
}
while(success==0)
{
print();
/* while((ch=getch())!='a'||(ch=getch())!='w'||(ch=getch())!='s'||(ch=getch())!='d')
{
if(direction==1)
{ for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
a[i]=a[i-1];b[i]=b[i-1];}
for(j=0;j<1;j++)
a[j]++;
if(a[0]==19)
{
life=1;
break;
}
for(i=0;i<changdu;i++)
{
map[a[i]][b[i]]='\1';
map[a[i+1]][b[i+1]]='\1';}
Sleep(1000);
system("cls");}
if(direction==2)
{ for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
a[i]=a[i-1];b[i]=b[i-1];}
a[0]--;
if(a[0]==0){
life=1;
break;
}
for(i=0;i<changdu;i++)
{
map[a[i+1]][b[i+1]]='\1';
map[a[i]][b[i]]='\1';}
Sleep(1000);
system("cls");
}
if(direction==3)
{ for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
b[i]=b[i-1];a[i]=a[i-1];}
b[0]--;
if(b[0]==0)
{
life=1;
break;
}
for(i=0;i<changdu;i++)
{
map[a[i+1]][b[i+1]]='\1';
map[a[i]][b[i]]='\1';}
Sleep(1000);
system("pause");
}
if(direction==4)
{ for(i=changdu;i>0;i--)
{
map[a[changdu]][b[changdu]]=' ';
a[changdu+1]=a[changdu];
b[changdu+1]=b[changdu];
b[i]=b[i-1];a[i]=a[i-1];
}
b[0]++;
if(b[0]==19){
life=1;
break;
}
for(i=0;i<changdu;i++)
{
map[a[i]][b[i]]='\1';
map[a[i+1]][b[i+1]]='\1';}
Sleep(1000);
system("cls");
}
}*/
for (i=1;i<=15;i++){
if(GetAsyncKeyState(VK_UP)<0){
if(v==3)
{v=3;}
else if(v==1)
break;
else
v=1;
}
else if(GetAsyncKeyState(VK_DOWN)<0){
if(v==1)
{
v=1;
}
else if(v==3)
break;
else
v=3;
}
else if(GetAsyncKeyState(VK_RIGHT)<0){
if(v==4)
{
v=4;}
else if(v==2)
break;
else
v=2;
}
else if(GetAsyncKeyState(VK_LEFT)<0){
if(v==2)
{
v=2;}
else if(v==4)
break;
else
v=4;
}
if(goals<10)
Sleep(10);
else if(goals>=10&&goals<=15)
Sleep(2);
else if(goals>15)
{success=2;
break;}
}
ch=v;
if(ch=='0')
break;
control(ch);
if(life)
break;
if(success==2)
break;
if((a[0]==c)&&(b[0]==d))
{success=1;
goals++;
changdu++;
map[a[changdu+1]][b[changdu+1]]='\1';
break;
}
system("cls");
}
}
if(life=1)
{
system("cls");
printf("game over");
}
if(success==2)
printf("恭喜你闯关成功!!、\n");
else
printf("再接再厉~~\n");
system("pause");
return 0;
}