2013-03-18 96 views
1
else if(po==true){ 
     snake_array.reverse(); 
     var i=0; 
     var c=snake_array[i]; 
     //paints head 
     paint_head(c.x,c.y); 
     for(i=1;i<snake_array.length;i++){ 
      //paints body 
      var c=snake_array[i]; 
      paint_body(c.x,c.y); 
      if(snake_array[i].x<snake_array[i-1].x){ 
       d="right"; 
      } 
      else if(snake_array[i].x>snake_array[i-1].x){ 
       d="left"; 
      } 
      else if(snake_array[i].y>snake_array[i-1].y){ 
       d="up"; 
      } 
      else if(snake_array[i].y<snake_array[i-1].y){ 
       d="down"; 
      } 
     } 
     //poison status false 
     po=false; 
    } 

po是毒性状态的变量..每当蛇吃这种食物。它应该被颠倒,回到它以前的踪迹。是的,蛇回复,但问题是蛇没有回到它以前的踪迹,但在它吃毒药之前与之前的方向相反...颠倒在游戏中的JavaScript数组

 x <-food 
    ^<-head   v <-tail    v <-tail 
     |     |      | 
     | >-becomes->  | >-instead of->  | 
>.....|    .......|     <.....| 
^     |      ^
|_tail    V <-head     |_head 
+0

漆身后,做一个反向 – Sergio 2013-03-18 14:03:34

+0

不解决它sergio .. – InnZaayynn 2013-03-18 14:10:05

回答

1

你正在把你的新方向放在尾巴上而不是头上。 d在循环的每次迭代中设置,这意味着唯一重要的是最后一个。因此,由于您的尾巴在示例中朝下,因此d设置为向下。

您或者需要在反转前检查尾部,然后反转d或检查头部而不是尾部。

假设蛇是至少长度为2,执行下列操作,环路之外:

if(snake_array[0].x<snake_array[1].x){ 
    d="left"; // left or right depending on how your coordinate system works 
} ... 

这将只是看头部的面向。您可能需要检查一下,看蛇是否只有长度为1,然后只是逆转当前的方向。

+0

你能告诉我先生吗?我无法做到你所说的。 – InnZaayynn 2013-03-18 14:14:38

+1

@vaizaren刷新你的窗口,我已经添加了一个例子。 – 2013-03-18 14:15:28

+0

我试过你说的但是它没有解决..也许你可以告诉我你真正的意思是先生。 – InnZaayynn 2013-03-18 14:16:25

1

这里的问题是,你如何确定头的方向?尾巴在哪里绘制?根据你的答案,这可能是由于不同的问题。在我看来,要知道尾部的正确方向(d),不仅需要存储蛇的当前段的所有坐标,还需要存储最后一个位置的位置,现在也释放了。你是否也将它放在阵列中?如果是这种情况,那么.reverse()函数会给你一个错误的结果,因为它会使头部不在尾部位置,而是在尾部之前的位置,即尾部占据的位置在之前的回合中。

另一件可能失败的事情就是更新机制。也许逆转后,有一个更新,以便头部自动前进一个空间(但方向错误)?同样,我们需要了解更多的代码。

+0

你可以有我的整个代码,如果你想。并在那里检查.. – InnZaayynn 2013-03-19 12:58:40