TI-Basicで、リスト内のすべての値をチェックしてください
-
26-09-2019 - |
質問
私は、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 + 2にNの値をチェックしないことです(ヒットすることができますあなたの尾の最初の部分は、N + 3であるため)、それだけプット問題オフ4後ポイント、14ポイントで再生不可能ゲームを有するが、10ポイントの後に再生不可能であるよりも良好である。
私はリンクケーブル(またはアセンブリ書きたいという願望を)持っていないため、アセンブリ使用することはオプションではありません。
解決
使用されることはありませんTI-ベーシック...
しかし、どのようにもゲームボードの2次元配列を格納について。蛇が存在する場合、その配列の各要素を示します。あなたが前方に移動すると、ヘッドの点で配列の値を設定し、古いテールエンドポイントで値をクリア。そして、衝突のためのテストに、あなただけの2次元配列に1件の検索を行うことができます。
他のヒント
全体ブロック
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
のために行きます。 sum()
チェックリスト2の交差点で1
があるかどうます。
、私は蛇をプログラミングされたときに、蛇の前のピクセルが上だったかどうかを確認することでした。それがあった場合は、このピクセルは「食品」ピクセルであれば、私はそうでない場合、ゲームが停止する、チェックします。
例、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
二次元アレイよりもはるかに多くのメモリconservant。