今天无事可做 正好看到你求助了 于是操刀 胡乱写了一下
功能跟你的要求一样 方向为方向键和数字键的8(上),4(左),2(下),6(右)
当第一次按下f3时 然后移动 当移动到任意位置后 再次按下f3 这时两次按下的点之间就会画出一条直线了 此时按下f4就会取消这条线
#include<graphics.h>
#include<bios.h>
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define S_UP 0x4838
#define S_DOWN 0x5032
#define S_LEFT 0x4b34
#define S_RIGHT 0x4d36
#define ESC 0x011b
#define F3 0x3d00
#define F4 0x3e00
static int i=0,j,k;
turn(int *w,int *x,int *y,int *z,int *a,int *b,int *c,int *d,int type)
{
setcolor(0);
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);
switch(type)
{
case LEFT:if(*a>0)
{
setcolor(WHITE);
line(--(*w),*x,--(*y),*z);
line(--(*a),*b,--(*c),*d);
}
else {setcolor(15);
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case RIGHT:if(*c<640)
{
setcolor(WHITE);
line(++(*w),*x,++(*y),*z);
line(++(*a),*b,++(*c),*d);
}
else {setcolor(15);
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case S_LEFT:if(*a>0&&(*a)-5>0)
{
setcolor(WHITE);
line((*w)-=5,*x,(*y)-=5,*z);
line((*a)-=5,*b,(*c)-=5,*d);
}
else {setcolor(15); *w=5;*y=5;*a=0;*c=10;
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case S_RIGHT:if(*c<640&&(*c)+5<640)
{
setcolor(WHITE);
line((*w)+=5,*x,(*y)+=5,*z);
line((*a)+=5,*b,(*c)+=5,*d);
}
else {setcolor(15); *w=640-5;*y=640-5;*a=640-10;*c=640;
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case UP:if(*x>0)
{
setcolor(WHITE);
line(*w,--(*x),*y,--(*z));
line(*a,--(*b),*c,--(*d));
}
else {setcolor(15);
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case DOWN:if(*z<480)
{
setcolor(WHITE);
line(*w,++(*x),*y,++(*z));
line(*a,++(*b),*c,++(*d));
}
else {setcolor(15);
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case S_UP:if(*x>0&&(*x)-5>0)
{
setcolor(WHITE);
line(*w,(*x)-=5,*y,(*z)-=5);
line(*a,(*b)-=5,*c,(*d)-=5);
}
else {setcolor(15); *x=0;*z=10;*b=5;*d=5;
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
case S_DOWN:if(*z<480&&(*z)+5<480)
{
setcolor(WHITE);
line(*w,(*x)+=5,*y,(*z)+=5);
line(*a,(*b)+=5,*c,(*d)+=5);
}
else {setcolor(15); *x=480-10;*z=480;*b=480-5;*d=480-5;
line(*w,*x,*y,*z);
line(*a,*b,*c,*d);}
break;
}
}
lock(int w,int b)
{
if(i==0){ i=1; j=w; k=b; }
else { setcolor(3); line(w,b,j,k); i=0; }
}
unlock(int w,int b)
{ i=0; setcolor(0); line(w,b,j,k); }
main()
{
int gd=DETECT,gm=0;
int w=5,x=0,y=5,z=10,a=0,b=5,c=10,d=5;
registerbgidriver(EGAVGA_driver);
initgraph(&gd,&gm,"");
setcolor(WHITE);
line(w,x,y,z);
line(a,b,c,d);
while(1)
{
switch(bioskey(0))
{
case LEFT:turn(&w,&x,&y,&z,&a,&b,&c,&d,LEFT);break;
case RIGHT:turn(&w,&x,&y,&z,&a,&b,&c,&d,RIGHT);break;
case S_LEFT:turn(&w,&x,&y,&z,&a,&b,&c,&d,S_LEFT);break;
case S_RIGHT:turn(&w,&x,&y,&z,&a,&b,&c,&d,S_RIGHT);break;
case UP:turn(&w,&x,&y,&z,&a,&b,&c,&d,UP);break;
case DOWN:turn(&w,&x,&y,&z,&a,&b,&c,&d,DOWN);break;
case S_UP:turn(&w,&x,&y,&z,&a,&b,&c,&d,S_UP);break;
case S_DOWN:turn(&w,&x,&y,&z,&a,&b,&c,&d,S_DOWN);break;
case F3:lock(w,b);break;
case F4:unlock(w,b);break;
case ESC:cleardevice();setcolor(RED);outtextxy(170,200,"Thank you for use this program!");getch();return 0;
}
}
getch();
closegraph();
}