前回覚えたGotoは行ったきり帰ってこない命令でした。
「千と千尋の神隠し」でゆばあばの姉のところに行くとき、片道切符だった。
そんな感じの命令です。
でも、好きなところを実行した後、また戻りたいということがあります。
デスノートで主人公の月がいったんデスノートを手放し、自分のところに戻すように。
そんな命令はGOSUBです。
GOSUB @ラベル
@ラベル名に飛ぶところはGotoと同じですが、
行った先でRETURNがあると、GOSUB @ラベルの次の行に処理が戻ります。
ある決まったことをやらせるのに便利です。
では、以前作ったボタンで移動するプログラムを改良してみましょう。
ボタンの入力を受け付けるには? BUTTON VSYNC
改良は、残像が出ないようにします。
---------------------------------------------------------------------
ACLS '画面をクリアする
AX=0 'X座標の位置
AY=0 'Y座標の位置
AZ=0 'Z座標の位置
BX=0 'X座標の位置前回分
BY=0 'Y座標の位置前回分
BZ=0 'Z座標の位置前回分
A=0 'ボタン変数
WHILE A != 32 'Bボタンが押されるまで繰り返す
A = BUTTON() 'ボタンの入力状態の取得 ()内を指定しないときは0と同じ
IF (A AND 1) == 1 THEN '上ボタンが押されたら
AY = AY - 1 'AYから1を引く("大"の位置をひとつ上にする)
ENDIF
IF (A AND 2) == 2 THEN '下ボタンが押されたら
AY = AY + 1 'AYから1を足す("大"の位置をひとつ下にする)
ENDIF
IF (A AND 4) == 4 THEN '左ボタンが押されたら
AX = AX - 1 'AXから1を引く("大"の位置をひとつ左にする)
ENDIF
IF (A AND 8) == 8 THEN '右ボタンが押されたら
AX = AX + 1 'AXから1を足す("大"の位置をひとつ右にする)
ENDIF
IF (A AND 256) == 256 THEN 'Lボタンが押されたら
AZ = AZ - 1 'AZから1を引く("大"の位置をひとつ奥にする)
ENDIF
IF (A AND 512) == 512 THEN 'Rボタンが押されたら
AZ = AZ + 1 'AZから1を足す("大"の位置をひとつ手前にする)
ENDIF
IF AX < 0 THEN 'AXが0より小さくなったら
AX = 0 ' AXに0を入れる(画面からはみださないように)
ENDIF
IF AX > 49 THEN 'AXが49より大きくなったら
AX = 49 ' AXに49を入れる(画面からはみださないように)
ENDIF
IF AY < 0 THEN 'AYが0より小さくなったら
AY = 0 ' AYに0を入れる(画面からはみださないように)
ENDIF
IF AY > 28 THEN 'AYが28より大きくなったら
AY = 28 ' AYに28を入れる(画面からはみださないように)
ENDIF
IF AZ < -256 THEN 'AZが-256より小さくなったら
AZ = -256 ' AZに-256を入れる(画面からはみださないように)
ENDIF
IF AZ > 1024 THEN 'AZが1024より大きくなったら
AZ = 1024 ' AZに1024を入れる(画面からはみださないように)
ENDIF
' LOCATE AX, AY, AZ '位置の指定
' PRINT "大" 'キャラクタ"大"の表示
GOSUB @HYOJI
VSYNC '画面同期
WEND '繰り返しここまで
LOCATE 0,0,0 '画面位置の初期化
END ' 新しく追加
' 表示用サブルーチン
@HYOJI
' もし、AXとAY もしくはBXとBYが異なるなら(同じ位置でないなら)
IF AX != BX OR AY != BY THEN
' 前回の表示位置に設定
LOCATE BX, BY, BZ
' 空を表示(これで前回の位置の大を消すことができる
PRINT " "
' 判定終わり
ENDIF
' 今回の位置に設定
LOCATE AX, AY, AZ
' 大を表示
PRINT "大"
' 前回の位置変数に今回の位置を設定
BX = AX
BY = AY
BZ = AZ
' GOSUB用戻り命令
RETURN
------------------------------------------------------------------------
前回と異なるのは、前の場所を覚えておいてその場所に" "を表示させます。
そうすることで、大を消して、次の位置に大を表示します。
GOSUBを使用することでメインのプログラムが見やすくなります。
実行するとこんな感じです。
「千と千尋の神隠し」でゆばあばの姉のところに行くとき、片道切符だった。
そんな感じの命令です。
でも、好きなところを実行した後、また戻りたいということがあります。
デスノートで主人公の月がいったんデスノートを手放し、自分のところに戻すように。
そんな命令はGOSUBです。
GOSUB @ラベル
@ラベル名に飛ぶところはGotoと同じですが、
行った先でRETURNがあると、GOSUB @ラベルの次の行に処理が戻ります。
ある決まったことをやらせるのに便利です。
では、以前作ったボタンで移動するプログラムを改良してみましょう。
ボタンの入力を受け付けるには? BUTTON VSYNC
改良は、残像が出ないようにします。
---------------------------------------------------------------------
ACLS '画面をクリアする
AX=0 'X座標の位置
AY=0 'Y座標の位置
AZ=0 'Z座標の位置
BX=0 'X座標の位置前回分
BY=0 'Y座標の位置前回分
BZ=0 'Z座標の位置前回分
A=0 'ボタン変数
WHILE A != 32 'Bボタンが押されるまで繰り返す
A = BUTTON() 'ボタンの入力状態の取得 ()内を指定しないときは0と同じ
IF (A AND 1) == 1 THEN '上ボタンが押されたら
AY = AY - 1 'AYから1を引く("大"の位置をひとつ上にする)
ENDIF
IF (A AND 2) == 2 THEN '下ボタンが押されたら
AY = AY + 1 'AYから1を足す("大"の位置をひとつ下にする)
ENDIF
IF (A AND 4) == 4 THEN '左ボタンが押されたら
AX = AX - 1 'AXから1を引く("大"の位置をひとつ左にする)
ENDIF
IF (A AND 8) == 8 THEN '右ボタンが押されたら
AX = AX + 1 'AXから1を足す("大"の位置をひとつ右にする)
ENDIF
IF (A AND 256) == 256 THEN 'Lボタンが押されたら
AZ = AZ - 1 'AZから1を引く("大"の位置をひとつ奥にする)
ENDIF
IF (A AND 512) == 512 THEN 'Rボタンが押されたら
AZ = AZ + 1 'AZから1を足す("大"の位置をひとつ手前にする)
ENDIF
IF AX < 0 THEN 'AXが0より小さくなったら
AX = 0 ' AXに0を入れる(画面からはみださないように)
ENDIF
IF AX > 49 THEN 'AXが49より大きくなったら
AX = 49 ' AXに49を入れる(画面からはみださないように)
ENDIF
IF AY < 0 THEN 'AYが0より小さくなったら
AY = 0 ' AYに0を入れる(画面からはみださないように)
ENDIF
IF AY > 28 THEN 'AYが28より大きくなったら
AY = 28 ' AYに28を入れる(画面からはみださないように)
ENDIF
IF AZ < -256 THEN 'AZが-256より小さくなったら
AZ = -256 ' AZに-256を入れる(画面からはみださないように)
ENDIF
IF AZ > 1024 THEN 'AZが1024より大きくなったら
AZ = 1024 ' AZに1024を入れる(画面からはみださないように)
ENDIF
' LOCATE AX, AY, AZ '位置の指定
' PRINT "大" 'キャラクタ"大"の表示
GOSUB @HYOJI
VSYNC '画面同期
WEND '繰り返しここまで
LOCATE 0,0,0 '画面位置の初期化
END ' 新しく追加
' 表示用サブルーチン
@HYOJI
' もし、AXとAY もしくはBXとBYが異なるなら(同じ位置でないなら)
IF AX != BX OR AY != BY THEN
' 前回の表示位置に設定
LOCATE BX, BY, BZ
' 空を表示(これで前回の位置の大を消すことができる
PRINT " "
' 判定終わり
ENDIF
' 今回の位置に設定
LOCATE AX, AY, AZ
' 大を表示
PRINT "大"
' 前回の位置変数に今回の位置を設定
BX = AX
BY = AY
BZ = AZ
' GOSUB用戻り命令
RETURN
------------------------------------------------------------------------
前回と異なるのは、前の場所を覚えておいてその場所に" "を表示させます。
そうすることで、大を消して、次の位置に大を表示します。
GOSUBを使用することでメインのプログラムが見やすくなります。
実行するとこんな感じです。