「スパゲッティ」になったって構わない。オレはただ、ソースコードを1画面に収めたいだけなんだ。い、いや、3行に収めたいんだっ!! ニンテンドーDSi/3DSでBASICプログラミングに挑戦。
いきなりじゃが、今回は完成済みのプログラムリストから見てもらおうかのう。
オイオイ、マジでいきなりだナ。のっけから地味なコードが並んだら、読者が減るんじゃねェの?
そ、そう言われるとミもフタもないが……。一応、簡単で短いプログラムじゃから見てくれんかのう。
CLEAR 'ショキカ @GAME 'カベ CLS 'ガメンクリア COLOR 9 FOR I=0 TO S LOCATE RND(28)+4,RND(24) PRINT"■"; NEXT 'ゲーム COLOR 15 Y=12 'メインループ FOR X=0 TO 31 B=BUTTON() IF B!=0 THEN Y=Y+1 ELSE Y=Y-1 IF Y<0 THEN Y=0 IF Y>23 THEN Y=23 WAIT 10 IF CHKCHR(X,Y)!=0 THEN END LOCATE X,Y PRINT"●"; NEXT 'クリア S=S+10 'カベ フヤス GOTO @GAME
いかがでしょうか? いきなりのサンプルプログラム、驚かれましたか?
内容は至って単純で、UFOを操作し、青い障害物を避けながら進むゲームです。UFOは強制的に右上に向かって動いていきますが、ボタンを押している間だけ右下に下降します。画面右端まで着いたら障害物が増えて、また左端から再スタートします。
このルールと画面でピンときた人も多いことでしょう。これはいわゆる「ワンキーゲーム」です。マイコンゲーム黎明期から現在まで脈々と続く、シンプルな操作がそのままジャンル名になったゲームです。
キー(またはボタン)入力のON/OFFだけで進むというルール以外は全て自由。操作系のプログラミングが手軽なので、ショートなアクションゲームに多く見られ、プログラム初心者の“友”でもありました。
例によって、BASICは読み下しが比較的カンタンじゃし、コメントも付いておるので1行ごとの説明はせんが……、ここで1つ挙げるとするなら、『BUTTON()』関数はニンテンドーDSi/3DSのボタンの押下状態を取得する命令じゃな。全ボタンの状態がビットで返ってくるのじゃが、今回のプログラムはワンキーゲームなので全て“OFF(0)”かどうかだけをチェックしておる。
見慣れないと言えば、『CHKCHR()』もそうですね。見たところ、指定された座標にあるキャラクターをチェックしているようですが……?
さよう! 本来はキャラクタコードが返ってくるのじゃが、今回は障害物に当たったかどうかだけ分かればよいので、これまた戻り値が“0”かどうかだけをチェックしておるな。便利な命令じゃが、かつてのマイコンのBASICでは、マシンによってこの手の命令があるかないかまちまちで、『方言』に泣いたユーザーも多かったものじゃ。
大体分かったけど……。これってもう完成してるよね。今回はこれで終わり?
まさかな。さすがにシンプル過ぎるから肉付けしていこうって話じゃねェの?
す、するどい……。が、むしろ真逆じゃ! このプログラムをこれから短くしてゆくぞ!
!
!?
な……、なぜ?
皆さん、「1画面プログラム」という言葉をご存じでしょうか。
ウィンドウUIや画面解像度の向上もあって、現在は「1画面」と言ってもさまざまですが、昔の“マイコン”では文字サイズ・画素数ともに固定が普通(スクリーンモードや表示形式など、ある程度の変更は可能)でした。例えば、1画面に入る文字の最大数が横40文字×縦25行という感じです。
そんな1000文字程度のスペースに、完結した実行可能なプログラムを何とか詰め込むのが1画面プログラムです。ショートプログラムの1つの目安として、また、ムダを省いた華麗なプログラムの形として、1画面プログラムは、かつてのコンピュータ誌で多くの誌面を彩ったものです。
うーん……。ソースコードを見直したり、いわゆる『ダイエット』なら、今でも普通にあることですが……。
似たところはあるが、それはむしろ可読性や実行速度のためじゃろ。1画面プログラムは、『スパゲッティ』になろうが、何が何でも1画面に収めるのがゴールじゃから、全く別の世界じゃのう。もちろん、見やすいに越したことはないんじゃがのう。
そこまでして“1画面に収める”理由がよく分からないのですが……。
フム、良い質問じゃぞ。
では、実際にソースコードを短縮しながら、ボチボチと理解してもらおうかのう。
今回のプログラムはもともと短いから、コメントとインデントを削ればもう1画面じゃな。とはいえ、プチコンの編集画面は『29文字×24行』じゃから、その意味では昔のマイコンよりも“キビシイ世界”かもしれんのう。
『ムダを省いた』とも言えるけど、何だか見づらいリストになった気もするなあ……。
神崎よ、この程度で『見づらい』と言うのは、まだまだ早いぞ。ギリギリの詰め込みこそがロマンじゃな。
よし、おヌシら付いてこい! 『3行プログラム』に挑戦じゃ!
3行プログラム?
ロ……、ロマン?
Copyright © ITmedia, Inc. All Rights Reserved.