チェックポイント プレイヤの移動を追加したプログラムです。 簡単な説明をブロック毎に記載します。 今回は内容が多いので間違いもあると思いますがそこは勘弁してくださいm(__)m
|
| ■プログラム |
左右のキーでプレイヤが移動0001 ' initialize 0002 UFO_X = 0:UFO_F = 0 0003 PLY_X = 15:PLY_F = 0 0004 ' game loop 0005 @LOOP 0006 VSYNC 1 0007 CLS 0008 ' task 0009 GOSUB @UFO 0010 GOSUB @PLAYER 0011 GOTO @LOOP 0012 ' UFO 0013 @UFO 0014 IF UFO_F!=0 GOTO @UFO_MVL 0015 ' move right 0016 LOCATE UFO_X, 0 0017 PRINT "A" 0018 UFO_X = UFO_X + 1 0019 IF UFO_X < 32 THEN RETURN 0020 UFO_X = 31 0021 UFO_F = 1 0022 RETURN 0023 ' move left 0024 @UFO_MVL 0025 LOCATE UFO_X, 0 0026 PRINT "A" 0027 UFO_X = UFO_X - 1 0028 IF UFO_X >= 0 THEN RETURN 0029 UFO_X = 0 0030 UFO_F = 0 0031 RETURN 0032 ' player 0033 @PLAYER 0034 IF PLY_F == 1 GOTO @PLY_MVR 0035 IF PLY_F == 2 GOTO @PLY_MVL 0036 ' stop 0037 LOCATE PLY_X,21 0038 PRINT "P" 0039 K = BUTTON() 0040 IF K AND 8 GOTO @PLY1 0041 IF K AND 4 GOTO @PLY2 0042 RETURN 0043 @PLY1 0044 PLY_F = 1 0045 RETURN 0046 @PLY2 0047 PLY_F = 2 0048 RETURN 0049 ' move right 0050 @PLY_MVR 0051 IF PLY_X < 30 THEN PLY_X = PLY_X + 1 0052 LOCATE PLY_X,21 0053 PRINT "P" 0054 IF BUTTON() AND 8 THEN RETURN 0055 PLY_F = 0 0056 RETURN 0057 ' move left 0058 @PLY_MVL 0059 IF PLY_X > 0 THEN PLY_X = PLY_X - 1 0060 LOCATE PLY_X,21 0061 PRINT "P" 0062 IF BUTTON() AND 4 THEN RETURN 0063 PLY_F = 0 0064 RETURN
|
| ■プログラム |
初期化0001 ' initialize 0002 UFO_X = 0:UFO_F = 0 0003 PLY_X = 15:PLY_F = 0
|
2行目:UFOの初期化
3行目:プレイヤの初期化
どちらとも初期位置の設定とフラグを0にしています
UFOのフラグは0が右移動で、1が左移動
プレイヤのフラグは0が停止、1が右移動、2が左移動です
| ■プログラム |
ゲームループ0004 ' game loop 0005 @LOOP 0006 VSYNC 1 0007 CLS 0008 ' task 0009 GOSUB @UFO 0010 GOSUB @PLAYER 0011 GOTO @LOOP
|
ゲームループではUFOとプレイヤを実行しています
| ■プログラム |
UFOタスク0012 ' UFO 0013 @UFO 0014 IF UFO_F!=0 GOTO @UFO_MVL ============================================ 右に移動する ============================================ 0015 ' move right 0016 LOCATE UFO_X, 0 0017 PRINT "A" 0018 UFO_X = UFO_X + 1 0019 IF UFO_X < 32 THEN RETURN 0020 UFO_X = 31 0021 UFO_F = 1 0022 RETURN ============================================ 左に移動する ============================================ 0023 ' move left 0024 @UFO_MVL 0025 LOCATE UFO_X, 0 0026 PRINT "A" 0027 UFO_X = UFO_X - 1 0028 IF UFO_X >= 0 THEN RETURN 0029 UFO_X = 0 0030 UFO_F = 0 0031 RETURN
|
UFOタスクではフラグにより0の場合右移動し、1の場合左移動を行います
どちらともにUFOを表示したあとUFOのx方向の座標を更新します。
右移動は+1、左移動は-1です。
座標を計算した後に画面の端に到達したか判定をしています。
右移動の場合にはUFO_Xが31で右端ですが31では右端に表示できるので実際には右端の座標31を超えたときに右端に到達したと判断しています。
要するに新しいX座標が32以下のとき右に移動したことになります。
逆にここでx座標が32のときは画面外なのでx座標を画面内に戻すためにUFO_Xに31を入れています。
そのあと左移動させるためにUFO_Fに1を設定しています。
左移動はその逆なので座標が0以下のとき画面外なので座標を0に戻し右移動させるためにフラグを0にしています。
| ■プログラム |
プレイヤタスク0032 ' player 0033 @PLAYER 0034 IF PLY_F == 1 GOTO @PLY_MVR 0035 IF PLY_F == 2 GOTO @PLY_MVL ============================================ プレイヤ停止 ============================================ 0036 ' stop 0037 LOCATE PLY_X,21 0038 PRINT "P" 0039 K = BUTTON() 0040 IF K AND 8 GOTO @PLY1 0041 IF K AND 4 GOTO @PLY2 0042 RETURN 0043 @PLY1 0044 PLY_F = 1 0045 RETURN 0046 @PLY2 0047 PLY_F = 2 0048 RETURN ============================================ プレイヤ右移動 ============================================ 0049 ' move right 0050 @PLY_MVR 0051 IF PLY_X < 30 THEN PLY_X = PLY_X + 1 0052 LOCATE PLY_X,21 0053 PRINT "P" 0054 IF BUTTON() AND 8 THEN RETURN 0055 PLY_F = 0 0056 RETURN ============================================ プレイヤ左移動 ============================================ 0057 ' move left 0058 @PLY_MVL 0059 IF PLY_X > 0 THEN PLY_X = PLY_X - 1 0060 LOCATE PLY_X,21 0061 PRINT "P" 0062 IF BUTTON() AND 4 THEN RETURN 0063 PLY_F = 0 0064 RETURN
|
プレイヤの場合はプレイヤの状態を停止、右移動、左移動に分けました。
0が停止、1が右移動、2が左移動です。
最初にフラグを判定して1の場合に右移動へジャンプします。
2のときは左移動へジャンプします。
そうでないときは停止ということになります。
ここで関数を使っています。
| ■書式 |
変数 = BUTTON()
|
DSiのキーの情報を取得します。
|
ここでは細かいことは抜きにして右キーと左キーを判断します。
IF BUTTON() AND 8 THEN 右キーが押されているときの処理
IF BUTTON() AND 4 THEN 左キーが押されているときの処理
プレイヤの3つの状態のプログラムはともにプレイヤを表示します。
停止は移動しないので座標の変更がありません。
右移動、左移動はUFOと同じですが少しプログラムの書き方を変えてみました。
この場合、移動する前に現在の座標を判断して、画面端にいなければ座標を更新します。
画面端の場合には何もしません。
実はこちらの方が少しプログラムがスッキリしていますね。
プログラムの書き方は一つでないためその場にあった書き方をすると分かりやすくなります。
移動の後の判定はやはりキーの判定です。
停止の場合は右キーと左キーの両方を判定しました。
右キーが押されている場合には右移動へ、左キーが押されていれば左移動へとフラグを変更しています。
右移動は右キーが押されている間右移動なので右だけ判定しています。
もし右キーが押されていなければ右移動をやめ停止状態になります。
左移動も同様です。