チェックポイント 前回のサンプルに修正を行います。 修正の内容は移動速度の調整です。 現在の移動量はゲーム時間(1フレーム)あたり1づつ増加および減少していますが、移動速度が速いのでUFOを狙い撃ちするのが難しいと思われます。 そうなると移動速度を落とさなければなりません。 現在移動量が1なのでこれより少ないくするには少数点以下の量となるわけです。 プチコンで扱う数値変数は整数を扱う変数でなく、小数点以下の値を扱える固定小数点方式の実数です。 今度はこの実数で移動の量を調整してみましょう。
|
移動量を変数にして初期化して使うように修正します。
サンプルは下記の通りです。
| ■プログラム |
0001 ' initialize 0002 GOSUB @SYS_INI 0003 GOSUB @UFO_INI 0004 GOSUB @PLY_INI 0005 ' game loop 0006 @LOOP 0007 GOSUB @SYS_MAIN 0008 ' task 0009 GOSUB @UFO_TASK 0010 GOSUB @PLY_TASK 0011 GOTO @LOOP 0012 ' 0013 ' system 0014 ' 0015 @SYS_INI 0016 SYS_CNT = 0 0017 RETURN 0018 ' 0019 @SYS_MAIN 0020 VSYNC 1 0021 CLS 0022 SYS_CNT = SYS_CNT + 1 0023 SYS_KEY = BUTTON() 0024 RETURN 0025 ' 0026 ' UFO task 0027 ' 0028 @UFO_INI 0029 UFO_X = 0 0030 UFO_SX = 0.1 0031 UFO_F = 0 0032 RETURN 0033 ' 0034 @UFO_TASK 0035 LOCATE UFO_X, 0 0036 PRINT "A" 0037 IF UFO_F!=0 GOTO @UFO_MVL 0038 ' move right 0039 UFO_X = UFO_X + UFO_SX 0040 IF UFO_X < 32 THEN RETURN 0041 UFO_X = 31 0042 UFO_F = 1 0043 RETURN 0044 ' move left 0045 @UFO_MVL 0046 UFO_X = UFO_X - UFO_SX 0047 IF UFO_X >= 0 THEN RETURN 0048 UFO_X = 0 0049 UFO_F = 0 0050 RETURN 0051 ' 0052 ' player task 0053 ' 0054 @PLY_INI 0055 PLY_X = 15 0056 PLY_SX = 0.5 0057 PLY_F = 0 0058 RETURN 0059 ' 0060 @PLY_TASK 0061 LOCATE PLY_X,21 0062 PRINT "P" 0063 ON PLY_F GOTO @PLY_STOP,@PLY_MVR,@PLY_MVL 0064 STOP 0065 ' stop 0066 @PLY_STOP 0067 IF SYS_KEY AND 8 GOTO @PLY1 0068 IF SYS_KEY AND 4 GOTO @PLY2 0069 RETURN 0070 @PLY1 0071 PLY_F = 1 0072 RETURN 0073 @PLY2 0074 PLY_F = 2 0075 RETURN 0076 ' move right 0077 @PLY_MVR 0078 PLY_X = PLY_X + PLY_SX 0079 IF PLY_X > 31 THEN PLY_X = 31 0080 IF SYS_KEY AND 8 THEN RETURN 0081 PLY_F = 0 0082 RETURN 0083 ' move left 0084 @PLY_MVL 0085 PLY_X = PLY_X - PLY_SX 0086 IF PLY_X < 0 THEN PLY_X = 0 0087 IF SYS_KEY AND 4 THEN RETURN 0088 PLY_F = 0 0089 RETURN
|
まずは新しい命令について説明します。
| ■書式 |
ON 変数 GOTO @ラベル,@ラベル,...
|
変数で指定されるラベルへジャンプします。
|
・変更点1
サンプルでは63行目に使用しています。
0063 ON PLY_F GOTO @PLY_STOP,@PLY_MVR,@PLY_MVL
0064 STOP
ここでは変数PLY_Fの内容が0のとき@PLY_STOPへ、1のとき@PLY_MVRへ、2のとき@PLY_MVLへジャンプします。
PLY_Fが0以下もしくは3以上のときは64行目から実行します。
要するに変数の内容番目のラベルへジャンプします。(ただし、先頭は0番目です)
変数の内容が0以下でラベルの個数以上のときON GOTOの次の命令を実行します。
ここではバグ回避のためにSTOP命令で停止しています。
・変更点2
システム、UFOおよびプレイヤの初期化などもサブルーチンにしてまとめてあります。
この方がメインルーチンの動作が分かりやすくなります。
・変更点3
ラベルを統一しています。
これはプチコンのラベル名が8文字以下なので長いラベル名が使用できないためできるだけ短く統一しています。
UFOはもともと短いのでそのまま使用します。
PLAYERは長いのでPLYで変数名もラベルも統一します。
SYS_INI、UFO_INIおよびPLY_INIのINIはイニシャライズ(初期化)の意味です。
SYS_MAINはシステムの主なプログラムをまとめます。
UFO_TASKとPLY_TASKのTASKはタスクと呼ばれるキャラクタのプログラムのかたまりです。
・変更点4
UFOの移動量がUFO_SXに代入してあります。
プレイヤの移動量はPLY_SXに代入してあります。
これらのデータは調整しなければならないことが多いので変数に代入してあります。
プログラムの中で複数個所使用する場合に楽になります。