漠水 发表于 2014-9-1 00:07:20

vc++制作贪吃蛇遇到的小问题,求解

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



<P> #include<stdio.h>
#include<graphics.h>
#include<conio.h>
int main()
{
int x,s,m,n,k,g;      //x为数组单元位置,进行(,),(,)尾位置消除操作,与进行头位置增加操作,
                  //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;      //存储节点位置;直线的两个端点,开始坐标和结束坐标存放位置
a=100;
a=100;
a=200;
a=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,a,a,a);         //第一个条直线起始位置</P>
<P> </P>
<P>while(1)         //初始化结束,开始进入循环
{
Sleep(10);</P>
<P> </P>
<P>//第一条直线操作开始</P>
<P> Sleep(100);
   
   if(a==a)       //判定==,要注意不是赋值=
   {
    s=1;          //进入左右操作
    if(a>a)
    {   setcolor(BLACK);
         
            line(a,a,a-1,a);
      a=a-1;       //   ←
   
    }
    else if(a<a)
    { setcolor(BLACK);
   
            line(a,a,a+1,a);
    a=a+1;       //   →
   
    }
else                     //a=a
{      x=x-1;
for(k=0;k<=1000;k=k+2)
{
   a=a;
      a=a;
}
}             //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=a;
   a=a+1;
   setcolor(WHITE);
            line(a,a,a,a);
   }</P>
<P>      if((g==119)&&(s==1))                  //w键↑原来进行左右操作现在才能进行上下操作
{                           
      s=-1;                            //进入上下操作
      x=x+1;                           //进行存储操作
   a=a;
   a=a-1;
   setcolor(WHITE);
            line(a,a,a,a);
   }</P>
<P> </P>
<P>
   if((g==100)&&(s==-1))                  //d键→
{                           
      s=1;                            //进入左右操作
      x=x+1;                           //进行存储操作
   a=a+1;
   a=a;
   setcolor(WHITE);
            line(a,a,a,a);
   }</P>
<P>
   if((g==97)&&(s==-1))                  //a键←
{                           
      s=1;                            //进入左右操作
      x=x+1;                           //进行存储操作
   a=a-1;
   a=a;
   setcolor(WHITE);
            line(a,a,a,a);
   }</P>
<P>
   }                     
   </P>
<P> </P>
<P>   else                  //没有键入,自动执行以下操作
   {
          if(a==a)          //进入上下操作
   {    s=-1;            </P>
<P>      if(a>a)      
   {   
    setcolor(WHITE);
    a=a-1;      //   ↑
    line(a,a,a,a);
            
    }</P>
<P>elseif(a<a)      
{   
   setcolor(WHITE);
    a=a+1;      //   ↓
    line(a,a,a,a);
            
    }

   }
   </P>
<P>   if(a==a)          //进入左右操作
   {
    s=1;         
    if(a>a)
    {   
   setcolor(WHITE);
    a=a-1;            //   ←
            line(a,a,a,a);   
    }
    elseif(a<a)
    {   
   setcolor(WHITE);
    a=a+1;            //   →
          line(a,a,a,a);
    }
</P>
<P>   }
            
   }               </P>
<P>
      </P>
<P>//第x条直线操作结束</P>
<P> </P>
<P> </P>
<P>}               //while(1)的结束括号</P>
<P>
closegraph();   //退出画图界面</P>
<P>}               //主函数结束括号</P>

735899422 发表于 2014-9-1 00:07:21

我以前做了一个 是用的小格子 你试试

流行语 发表于 2014-9-1 17:52:34

我现在也正在做贪食蛇呢,

漠水 发表于 2014-9-1 19:00:47

流行语 发表于 2014-9-1 17:52
我现在也正在做贪食蛇呢,

我没有用堆栈做,才做了控制直线移动部分就卡了快一周,感觉好难,都快看晕了:sweat:

流行语 发表于 2014-9-1 20:19:40

我现在正在想怎么做呢,还没有思路呢

漠水 发表于 2014-9-2 10:45:18

流行语 发表于 2014-9-1 20:19
我现在正在想怎么做呢,还没有思路呢

你可以尝试着做一条通过按键可以自由控制的直线,通过按键是否输入来进行判定,还要有尾部一点的消除和前进方向的增加,反正我是一小个模块一个个测试的,但是作为新手,基础太薄弱了,结构体不是很熟悉,要不就不要那么蛋疼了,好像论坛上就有贪吃蛇的代码,你可以看看

Mr.屎壳螂 发表于 2014-11-29 21:59:22

我做过一个,但是实现方法不一样.
页: [1]
查看完整版本: vc++制作贪吃蛇遇到的小问题,求解