#include<stdio.h>
#include<conio.h>
#define left 75
#define right 77
#define up 72
#define down 80
typedef struct
{
int x,y; //toa do cua moi diem
int stanow,stathen;//trang thai cua moi diem truoc va sau,de dinh huong cho diem theo sau no ,qua phai(1),hay qua trai(2),len(3),xuong(4)
}ran;
ran s[10];//cho con ran o 4 doan ,sau nay lam duoc tinh tiep
void demo(void);
void moveright(void);
void moveleft(void);
void moveup(void);
void movedown(void);
void delay(void);
/******************************************************************/
void main()
{
int i;
int j=0;
char c;
for(i=0;i<4;i++)
{
s[i].x=++j;
s[i].y=10;
}
demo(); //khoi dong trang thái ban dau cua con ran
c=getch();
do
{
if(c==0)
{
switch(getch())
{
case left:
moveleft();
break;
case right:
moveright();
break;
case up:
moveup();
break;
case down:
movedown();
break;
}
}
c= getch();
}
while(c!=27);
}
/***************************************************************/
void moveright(void)
{
int i;
con1:
s[3].stathen=1; //xet diem dau tien cua con ran
gotoxy(s[3].x,s[3].y);
printf("%c",32);//xoa dau vet cu cua con ran s[3].x++;
gotoxy(s[3].x,s[3].y);
for(i=2;i>=0;i--)
{
s[i].stathen=s[i+1].stanow;
gotoxy(s[i].x,s[i].y);
switch(s[i].stathen)
{
case 1:
s[i].x++;
break;
case 2:
s[i].x--;
break;
case 3:
s[i].y--;
break;
case 4:
s[i].y++;
break;
}
gotoxy(s[i].x,s[i].y);
s[i].stanow=s[i].stathen;//de quy cho lan sau
}
s[3].stanow=s[3].stathen;
delay();
if(!kbhit()) //neu khong phim nao duoc nhan
goto con1;
}
/************************************************************/
void moveleft(void)
{
int i;
con2:
s[3].stathen=2; //xet diem dau tien cua con ran
gotoxy(s[3].x,s[3].y);
printf("%c",32);//xoa dau vet cu cua con ran s[3].x--;
gotoxy(s[3].x,s[3].y);
for(i=2;i>=0;i--)
{
s[i].stathen=s[i+1].stanow;
gotoxy(s[i].x,s[i].y);
switch(s[i].stathen)
{
case 1:
s[i].x++;
break;
case 2:
s[i].x--;
break;
case 3:
s[i].y--;
break;
case 4:
s[i].y++;
break;
}
gotoxy(s[i].x,s[i].y);
s[i].stanow=s[i].stathen;//de quy cho lan sau
}
s[3].stanow=s[3].stathen;
delay();
if(!kbhit())
goto con2;
}
/**********************************************************/
void moveup(void)
{
int i;
con3:
s[3].stathen=3; //xet diem dau tien cua con ran
gotoxy(s[3].x,s[3].y);
printf("%c",32);//xoa dau vet cu cua con ran s[3].y--;
gotoxy(s[3].x,s[3].y);
for(i=2;i>=0;i--)
{
s[i].stathen=s[i+1].stanow;
gotoxy(s[i].x,s[i].y);
switch(s[i].stathen)
{
case 1:
s[i].x++;
break;
case 2:
s[i].x--;
break;
case 3:
s[i].y--;
break;
case 4:
s[i].y++;
break;
}
gotoxy(s[i].x,s[i].y);
s[i].stanow=s[i].stathen;//de quy cho lan sau
}
s[3].stanow=s[3].stathen;
delay();
if(!kbhit())
goto con3;
}
/************************************************************/
void movedown(void)
{
int i;
con4:
s[3].stathen=4; //xet diem dau tien cua con ran
gotoxy(s[3].x,s[3].y);
printf("%c",32);//xoa dau vet cu cua con ran s[3].y++;
gotoxy(s[3].x,s[3].y);
for(i=2;i>=0;i--)
{
s[i].stathen=s[i+1].stanow;
gotoxy(s[i].x,s[i].y);
switch(s[i].stathen)
{
case 1:
s[i].x++;
break;
case 2:
s[i].x--;
break;
case 3:
s[i].y--;
break;
case 4:
s[i].y++;
break;
}
gotoxy(s[i].x,s[i].y);
s[i].stanow=s[i].stathen;//de quy cho lan sau
}
s[3].stanow=s[3].stathen;
delay();
if(!kbhit())
goto con4;
}
/************************************************************************/
void delay(void)
{
unsigned long int z;
unsigned long int x,y;
for(x=0;x<=256;x++)
{
for(y=0;y<=200000;y++)
z++;
}
}
/********************************************************************/
void demo(void)
{
s[3].stanow=1;
moveright();
}