HSP3 プログラミングの基礎V | |
![]() ![]() ![]() |
(3) 入力
数値や文字列を入力するには、配置オブジェクトの入力ボックス(input命令)を使う。これ以外の入力命令として、キーボードやマウスの状態を入力する命令を学習する。
◎ キー入力チェック
指定したキーコードのキーが押されているかどうかを判定し、結果は変数に格納される。
getkey 変数, キーコード
指定したキーが押されていれば1、押されていなければ0が変数に格納される。
キーコードは次の通りである。
1 マウスの左ボタン 18 [ALT] 37 カーソルキー[←] 2 マウスの右ボタン 20 [CAPSLOCK] 38 カーソルキー[↑] 3 キャンセル([CTRL]+[BREAK]) 27 [ESC] 39 カーソルキー[→] 4 3ボタンマウスのまん中のボタン 32 スペースキー 40 カーソルキー[↓] 8 [BACKSPACE] 33 [PAGEUP] 48〜57 [0]〜[9](メインキーボード) 9 [TAB] 34 [PAGEDOWN] 65〜90 [A]〜[Z] 13 [ENTER] 35 [END] 96〜105 [0]〜[9](テンキー) 16 [SHIFT] 36 [HOME] 112〜121 [F1]〜[F10] 17 [CTRL]
[Esc]キーが押されたらプログラムを終了する。
mes "[Esc]キーを押すと終了します。"
repeat
getkey flag, 27 ;キー入力チェック
if flag = 1 : end
wait 10
loop
stop
[Esc]キーを押すとプログラムが終了する(ウィンドウが閉じる)。
特定のキーのON/OFFを判定することができる(特定のキーしか判定できない)。
wait命令はrepeat〜loop命令で永久ループとなっているので入れている。
◎ キー入力情報取得
押されているキーに対応した値が変数に格納される。例えば、[CTRL]を押しながら[ENTER]を押すと変数には96(=64+32)が格納される。
stick 変数, 非トリガータイプキー指定, ウィンドウアクティブチェック
非トリガータイプキー指定を設定するとキーリピートに対応できる。例えば、4つのカーソルキーを押したままでも情報が取得できるようにするには、15(=1+2+4+8)を設定する。
キーの値(2進数の各ビットに対応している。)
1 カーソルキー[←] 16 スペースキー 256 マウスの左ボタン 2 カーソルキー[↑] 32 [ENTER] 512 マウスの右ボタン 4 カーソルキー[→] 64 [CTRL] 1024 [TAB] 8 カーソルキー[↓] 128 [ESC]
押したカーソルキーに対応したメッセージを表示する。[Esc]キーが押されたらプログラムを終了する。
mes "[Esc]キーを押すと終了します。" repeat stick kk ;キー入力情報 if kk = 128 : end ;[Esc] if kk = 1 : mes "左" ;[←] if kk = 2 : mes "上" ;[↑] if kk = 4 : mes "右" ;[→] if kk = 8 : mes "下" ;[↓] wait 10 loop stop
押したカーソルキーに対応したメッセージが表示される。押し続けても表示されるメッセージは1回だけである。
キーを押している間、メッセージが表示されるようにする。(キーリピート)
mes "[Esc]キーを押すと終了します。" repeat stick kk, 15 ;キー入力情報 if kk = 128 : end ;[Esc] if kk = 1 : mes "左" ;[←] if kk = 2 : mes "上" ;[↑] if kk = 4 : mes "右" ;[→] if kk = 8 : mes "下" ;[↓] wait 10 loop stop
キーを押している間、メッセージが表示される。
2つ以上のキーを同時に押すとメッセージが表示されなくなる。これは、2つ以上のキーを同時に押すと、キーの値の加算値が変数に格納されるためである。例えば、左と下を同時に押すと変数には9(=1+8)が格納されて、どのif文も真にならない。
2つ以上のキーを同時に押してもメッセージが表示されるようにする。
mes "[Esc]キーを押すと終了します。" repeat stick kk ;キー入力情報 if kk & 128 : end ;[Esc] if kk & 1 : mes "左" ;[←] if kk & 2 : mes "上" ;[↑] if kk & 4 : mes "右" ;[→] if kk & 8 : mes "下" ;[↓] wait 10 loop stop
2つ以上のキーを同時に押してもメッセージが表示される。
条件式の等号(=)を論理積(and)の演算子(&)に変更した。
例えば、左と下を同時に押すと変数には9が格納されるが、「9 & 1」、「9 & 8」どちらも真と判定される。
変数kk=9のとき、kkは2進数で表すと1001となる。
kk & 1 kk & 2 kk & 4 kk & 8 kk=9 kk=9=1001 kk=9=1001 kk=9=1001 kk=9=1001 キー値 1=0001 2=0010 4=0100 8=1000 論理積 1=0001 0=0000 0=0000 8=1000 真偽 真 偽 偽 真
カーソルキーで画像を動かす。
buffer 1 picload "gazou1.bmp" screen 0, 640, 480 x = 100 ;X座標 y = 100 ;Y座標 d = 10 ;移動量 repeat redraw 0 color 255, 255, 255 boxf pos x, y gcopy 1, 0, 0, 32, 32 redraw 1 stick kk, 15 ;キー入力情報 if kk & 128 : end ;[Esc] if kk & 1 : x = x - d ;左 if kk & 2 : y = y - d ;上 if kk & 4 : x = x + d ;右 if kk & 8 : y = y + d ;下 wait 10 loop stop
カーソルキーに対応して、画像が移動する。上下の1つと左右の1つを同時に押すと斜めに移動する。
(参考 : 画像の移動)
◎ マウスの入力
キー入力命令でマウスボタンを判定することができる。ここでは、マウスカーソル(マウスポインタ)の座標について学習する。
マウスポインタの座標が格納されているシステム変数である。
mousex mousey
マウスの現在の座標を表示する。
repeat color 255, 255, 255 boxf color 0, 0, 0 pos 100, 100 mes "("+mousex+","+mousey+")" wait 50 loop stop
HSPのウィンドウ内のマウスの現在座標が表示される。
wait 50としているので、0.5秒(500ミリ秒)ごとの座標が表示される。HSPのウィンドウ外にマウスポインタがあるときは座標は変化しない。
クリックしたポイントを中心に円を描画する。半径は乱数で決定する。
randomize repeat stick kk if kk = 256 { r = rnd(100) x1 = mousex + r y1 = mousey + r x2 = mousex - r y2 = mousey - r circle x1, y1, x2, y2, 0 } wait 50 loop stop
クリックすると円が描画される。
0.5秒のウエイト(wait 50)が入っているので、反応が少し遅い。
「wait 50」を「await 50」に変更する。
クリックすると すぐに 円が描画される。
![]() ![]() ![]() |
|
2006 © Hiroshi Masuda |