月面着陸ゲーム(CASIO fx-5800P用BASICソースコード)
ふとe-Gadget ブログ (管理人:Krtyskiさん)を見つけ、昔持ってたポケットコンピュータが懐かしくなり夢中で記事を読みあさりました。気づけば手元にプログラム関数電卓fx-5800Pがw 7千円ちょい。

ポケコン全盛期は月面着陸ゲームでよく遊んでましたので、ソースを探したのですがCASIO BASIC版は見つかりませんでした。そこで、北ソフト工房さん掲載のC言語ソースを参考にしてCASIO BASICへ移植してみました。
1. 月面着陸ゲーム プレイ画面
①ゲーム起動画面。搭載燃料250。一度に50まで投入できます。燃料1で落下速度が0.1減速。適当にキーを押せばスタートです。
②プレイ画面。1行目が着陸ゲージです。「E」が着陸船で、左端の「)」が月面です。途中の「)」は大気圏のつもりでしたがよく考えたら月に大気はありません。まあ目安になるかと思って残してあります。ALT(高度)とVEL(落下速度)およびF(燃料)がインジケーターです。ここでは燃料を25投入しています。EXEキーを押せば進みます。
2. 月面着陸ゲームソースコード ※fx-5800P BASIC用です
注意1: ソースは可読性UPのため字下げして//でコメントを書いていますが、いずれもCASIO BASICではエラーになりますので、実際にご利用される際には除去して下さい。
注意2: 使用燃料の入力にはe-Gadget ブログ の入力ボックスを利用させていただいています。月面着陸ゲームをプレイするfx-5800PにはこのINPIというサブプログラムが必要になります。
"==MOON LANDER==”
"F:250, →1:-0.1V"
" MAX 50(1 SEC)"
"START?(ANY KEY)"◢
Do
100→A // 高度 初期値100
100÷15→B // ゲージ表示用変数(画面桁数-1)
0→V // 速度
250→F // 燃料
While A > 0.1
CLS
50→M // 最大燃焼ユニット
Locate 1,1,")...).........." // 着陸ゲージ
Int(A÷B+.5)→J // 四捨五入
If J≦0:Then 1→J:IfEnd // ゲージ1以下はエラーになるので0の場合は1に
Locate J,1,"E" // 着陸船の描画
Locate 1,3,"ALT: ”:Locate 5,3,A // スペースはゴミ消し
Locate 9,3,"VEL: ":Locate 13,3,V // スペースはゴミ消し
Locate 1,4 "F: ":Locate 3,4,F // Vの小数部がゴミるので空白で消す
Locate 6,4,"→USE?"
If F<M:Then F→M:IfEnd // 残燃料が少ない場合
// INPI呼び出して消費燃料の入力
Do
13→X:4→Y:2→D:1→E
Prog "INPI"
Z→R
LpWhile Not(0≦R And R≦M)
// 速度の計算
V+1.62→V // 重力加速度
V-(r * 0.1)→V // 燃焼
// 残燃料の計算
F-R→F
// 高度の計算
A-V→A
WhileEnd
Int(A/B+.5)→J
If J≦0:Then 1→J:IfEnd
Locate 1,1,")...).........."
Locate 1,3,"ALT: ”:Locate 5,3,A
Locate 9,3,"VEL: ":Locate 13,3,V
If v>1.0
Then
Locate 1,2," xx Crash xx"
Locate J,1,"x"
Else
Locate 1,3,">> Congrats <<"
Locate J,1,"G"
IfEnd
Locate1,4,"AGAIN(ANY QUIT(0"
Do:Getkey→K:LpWhile K=0
LpWhile K=25
Cls:"BYE"
3.遊び方
月面着陸船エンジンの逆噴射で落下速度を調整しながら月面軟着陸を目指します。燃料(F)はたったの250しかありませんので使い所が難しく、しかも一度に使える燃料は50までです。
着陸判定:落下速度(V)1.0以下&高度(A)0.1以下(※マイナス可)で成功となります。
4. 補足など
CASIO BASIC搭載機なら他の機種でも動作すると思います。その場合
- 画面サイズに合わせて、着陸ゲージの出力桁数と関係変数Bを調整してみて下さい
- キーコードが異なりますので、GetKey判定値を調整して下さい
- 「入力ボックス」サブルーチンは機種に合ったものを使って下さい
難易度を調整したい方は、燃料搭載量を増減してみて下さい。もし燃料200で着陸できたら神です。300にするとかなり余裕がでます。燃料250は結構いいゲームバランスだと思います。高度も上げられますがゲームが冗長になります。なお重力加速度1.62は月のリアルな数値なのでイジらないほうがいいと思います。
p.s.
当初もっと楽勝で完成すると思っていたのですが、パラメータ入力の対話操作実装で行き詰まりました。CASIO BASIC標準の入力コマンドでは画面が崩れてしまうためでかなり致命的でした。そこで困ったときは先人の知恵です。冒頭で引用したブログにこの問題を解決してくれる入力ボックスという素晴らしいサブプログラムが公開されていました。感謝ですね。