【はじめてのプチコン】移動量の調整 | りょうのゲーム塾

りょうのゲーム塾

再開、準備中。

チェックポイント
前回のサンプルに修正を行います。
修正の内容は移動速度の調整です。
現在の移動量はゲーム時間(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に代入してあります。
これらのデータは調整しなければならないことが多いので変数に代入してあります。
プログラムの中で複数個所使用する場合に楽になります。