2017-10-16 7 views
2

私はYouTubeのビデオに従っており、私は理解できないコードの一部があります。あなたが私を助けてくれることを願っています。スネークゲームの描画配列機能

配列はヘビの体の配列です。

Public void Draw() 
{ 
    for (int i = Body.length - 1; i > 0; i- -) 
     Body[i] = Body[i - 1]; 
} 

このコードは何をしますか?

答えて

3

Bodyは、ヘビの最初の位置から始まるすべての位置を示す配列であると仮定します。このループは、ヘビの位置を表す配列内のすべての位置(最端から最前面に移動して始まる位置)に対して、それが前の位置になるように設定します。最終結果は、すべての位置が1行下に移動されることを除いて、以前とまったく同じ配列です。

ここでは順序が重要であることに注意してください。配列の位置1から開始した場合、Body [1]をBody [0]の値に割り当て、次のステップでBody [2]をBody [1]の値に割り当てます。配列はBody [0]の初期値でオーバーライドされます。

事実、「描画」は、この場合のメソッドのやや誤解を招く名前です。なぜなら、ヘビを思考させるように「描画」するのではなく、スニークを更新しているからです。

+0

これは逆です。 「Body [i] = Body [i-1]」は、Body [99]をBody [100]に割り当て、次のステップでBody [98]をBody [99]などに割り当てることを意味します。あなたの答えでは、** for forループ**のポイントも見落としてしまいました。この例ではあなたの例はあまり適用されず、最終的な結論は無効になります(「配列全体がBody [0]の初期値で上書きされるまで)コードはすべての点を1つのインデックスで正しくシフトしていますが、すべて同じ値を上書きしているわけではありません) – Flater

+0

@Flater「Body [1]をBody [0]に割り当てる」「Body [1] 0]」となる。また、「配列全体がBody [0]の初期値でオーバーライドされるまでの結論」は、順序が逆転した場合に起こることになります。以前の修正を念頭に置いてお読みください。明確にするために編集されました。誤解をおかけして申し訳ありません。 – Neil

+0

** forループが元に戻されなかった場合、何が起こるかについて答えるのはなぜですか?問題はOPのコードスニペットが達成するものであり、わずかに異なるコードスニペットが達成するものではありません。この特定の場合、操作の順序は、通常のforループが無意味な点にとって重要です。 – Flater

関連する問題