Menu

第7回 キー入力と文字、記号の移動


キー入力と文字、記号の移動について調べてみよう。
前回は、コンピュータが計算(1回繰り返すごとに1をプラスしたり、不規則な数を求めたり)した結果を使って、文字や記号を画面上に表示して動かす(動いたように見せる)プログラムを考えたよね。
今回は、みんながキーボードから入れた(「入力する」というよ。)情報によって文字や記号を表示して動かすことにチャレンジしてみよう。
まず、キーボードから数値を入れる場合は、INPUTという命令を使うよ。
次のようなプログラムを作って確認していこう。

10 INPUT A
20 PRINT A

プログラムができたら、RUNと打ってみよう。
RUN

と表示されるね。この「?」の記号は、「数値を入れて下さい。待っていますよ。」というコンピュータからの返事だよ。ここで好きな数値を入れてあげよう。例えば、「5」と入れてみよう。画面は、こんなふうになるよね。


最初の「5」はみんなが入れた数値の「5」で、二つ目の「5」は、プログラムの20行目の「PRINT A」が実行されて、表示された「5」だよ。

ここで、PRINT APRINT "A"の違いを確認しておこう。
PRINT Aは、いま、Aというデータを入れておく箱(変数というよ。)の中に入っている数値を表示してくれるよ。
PRINT "A"は、箱の中にいくつが入っていようと関係なく、文字「A」を表示してくれるよ。
いままでは、絵を描いたり、文字、記号を表示したりしたから、「”」(ダブルクォーテーション)で囲んで「PRINT」命令で表示していたけど、「PRINT」命令は、箱の中の値を表示するのにも使えるんだね。覚えておこう。

では、2つの値を入れるように変えてみよう。例えば
15 INPUT B
を追加して、
20行目も、「20 PRINT A, B」と変更してみよう。
変更ができたら、RUNと実行してみよう。
RUN

例えば「7」と入れてみよう。
もうひとつ「?」が表示されるね。今度は「10」と入れてみよう。
?7
?10

10
と表示されるね。

それでは、次に、このみんなが入れた数値の位置に、前回のプログラムの「LOCATE」を使って表示するプログラムを考えてみよう。画面の横32文字、縦24行の好きな位置に記号「X」を表示するプログラムを作ってみよう。

例えば、こんな感じに
17行目に 「CLS」を入れて、まず画面をクリアしよう。
19行目に 「LOCATE A,B」を入れて、画面の右からA文字目、上からB番目の位置に移動させよう。
そして、20行目を次のように変更しよう。
20 PRINT "X"

LISTで表示してみると

10 INPUT A
15 INPUT B
17 CLS
19 LOCATE A,B
20 PRINT "X"

では、RUNで実行してみよう。
好きな数値を2つ入れて、自分の描きたい場所に「X」を描いてみよう。

数値を入れて、絵を動かすことはできたけど、実際のゲームなどでは、矢印→キーを使って、絵や文字を動かすことが多いよね。
今度は、この矢印→キーを使って動かすことにチャレンジしてみよう。

数値以外の情報を受け取る命令にINKEYという命令があるよ。これを使ってみよう。
まずは、RESETを打つと、いままで作ったプログラムを全部消して新たにスイッチを入れ直した状態にしてくれるよ。
では、次のプログラムを入れてみよう。

10 A=INKEY()
20 PRINT A
30 WAIT 60
40 GOTO 10

新しく「GOTO」という命令があるね。これは「10行目に戻る」という命令だよ。
では、RUNで実行して、矢印→キーをおしてみよう。
自動的にずーっと読込みが続けられるようになっているプログラムだよ。
右向きの矢印キー「→」を押すと
29 と表示されるね。
同様に、左向きの矢印キー「→」を押すと28と、上向きの矢印キー「↑」を押すと30と、下向きの矢印キー「↓」を押すと31と表示される。
止めるときは、左上の「Esc」キーで止めよう。
このように、キーボードのそれぞれのキーには数値が割当てられているんだ。
このことを利用して、それぞれのキーが押された方向に移動するプログラムを考えてみよう。

絵や文字を描く最初の位置(スタートの位置)を決めよう。
ほぼ、画面の中央からスタートするように
5 C=12
7 D=15
9 CLS
としてみよう。「C」は絵や文字が右から何文字目にあるかの数値だよ。「D」は絵や文字が上から何番目にあるかの数値だ。
次に、入ってきた数値に応じて、移動する方向を計算するようにしてみよう。
ここでは、「IF ~ THEN ○○」という命令を使うよ。「もし ~だったら、 ○○せよ。」という意味だ。
12 IF A=28 THEN X=-1
13 IF A=29 THEN X=1
14 IF A=30 THEN Y=-1
15 IF A=31 THEN Y=1
とプログラムを追加してみよう。 そして20行目を次のように変更してみよう。
20 LOCATE C+X, D+Y

そして、この位置にキャラクタを表示する命令を入れよう。
25 PRINT CHR$(#F1)
さらに、いろいろな数値を入れ替えておく必要があるので
27 C=C+X
28 D=D+Y
29 X=0: Y=0: A=0
それから、待つ時間を短くして
30 WAIT 5
移動したら、画面をクリアするように
35 CLS
と入れてみよう。
全体では、こんな感じになるよ。

5 C=12
7 D=15
9 CLS
10 A=INKEY()
12 IF A=28 THEN X=-1
13 IF A=29 THEN X=1
14 IF A=30 THEN Y=-1
15 IF A=31 THEN Y=1
20 LOCATE C+X, D+Y
25 PRINT CHR$(#F1)
27 C=C+X
28 D=D+Y
29 X=0: Y=0: A=0
30 WAIT 5
35 CLS
40 GOTO 10

完成したら、RUNで実行してみよう。
矢印キーでいろいろな方向に絵を動かしてみよう。
止めるときは、左上の「Esc}キーを押そう。