昔話:N88BASICを思い出してみる
Tweetさらにディープな世界へ突入する。
BASICのコードをもう一度書いてみたいと言う欲求が抑えられず、色々と探っていたら、とてもよいソフトを見つけました。
僕がBASICにはまった当時のN88-BASICがここに完全再現されています。懐かし過ぎる。このソフトはとても進化していて、昔のような一行ずつの入力ではなく、編集はきちんとしたエディタが開きます。かなり良い感じです。
昔を思い出しながら、前の昔話で書いた、例のスキーゲームのコードを書いてみました。
10 ' スキーゲームだよどうでしょう。分からない人には分からないかもですが、懐かしい人にはむちゃくちゃ懐かしいはず。ぐっと来るポイントを紹介します。
20 ' Edit by Naagle 2007-12-02
30 ' -- 初期化 --
40 CONSOLE 24,10,1:WIDTH 80,25 ' スクリーンサイズ指定 80*20
50 CLS ' 画面の消去
60 RANDOMIZE(VAL(RIGHT$(TIME$,2))) ' 乱数発生を時間のファクタで調整
70 PRINT "キー操作 z:左 x:右です。"
80 PRINT "HIT [S] KEY"
90 W$=INPUT$(1) ' キー操作を受け付ける
100 IF W$="S" OR W$="s" THEN GOTO 120 ELSE GOTO 90 ' Sだったら先へ
110 ' -- メインルーチン --
120 XX=10:I=0:MX=20 'XX:ゲレンデ発生位置 I:ゲレンデの変化係数 MX:自分の位置
130 I=INT(RND*3)-1 ' 乱数発生 -1,0,1
140 XX=XX+I
150 IF XX<1 THEN XX=1
160 IF XX>50 THEN XX=50
170 LOCATE XX,23:PRINT "* *" ' ゲレンデ表示
180 A$=INKEY$ ' 操作受付
200 IF A$="Z" OR A$="z" THEN MX=MX-1 ' Zが押されたら左
210 IF MX<1 THEN MX=1 ' はみ出し判定
220 IF A$="X" OR A$="x" THEN MX=MX+1 ' Xが押されたら右
230 ' ZZ$=SCRN$(MX,10,1) '座標の一文字取得
240 ' IF ZZ$="*" THEN GOTO 280 ' ぶつかったら終わり
250 LOCATE MX,10:PRINT "@" ' 自分表示
260 FOR T=1 TO 20000:NEXT ' FORループで待ちを入れるよ
270 GOTO 130 ' お得意の永久ループ
280 ' --- 終了処理 ---
290 PRINT "死にました"
300 PRINT "HIT ANY KEY"
310 A$=INPUT$(1)
320 END
N88BASIC使いの懐かしい部分その1
260 FOR T=1 TO 20000:NEXT ' FORループで待ちを入れるよ
無駄なループをここで作り出します。単純にゲームの難易度調整のため、タイマーを入れると言う行為です。
N88BASIC使いの懐かしい部分その2
60 RANDOMIZE(VAL(RIGHT$(TIME$,2))) ' 乱数発生を時間のファクタで調整
130 I=INT(RND*3)-1 ' 乱数発生 -1,0,1
乱数発生関数です。これなしではゲーム作成が成立しません。RNDは乱数を発生させるやつ。RANDOMIZEは何気に重要で、これをやってあげないといつでも同じ系列の乱数が発生してしまいます。それを調整するために秒数からファクタを拾ってきて毎回違う乱数を発生させます。要は同じゲレンデにならないようにする調整です。
N88BASIC使いの懐かしい部分その3
270 GOTO 130 ' お得意の永久ループ
命令をよく知らなかったっていうのもありますが、サブルーチンなんて使いません。がつがつGOTOで飛ばします。永久ループも使いまくりです。
しかし。実は、このコードまだ完成していません。一番肝心の当たり判定のところがうまく動かなくてつまずいています。
230 ' ZZ$=SCRN$(MX,10,1) '座標の一文字取得ここです。スクリーン上の文字列を取得する関数は、SCAN$だと思うんですけど、なんだか分からないがここで入力待ちになってしまいます。仕方ないので今のところコメント化です。
240 ' IF ZZ$="*" THEN GOTO 280 ' ぶつかったら終わり
ほんとに後一歩なんです。ネットで情報調べてもほとんど載ってないし。もうちょっと頑張ってみます。
|
Tweet|