<P> #include<stdio.h>
#include<graphics.h>
#include<conio.h>
int main()
{
int x,s,m,n,k,g; //x为数组单元位置,进行([0],[1]),([2],[3])尾位置消除操作,与[2x+2][2x+3]进行头位置增加操作,
//s为标志位操作,s=-1时进行判定进入上下操作,s=1时进行进入左右操作
//当s=-1时,m进行上下偏移操作,当s=1,n进行左右偏移操作,
//k备用,进行循环判定时设定值for(k=0;k<100;k++)
x=0; //初值设定
s=1;
m=0;
n=0;
k=0;
int a[1000]; //存储节点位置;直线的两个端点,开始坐标和结束坐标存放位置
a[0]=100;
a[1]=100;
a[2]=200;
a[3]=100; //设定第一条直线,坐标为(100,100,100,200)由起始点指向下一点,方向向下</P>
<P>
printf("\n\n\n\n\n请按任意键进入画图界面\n\n\n\n\n\n");
getch(); //按键进入画图界面
initgraph(640,480); //进入画图界面
line(a[0],a[1],a[2],a[3]); //第一个条直线起始位置</P>
<P> </P>
<P> while(1) //初始化结束,开始进入循环
{
Sleep(10);</P>
<P> </P>
<P>//第一条直线操作开始</P>
<P> Sleep(100);
if(a[1]==a[3]) //判定==,要注意不是赋值=
{
s=1; //进入左右操作
if(a[0]>a[2])
{ setcolor(BLACK);
line(a[0],a[1],a[0]-1,a[3]);
a[0]=a[0]-1; // ←
}
else if(a[0]<a[2])
{ setcolor(BLACK);
line(a[0],a[1],a[0]+1,a[3]);
a[0]=a[0]+1; // →
}
else //a[0]=a[2]
{ x=x-1;
for(k=0;k<=1000;k=k+2)
{
a[k+2]=a[k];
a[k+1]=a[k+3];
}
} //if的结束括号</P>
<P> }</P>
<P>//第一条直线操作结束</P>
<P> </P>
<P>
//第x条直线操作开始
if(kbhit())
{ g=getch(); //如果成功键入则执行以下操作</P>
<P> if((g==115)&&(s==1)) //s键 ↓ 原来进行左右操作现在才能进行上下操作
{
s=-1; //进入上下操作
x=x+1; //进行存储操作
a[2*x+2]=a[2*x];
a[2*x+3]=a[2*x+1]+1;
setcolor(WHITE);
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}</P>
<P> if((g==119)&&(s==1)) //w键 ↑ 原来进行左右操作现在才能进行上下操作
{
s=-1; //进入上下操作
x=x+1; //进行存储操作
a[2*x+2]=a[2*x];
a[2*x+3]=a[2*x+1]-1;
setcolor(WHITE);
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}</P>
<P> </P>
<P>
if((g==100)&&(s==-1)) //d键 →
{
s=1; //进入左右操作
x=x+1; //进行存储操作
a[2*x+2]=a[2*x]+1;
a[2*x+3]=a[2*x+1];
setcolor(WHITE);
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}</P>
<P>
if((g==97)&&(s==-1)) //a键 ←
{
s=1; //进入左右操作
x=x+1; //进行存储操作
a[2*x+2]=a[2*x]-1;
a[2*x+3]=a[2*x+1];
setcolor(WHITE);
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}</P>
<P>
}
</P>
<P> </P>
<P> else //没有键入,自动执行以下操作
{
if(a[2*x]==a[2*x+2]) //进入上下操作
{ s=-1; </P>
<P> if(a[2*x+1]>a[2*x+3])
{
setcolor(WHITE);
a[2*x+3]=a[2*x+3]-1; // ↑
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}</P>
<P> else if(a[2*x+1]<a[2*x+3])
{
setcolor(WHITE);
a[2*x+3]=a[2*x+3]+1; // ↓
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}
}
</P>
<P> if(a[2*x+1]==a[2*x+3]) //进入左右操作
{
s=1;
if(a[2*x]>a[2*x+2])
{
setcolor(WHITE);
a[2*x+2]=a[2*x+2]-1; // ←
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}
else if(a[2*x]<a[2*x+2])
{
setcolor(WHITE);
a[2*x+2]=a[2*x+2]+1; // →
line(a[2*x],a[2*x+1],a[2*x+2],a[2*x+3]);
}
</P>
<P> }
} </P>
<P>
</P>
<P>//第x条直线操作结束</P>
<P> </P>
<P> </P>
<P> } //while(1)的结束括号</P>
<P>
closegraph(); //退出画图界面</P>
<P>} //主函数结束括号</P>