【チラシのうら 43日目】FORループ制御を改良しました。
43日目と言いつつ1ヶ月近く経過しているのですが… (^ω^;)
BASICプログラムのサンプルのアイディアをChat-GPTに挙げてもらったらSNAKE GAMEを提案してきました。
リアルタイムキー入力が必要ですね…と言う訳でINKEY$を実装。
ついで(?)にSNAME GAME本体もChat-GPTに作ってもらったら…こんなサブルーチンを作ってきました。
6000 '================================
6010 ' エサをランダム配置
6020 '================================
6030 FX=INT(RND(1)*20)
6040 FY=INT(RND(1)*20)
6050 ' ヘビと重なっていないか確認
6060 FOR I=1 TO SNL
6070 IF FX=X(I) AND FY=Y(I) THEN 6030
6080 NEXT I
6090 RETURN
コレを実行すると場合によっては6070行目でFORループの外にジャンプを繰り返し、ループ処理用のスタックがオーバーフローします。
※ヘビが短いうちは起きにくいですが、蛇が長くなると確実に発生します。
まっとう(?)な手段としてはループ外にジャンプしないようにBASICプログラムの方を修正するのですが、そうは言っても作りがちなコードではあるので、この構造でもスタックオーバーフローを起こさなくする修正を行いました。
合わせてループからの脱出を容易にするためにBREAK文を追加しました。
BREAK文の実装に立ちはだかったのがマルチステートメントとNEXT I,J,K とか書けてしまうNEXT文
いやコレどうしろと … めんどくせー … で時間掛かりました。
キーボードに使用しているCardKBはキーが押されたことは取得できますが、キーが離された事は取得できないので、ゲームに使うには無理があります。
次のサンプルプログラムを実現できない可能性が高いので、GAME用にWiiクラッシックコントローラかスーパーファミコンのコントローラを使用できるようにしました。※前回の記事
スーパーファミコンのコントローラは動作が若干怪しい気がしないでもない…300円で買ったジャンク品だからか?
Wiiクラッシックコントローラの方が反応が良い気がします。












