人生一度はやってみよう MSX Basic 入門
9.カーソル指定と入力操作
これからはゲームプログラミングっぽいことを始めます。
一般的なプログラミング入門とは違います。
命令を覚えることは大切ですが、それよりも画面の中に世界を
構築していくワクワクを楽しんでください。
小説を読むとき、頭の中で世界をイメージしますよね。
同じように画面の中の世界をイメージしていきましょう。
前回の作業でスクリーンモードを0にしているなら
screen 1 [エンターキー]
を実行してから始めてください。
カーソル位置を指定しよう
カーソル位置を変更する命令LOCATEを使ってみましょう。
PRINT 命令はカーソルの位置に表示を行います。
つまり LOCATE を使えば画面の好きなところに表示できるのです。
x座標(横軸)とy座標(縦軸)を指定して使います。
LOCATE <x座標>, <y座標>
x座標を変えて大文字のO(オー)を3つ表示してみます。
x座標は 0 と 2 と 7 としました。
実行結果です。
3つともy座標は0なので、画面の一番上に表示されます。
OKのOの位置がx座標0なので、0,2,7の位置に表示されているのが
分かると思います。
次の例を見てください。
:(コロン)を使うと命令をつなげて書くことができます。
この方が見易いですね。
:(コロン)の場所は次のところにあります。これから何度も使いますよ。
y座標を指定してみましょう。
x座標は0にしたので、OKの上にそれぞれ表示されています。
分かりましたか? それでは
次のように表示するプログラムを LOCATE を使って作ってください。
正解の例です。
xとy座標をそれぞれ1つずつ増やして表示しています。
押されたカーソルキーを調べる
ゲームでプレイヤーを動かすには入力情報が必要です。
今回は押されたカーソルキーを調べる命令STICKを使ってみます。
これは外部接続されたジョイスティックの情報を得るための命令ですが、
キーボードのカーソルキーにも対応しています。
次のプログラムを入力しましょう。
STICK(<番号>)
STICK(0) でカーソルキーが押されたかを確認できます。
番 号 | デバイス |
---|---|
0 | カーソルキー |
1 | ポート1に接続されたジョイスティック |
2 | ポート2に接続されたジョイスティック |
実行したら、左右のカーソルキーを交互に押してみましょう。
何もしないときは0ですが、右キーで3、左キーで7を表示します。
なお、下キーを押すとプログラムを終了します。
STICKの命令は0から8までの数を返します。
上キーは1、下キーは5、上キーと右キー同時押しで2を返します。
移動操作をやってみよう
作業の前に SCREEN 0 で40x24文字のテキストモードに変更します。
下図は左右キーでGの文字を左右に動かすプログラムです。
入力しましょう。
行番号50の PRINT” G " では、Gの左右にスペースが入っています。
スペースを入れずに “G” とすると正常に動きません。
実行したら、左キーまたは右キーを少しだけ押してGが移動することを確認しましょう。
文字Gを動かす仕組みは簡単です。
変数Xに1を足すと右へ、1引くと左へ移動します。
押されたキーにより足すか引くかを実行すれば、Gは動かせるのです。
なお、文字Gを右へ動かし続けると、改行後に止まってしまいます。
また、左端まで移動させると、下図のようにエラーになります。
左へ移動させすぎると変数Xはマイナス値になるため、LOCATE命令でエラーとなります。
とりあえず、エラーを出さないようにします。
LOCATE にマイナス値を入れないように行番号45を追加します。
実行したら文字Gを左端まで移動しましょう。
するとエラーは出ず、Gは左端で止まります。
このプログラムには中断機能がありません。
中断するにはCtrl+Fn+F9です。(Windowsの場合)
(ファンクションキーがちゃんとあり Fn キーが無いときはCtrl+F9)
(Mac ではcontrol+fn+F9)
ところで「何でこんなことをしているのか?」と思う人もいることでしょう。
このような処理は、キャラクターを動かす古くからある方法なのです。
最近のゲームでも使われたりしている基本中の基本です。
そう考えるとゲームの仕組みって思いのほかシンプルだったりします。
(複雑なものも沢山あります)
壁を作ってみよう
いま文字Gは自由に動かせます。(左右のみですが)
近くに文字Hを表示して、Gの動きを制限したいと思います。
つまり、Hを壁とする訳です。
行番号45を変更し、行番号55を下図のように追加しましょう。
実行して左へ動かすと、GはHの横で止まります。
Gを右へ少し動かして、また左へ動かしてみてください。
Hを超えることなく横で止まります。
ゲームの仕組みとして、画面に表示すればそこに物質が発生する訳ではなく
内部で動きを制限するプログラムを作ることになります。
(こういう言い方をすると夢がない感じですね)
それではGの右側にもHを表示してみます。
行番号57を追加しましょう。
このまま実行すると、Gを右へ動かしたときHをすり抜けてしまいます。
止めるための内部処理が無いからです。
では、内部処理を入れていきましょう。
行番号47に、右側のHで止まる処理を追加しようと思います。
さて、オレンジのところに入る数値はいくつになるでしょう?
実際に試してから正解を見るといいですよ。
正解は23でした。
Hの座標が25、その左側に表示したいなら24を指定することになります。
しかし、Gの表示には左右にスペースが入っているので、さらに−1する必要があります。
キー入力により何かを動かすこと、その行動を制限することを学びました。
今回は「なるほど、何となく分かったかも」でかまいません。
作っていく工程を楽しんでください。
行番号を付け直してみよう
今回の学習では、プログラムを追加する場面が多くありました。
そのため行番号の間隔がバラバラです。
これを10間隔で整頓したいと思います。
そのための命令RENUMを覚えましょう。
RENUM [エンターキー]
これで10間隔になります。
パラメータを指定して、並びを変えることもできます。
RENUM [<新行番号>][, <旧行番号>][, <増分>]
RENUM 100 とすれば、行番号100から並びます。
RENUM 100,,20 とすれば、行番号100から20ずつの間隔で並びます。