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 は毒状態の変数です.ヘビがこの食べ物を食べるときはいつでも。それを逆にして、前の道に戻る必要があります..はい、ヘビは元に戻りますが、問題は、ヘビが前の道に戻らなかったことですが、毒を食べる前の前の方向とは反対です...

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

2 に答える 2

0

ここでの問題は、頭の方向をどのように決定するかということです。そして、尻尾はどこに描かれていますか?回答によっては、これはさまざまな問題が原因である可能性があります。尾の適切な方向 (d) を知るには、ヘビの現在のセグメントのすべての座標だけでなく、最後に占有され、現在解放されている位置も保存する必要があるようです。配列にも保持しますか?その場合、 .reverse() 関数は間違った結果を返します。これは、尾の代わりに頭を配置するのではなく、尾の前の点、つまり尾が占めていた点の代わりに配置するためです。前のターンで。

ここで失敗する可能性があるもう 1 つのことは、更新メカニズムです。反転後、頭が自動的に 1 スペース分進むように更新されているのかもしれません (ただし、間違った方向に進みます)。繰り返しになりますが、私たちはあなたのコードについてもっと知る必要があります。

于 2013-03-18T16:48:42.547 に答える
0

あなたは頭ではなく尻尾に新しい方向性を置いています。 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 しかないかどうかを確認してから、現在の方向を逆にする必要があります。

于 2013-03-18T14:10:21.880 に答える