スタートボタン |
"Push Ctrl Key"と表示しましたから、Ctrl Keyが押されたら、それを認識するようにします。一般的には"Push Ctrl Key"とだけ表示してあっても、ジョイパッドのボタンを押してもゲームスタートとなります。しかしジョイパッドの入力は自機を動かす処理を作る時に説明しますので、ここではCtrl Keyだけとします。
1.Ctrl Keyの入力を判断 | ||
2.押されていなかったら1.へ |
変数について
プログラムでは、いろいろな計算をするのに変数を使います。変数とは、数字や文字列を記憶させるための入れ物です。 x=3 と書いた場合、数学では「xは3である」という意味ですが、プログラムでは「変数xに3を入れろ」という意味です。「代入する」という言い方をよくします。数学でも、このxは変数と呼びますね? a=12 b=a+6 と書いた場合、「aに12を代入せよ」、「次に、aに6を足した値を変数bに代入せよ」という意味になります。つまり、bの値は18になります。 a=12 a=a+6 と書いた場合、2行目は「aに6を足した値を、aに入れなおせ」という意味であり、aは18になります。 gamename="ABOGADRO" ddprint gamename と書いた場合、 ddprint "ABOGADRO" と同じ意味になります。文字列はダブルクォーテーションで囲みます。 変数名は好きなようにつけていいのですが、HSPの命令と同じ名前をつけることはできません。HSPの標準機能では、変数に入れられるのは整数と文字列のみです。 |
1.Ctrl Keyの入力を判断 |
今どのキーが押されているかを判断するにはこうします。
digetkeystate k,0
1番目の引数には、キーの状態を代入する変数を指定します。キーの状態は数字で表されます。2番目の引数は、キーの種類を指定します。ゲームによく使うキーの場合、0です。ゲームによく使うキーとは、カーソルキー、Enter、Space、Esc、Shift、Ctrl、Alt、Z、X、Cです。
この命令を実行した時Ctrlキーが押されていたら、kには256が代入されます。他の値だったら他のキーが押されていた、または何も押されていなかったという事です。実はCtrlキーと同時に別のキーを押した場合も他の値になるのですが、ほとんどない事なので今は気にしないことにします。
2.押されていなかったら1.へ |
このような書き方をします。
*Wait_Ctrl
digetkeystate k,0
if k ! 256 {
goto *Wait_Ctrl
}
*Wait_Ctrl
これはラベルというものです。プログラムの途中の場所に名前をつけたい場合があります。そういう時に使います。*に続けて名前を書きます。
if 条件式 {
命令
命令
・
・
・
}
もし条件式が成り立っていたら"{"と"}"の間にある命令を実行します。成り立っていなかったら何もしません。
"if k ! 256"で「もしkが256でなかったら」という意味です。変数の説明で、"="は「代入する」という意味だと書きましたが、if文で使われた場合は「等しい」という意味になります。"if k=256"なら「もしkが256だったら」という意味です。"if k<256"なら「もしkが256より小さければ」ですし、"if k>=256"なら「もしkが256以上だったら」という意味です。
goto *Wait_Ctrl
プログラムは上から下に命令を実行していきますが、この流れを変えたい場合があります。"goto ラベル"で該当するラベルの位置に飛びます。
上記は、digetkeystate命令でどのキーが押されているか調べ、Ctrlキーが押されていなかったら戻ってdigetkeystate命令を行え、という処理になります。押されるまで次に進みません。
以上をふまえて、付加的な処理を追加して、前のプログラムを書き直します。
; プログラム起動時の初期設定 #include "hmm.as" title "ABOGADRO" diinit ddinit ddscreen 640,480,1,2 ; タイトル表示 await 16 ddcolor 0,0,0 ddboxf 0,0,640,480 ddcolor 255,0,0 font "MS 明朝",32 ddpos 232,100 ddprint "ABOGADRO" ddcolor 255,255,255 font "MS 明朝",16 ddpos 248,400 ddprint "Push Ctrl Key" ddredraw ; Ctrl Keyが押されるのを待つ *Wait_Ctrl await 16 digetkeystate k,0 if k!256 { goto *Wait_Ctrl }
; プログラム起動時の初期設定
これはコメント文です。";"の右側に書いた文字列はコメントとなります。プログラム実行時には無視されます。プログラム中に説明を入れたい場合に使います。個人で作る場合、誰にもプログラムを見せることはありませんが、後で見た時に何の処理だか分からなくなったら困るので、随所に説明を書きます。
diinit
DirectInputを初期化します。
*Wait_Ctrlの次行にあるawait 16
Ctrlキーが押されるのを待つ処理はループとなっています。こんなふうに長時間ループする処理を作った場合、OSが作業する時間を与えないと、ウィンドウが動かしにくくなったりします。
Ctrlキーを押すと次の処理に移ろうとしますが、もう下には命令文がないのでプログラムは終了し、ウィンドウが閉じます。
ひとくちメモ: |
・コメント文の別の利用方法 |
プログラムのテストをしたい時にもコメント文を使います。例えば、*Wait_Ctrlの次行にあるawait 16を抜いたらどうなるのだろうという事を確かめたい場合、;await 16というふうにセミコロンをつけて実行します。あとでセミコロンを消せばよいのです。await 16ごと消してしまった場合、後で思い出せなくなったら困りますね。1行くらいだったら忘れませんか? しかし、今「Ctrlキーの入力だけテストしたい。タイトル表示は実行させたくない」といったテストをする場合には有効です。ddinitからddredrawまでを全部コメント文にすればいいのです。 あるいは、640×480のフルスクリーンモードでテストしたり、320×240のウィンドウモードでテストしたりしたい場合はこうします。 ; ddscreen 640,480,0,2 ddscreen 320,240,1,2 1行目をコメント文にすればウィンドウモードに、2行目をコメントにすればフルスクリーンモードになります。 |