[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今日は、玉をキーボードで動かしてみようと思います。
キー情報は、getkey命令で取得します。getkey命令は、ある指定したキーが、押されている状態か押されていない状態かを取得する命令で、
getkey 変数, キーコード
と言う風に使います。
キーコードとは、キーボードのキー一つ一つに割り振られた番号のことで、次のようになっています。
キーコード : 実際のキー
------------------------------------------
1 : マウスの左ボタン
2 : マウスの右ボタン
3 : キャンセル([CTRL]+[BREAK])
4 : 3ボタンマウスのまん中のボタン
8 : [BACKSPACE](PC98の[BS])
9 : [TAB]
13 : [ENTER]
16 : [SHIFT]
17 : [CTRL]
18 : [ALT](PC98の[GRPH])
20 : [CAPSLOCK]
27 : [ESC]
32 : スペースキー
33 : [PAGEUP](PC98の[ROLLDOWN])
34 : [PAGEDOWN](PC98の[ROLLUP])
35 : [END](PC98の[HELP])
36 : [HOME](PC98の[HOMECLR])
37 : カーソルキー[←]
38 : カーソルキー[↑]
39 : カーソルキー[→]
40 : カーソルキー[↓]
48~57 : [0]~[9](メインキーボード)
65~90 : [A]~[Z]
96~105 : [0]~[9](テンキー)
112~121 : ファンクションキー [F1]~[F10]
(「HSP HELP Browser Ⅱ」 から引用)
この数値をgetkey命令に指定すると、押されている状態であれば変数に1が、押されていない状態であれば変数に0が代入されます。
実際に使えば分かると思います。ちょっと長いですが次のプログラムを実行してみてください。
// 初期位置
x = 100
y = 100
// 移動スピード
sp = 10
// 半径
r = 10
repeat
// キー情報取得
getkey hidari, 37
getkey ue, 38
getkey migi, 39
getkey sita, 40
// 移動
if (hidari == 1) {
x -= sp
}
if (ue == 1) {
y -= sp
}
if (migi == 1) {
x += sp
}
if (sita == 1) {
y += sp
}
// 描画始め ++++++++++++++++++
redraw 0
// 背景
color 0, 0, 0
boxf
// 玉
color 255, 255, 255
circle x - r, y - r, x + r, y + r
redraw 1
// 描画終わり ++++++++++++++++
wait 3
loop
カーソルキー(十字キー)を押すと、その方向に玉が動くと思います。
最初に
x -= sp
という書き方に触れておきますが、これは今まで使ってきた、
x = x - sp
と同じことです。つまり、xの値をspの値だけ減らす、と言う意味です。スマートに見えるので書き換えました。
今まではspの部分は定数を用いてきましたが、変数にすることで、「アイテム取得でスピードアップ!」と言うような処理が出来ます。今回はしていませんが、今後ゲームを作る際に、こういう書き方が必要になると思うので、こうしておきました。他に、spの代入する値を変更するだけで、spの部分の値を一括変更できるというメリットもあります。
キーの情報の取得はこの部分です。
getkey hidari, 37
getkey ue, 38
getkey migi, 39
getkey sita, 40
37,38,39,40と言うキーコードは、上の表で見ると、カーソルキーの左、上、右、下であることが分かると思います。
つまり、カーソルキーが押されているか押されていないかの情報が、それぞれ、hidari、ue、migi、sitaと言う変数に代入されることになります。
そして、その変数の値を利用しているところがここです。
if (hidari == 1) {
x -= sp
}
if (ue == 1) {
y -= sp
}
if (migi == 1) {
x += sp
}
if (sita == 1) {
y += sp
}
ここで、if (なんたら) { かんたら } という文が出てきました。この文をif文と言います。ifと言うのは英語で「もしも~ならば」という意味を持ちますが、プログラム上のif文もそうです。もし()内の条件が満たされていれば、{}内の処理をします。逆に()内の条件が満たされていなければ、{}内の処理を行いません。
ここで==は左辺と右辺が等しい場合、という条件を示します。つまり、それぞれ、hidari、ue、migi、sitaの値が1、つまりキーが押されている状態であれば{}内の処理を行うというものです。{}内の処理はそれぞれ、x座標、あるいはy座標を変化させる処理となっているので、カーソルキーを押すと、円が移動する、ということになります。
xを増やすか減らすかという符合の問題は、x座標の正方向が右、y座標の正方向が下、と言うことを考えれば分かると思います。
なんだかゲームっぽくなってきたと思いませんか?次はマウスでも触ってみるかもしれません。
あと、HSP HELP Browser Ⅱは、スクリプトエディタのメニューのヘルプ>HSP命令リファレンスを開く、から起動することが出来ますので、命令の詳細が知りたい時や、どんな命令や関数があるか知りたい時は開いてみてください。