昔話:[N88-BASIC]スキーゲーム、一応完成版公開
今日は急遽、動物園に行くことになったので散歩は無しかな。
前々からアップしているスキーゲームですが、一応の完成を見たのでUPします。
一番肝心な、BASICを動かすインタプリタですが、ここはちょっと日和まして、前回使っていたMBASIC.EXEはやめて、99BASICインタプリタというのを使っています。
理由は後述。
まずは、ソースを公開。
10 ' スキーゲームだよ スキーに見えなくてもとにかくスキーなのである
20 ' Edit by Naagle 2007-12-02 Ver0.01(永遠にver1.0にならない予定)
30 ' 2007-12-04 Ver0.02
40 ' 2007-12-09 Ver0.10 一応完成版
50 ' このプログラムは、「99 Basic Interpreter ver 1.19」で動作確認しています
60 ' サポートのページ右記です http://www.sagami.ne.jp/tadaka/99Basic/
70 ' -- 初期化 --
80 CLS ' 画面の消去
90 SCREEN 4,1 ' スクリーンモードの設定
100 WIDTH 80,25 ' スクリーンサイズ指定 80*25
110 CONSOLE 2,23,0 ' スクロールサイズ指定
120 RANDOMIZE(VAL(RIGHT$(TIME$,2))) ' 乱数発生を時間のファクタで調整
130 LOCATE 0,10:PRINT "キー操作 z:左 x:右です。"
140 PRINT "HIT [S] KEY"
150 W$=INPUT$(1) ' キー操作を受け付ける
160 IF W$="S" OR W$="s" THEN GOTO 180 ELSE GOTO 150 ' Sだったら先へ
170 ' -- メインルーチン --
180 XX=10:I=0:MX=25 'XX:ゲレンデ発生位置 I:ゲレンデの変化係数 MX:自分の位置
190 STL=29:L=0:COUNT=0 ' STL:開始難易度 L:難易度 COUNT:スコア
200 I=INT(RND*3)-1 ' 乱数発生 -1,0,1
210 XX=XX+I 'ゲレンデを動かす
220 L=STL-INT(COUNT/20) ' ほーらーほらほらぁ、どんどん難しくなるよー。うぃー。
230 IF L<2 THEN L=2
240 IF XX<1 THEN XX=1
250 IF XX>50 THEN XX=50
260 I=INT(RND*(L-1)) ' 乱数発生 コブ
270 LOCATE XX,25
280 A=COUNT-(INT(COUNT/20)*20)
290 IF A=1 THEN PRINT "||";SPACE$(I+1);"P";SPACE$(L-I+1);"||" ELSE PRINT "||";SPACE$(I+1);"^";SPACE$(L-I+1);"||" ' ゲレンデ表示、レベルアップごとに旗発生
300 A$=INKEY$ ' 操作受付
310 IF A$="Z" OR A$="z" THEN MX=MX-1 ' Zが押されたら左
320 IF MX>79 THEN MX=79 ' はみ出し判定
330 IF A$="X" OR A$="x" THEN MX=MX+1 ' Xが押されたら右
340 IF MX<0 THEN MX=0 ' はみ出し判定
350 Z$=SCRN$(MX,10,1) ' ぶつかったら終わり(ここが苦労したよ、、、)
360 IF Z$="|" OR Z$="^" THEN GOTO 440 ' ゲレンデもしくはコブにぶつかったら終わり
370 IF Z$="P" THEN L=L+1 ' P(旗)を取ったらレベルが上がらない
380 LOCATE MX,10:PRINT "@" ' 自分を表示。@って一番人間ぽくない?なんとなくだけど
390 FOR I=1 TO 50000 :NEXT ' ループタイマー(難易度はここで調整してください)小さくすると難くなります。
400 COUNT=COUNT+1 ' スコア+1
410 LOCATE 50,0:PRINT "LEVEL:";STL-L;" SCORE:";COUNT ' SCORE表示
420 GOTO 200 ' お得意の永久ループ
430 ' --- 終了処理 ---
440 PRINT "死にました"
450 PRINT "HIT ANY KEY"
460 A$=INPUT$(1)
470 END
なぜインタプリタを変えたかの理由ですが、SCRN$が使えないとうまくプログラムが組めなかったもので、、、。この99BASICと言うやつは、N88-BASICとMSXのベーシックの良い所取りになっているようで、SCRN$が難なく使えます。
SCRN$を導入したことによりプログラムがかなりシンプルになりました。僕のプログラミングのモットーは、「ソースは単純、コメントは無駄に多く」なので、まー期待した通りになったと思います。
前回からの変更点も含め、ゲームのやり方は下記の通りです。
・スキーゲームです。ゲレンデを下に下りていく要領です。
・左[Z]:右[X]です。
・両側はゲレンデの壁です。ぶつかったら簡単に逝きます。
・コブ("^")を乱数で発生させています。これもぶつかったら簡単に逝きます。
・たまーに旗("P")が出てきます。
これを定期的に取ってあげないとレベルがガツガツ上がっていきます。
・後はひたすら落ちていくのみです。
・最終目標はありません。ハイスコアを競う感じで。
インタプリタをダウンロードしてまで、このゲームをやって頂ける方は果たして何人居るか分かりませんが、べーまがの初期を思い出したい方は一度やってみて下さい。
これで、スキーゲームは一応完結したいと思います、バグ、改善点ありましたらご一報下さい。
次は、グラフィックの勉強を兼ねて、例のトロンゲームを作ろう。