|
20鱼币
新人开始学做贪吃蛇,只做出了一小部分,这是直线控制移动的问题,
单独把第一行和最后一行的运行代码都行,组合起来就打不到想要的效果了,求各位大大帮一下
- <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>
复制代码
|
|