3

私はTI-Basicでヘビゲームを書いています。移動するたびに、ヘビの頭が尻尾のどこかに当たっているかどうかを確認する必要があります。テールは循環リストベースのキューとして保存され、一定時間で開始と終了を追加できます。

唯一の難しい部分は、すべての反復でこれと同様のことをしなければならないことです:(S =リストのサイズ)

For(I,1,S)
    If X=LX(I) and Y=LY(I)
    Then
        Disp "GAME OVER"
        Return
    End
End

かなり短いループですが、10個のアイテムのリストでも永遠にかかります。私はシーケンスの方法を試しました:

If sum(seq(X=LX(I) and Y=LY(I),I,1,S))
...

私が考えることができる他の唯一の最適化は、NからN + 2の値をチェックしないことです(ヒットする可能性のあるテールの最初の部分はN + 3であるため)が、それは4ポイント後に問題を延期するだけです。 14ポイントでゲームをプレイできないようにすることは、10ポ​​イント後にプレイできないことよりも優れています。

リンクケーブル(またはアセンブリを作成したい)がないため、アセンブリを使用することはできません。

4

3 に答える 3

2

TI-Basic を使用したことがない...

しかし、ゲーム ボードの 2D 配列も格納するのはどうでしょうか。その配列の各要素は、ヘビが存在するかどうかを示します。先に進むときは、配列の値を先頭のポイントに設定し、古い末尾のエンド ポイントの値をクリアします。次に、衝突をテストするには、2D 配列を 1 回検索するだけです。

于 2010-09-03T01:26:53.487 に答える
2

ブロック全体:

For(I,1,S)
    If X=LX(I) and Y=LY(I)
    Then
        Disp "GAME OVER"
        Return
    End
End

次のように置き換えることができます:

If sum(X=LX and Y=LY)
Then
    Disp "Game Over"
    Return
End

X=LXのすべての要素に区分的にテストを適用しLX、同じことが にも当てはまりますY=LY。は、2 つのリストの交点にsum()があるかどうかをチェックします。1

于 2014-05-02T17:02:29.760 に答える
1

Snake をプログラミングしていたときに行ったことは、Snake の前のピクセルがオンになっているかどうかを確認することでした。そうである場合、このピクセルが「食べ物」ピクセルかどうかを確認します。そうでない場合、ゲームは停止します。

たとえば、I と J は頭と尾の位置、(F, G) はヘビの方向、(M, N) は食べ物です。

if Pxl-Test(I+F, J+G) #pixel in front of snake
then
if I+F=M and J+G=N
stop
end

2D 配列よりもはるかにメモリを節約します。

于 2012-05-18T04:52:42.180 に答える