今回はキーボードで自機を動かせるようにします。
stickは現在キーが押されているか調べる命令です。
キーには判別するための値が振られており、
押されているキーの値が指定した変数に代入されます。
1 : カーソルキー左(←)
2 : カーソルキー上(↑)
4 : カーソルキー右(→)
8 : カーソルキー下(↓)
16 : スペースキー
32 : Enterキー
64 : Ctrlキー
128 : ESCキー
256 : マウスの左ボタン
512 : マウスの右ボタン
1024 : TABキー
複数のキーが押されている場合は、その値の合計が代入されます。
例えば、カーソル右とスペースキーが押されている場合、4+16で20が変数に代入されます。
キーが押されているか判定をするときは「&」演算子が便利です。
例:スペースキーが押されているか判定する場合
stick key
if key & 16:スペースキーが押されたときの処理
この命令の第2引数は非トリガータイプキー指定といって、
押しっぱなしのキーを検出するかというものです。
シューティングゲームでいうと、マシンガン(押しっぱなしで連射)は非トリガータイプキー指定にして、
ミサイル(一回押すごとに一発発射)は非トリガータイプキー指定にしない、という具合に使い分けます。
指定には先ほどのキーの値を使います。
全てのカーソルキーを指定したい場合、1+2+4+8で15にします。
buffer 1,40,40 picload "自機.bmp" screen 0,400,400 *main stick key,15 if key & 1:x-- if key & 2:y-- if key & 4:x++ if key & 8:y++ boxf 0,0,400,400 pos x,y gcopy 1,0,0,40,40 redraw 1 wait 1 redraw 0 goto *main
さらに自機が画面からはみ出ないように改変します
buffer 1,40,40 picload "自機.bmp" screen 0,400,400 *main stick key,15 if key && 1:x-- if key && 2:y-- if key && 4:x++ if key && 8:y++ if x < 0 :x = 0 if x > 360:x = 360 if y < 0 :y = 0 if y > 360:y = 360 boxf 0,0,400,400 pos x,y gcopy 1,0,0,40,40 redraw 1 wait 1 redraw 0 goto *main