ある夜,かずがパソコンに向かい,ごちゃごちゃやっている。また,ゲームかとのぞき込むと以前買ってやった「HSP2.55プログラミング入門」を片手にHSP (Hot Soup Processor)の勉強をしているのである。妻に聞くと,ひとりでつまつま,たまにやっているとのこと。ヘぇー,こいつ勉強熱心なところもあるんだと感心してしまった。
3月14日 前々回(第151話参照)から,かずは魚雷船ゲームをHSPで作っている。戦艦から魚雷を落とし,海中にうようよしている潜水艦をやっつけるゲームである。潜水艦はミサイルで攻撃する。
戦艦を右左の矢印キーで動かすことと,潜水艦を一隻出現させるところまでは前回までで,できている。今日の目標は潜水艦を何隻も出現させることだ。
「つんから,つんから,潜水艦を出すときは,配列を使えばいいがいちゃ。説明しようか。」(富山弁解説 つんから,つんから=「どんどん続けて」のような意味)「なーん,やってみるちゃ」とHSPというプログラム開発環境に「やってみればなんとかなる」という程度に慣れたかずは,自力でプログラミングを進めていく。私は,しめしめとソファーで昼寝をする。富山も春めいてきたので,眠気が強い。一生懸命,考えているかずの後ろで1時間近く寝てしまった。
「できたよ」と言って,見せてくれたプログラムには,「なぜ」と悩んでしまうようなコードや考慮不足なところもあったが,なんにしても潜水艦はつんから,つんから現われ,ウィンドウ上を左から右に進んで行っていた。
プログラムは以下の約80ステップである。かずは妙な几帳面さを発揮して,全行にコメントを入れるという修行のようなコーディングをしたが,読者のみなさんはとても全行読む気にならないでしょうから,かいつまんで説明します。
dim ey,20,dim ex,20でey,exを0から19の20の要素を持つ配列として定義して,潜水艦20隻の現在位置を記録できるようにしている。repeat emx ~ loopの中でex.i(ex配列のi番目)に4を足して,各潜水艦を移動させている。emxは出現させた潜水艦の数である。ラベル*newe以降が新しい潜水艦を出現させる処理だ。
---------------------------------------- ;------初期処理------ buffer 1,,,1 ;ウィンドウID1を用意 picload "senkan2.bmp" ;グラフィックの読み込み screen 0,640,480, 1 ;画面サイズの設定 palcopy 1 ;パレットを ;グラフィックに合わせる randomize px=600 :py=40 ;自艦の初期位置 ex=1 ;敵の初期位置 dim ey,20 ;敵位置の配列変数を用意 dim ex,20 ; emx=0 ;------メインループ------ *main ;ラベル redraw 2 ;メイン画面に反映させない gosub *haikei ;背景設定にとぶ stick ky,15 ;キー入力 if ky=1{ ;自艦の移動 px-=8 if px<8{ px=8 } } if ky=4{ px+=8 if px>600{ px=600 } } pos px,py ;自艦の表示 gcopy 1,0,0,32,32 rnd z,50 ;変数zに0~99の数を代入 if a>10{ ;前回敵が表示されてから ;1秒以上経ってるか if emx<20{ ;敵の数が20機以下かの判定 if z=49{ ;乱数が49の時に敵を増やす gosub *newe ;敵の出現にとぶ } } } i=0 ;変数iの値を0にする repeat emx ;敵の数だけループさせる ex.i+=4 ;敵の移動 pos ex.i,ey.i ;敵の表示 gcopy 1,32,0,32,32 i+=1 ;変数iに1を足す loop a+=1 ;変数aに1を足す if ex.19>640{ ;最後の敵が通り過ぎて ;いないかの判定 gosub *owari ;ゲーム終了に跳ぶ } redraw 1 ;メイン画面の更新 wait 1 ;0.01秒待つ goto *main ;*mainに戻る ;------背景の設定------ *haikei ;ラベル color 0,255,255 ;画面を水色に塗りつぶす boxf 0,0,639,479 color 0,0,255 ;画面の下を青色に塗る boxf 0,60,639,479 ; return ;メインループに戻る ;------敵の出現------ *newe ;ラベル rnd ey.emx,340 ;乱数でy軸に値を設定 ey.emx+=100 a=0 ;変数aのリセット emx+=1 ;変数emxに1を足す return ;メインループに戻る ;------ゲームの終了------ *owari color 0,0,0 boxf 0,0,639,479 color 255,0,0 font "MS ゴシック",60,1 pos 150,200 mes "ゲームクリア" redraw 1 stop return ----------------------------------------ざっとソースを眺めていただけただろうか。実はこのソースは,私がレビューして「ここは意味がないぞ」とか「変数は読んでわかりやすいように,ちゃんと定義して,初期化して」などと注文を付け,直させたものである。
最初のコードは迷い箸を煮魚や,里芋の煮っ転がしに突き刺したように,ずいぶん悩んだあとがうかがえるコードだったが,それでも,かずは自力で何とか目標を達成していた。HSPはデバッグウィンドウも使えるし,強力な命令があるので短いコードで結果を出しやすいのである。