2017年10月07日

LGP講座(かり~第3回 入力と条件判断だ!

yuu_bustup.jpg
優:こ、こんにちは、柊優です……。今月もよろしくね……。

airi_bustup.jpg
愛梨:こんにちはー。結城愛梨ですー。今月もがんばるぞーっ。

haruka_bustup.jpg
陽香:永乃原陽香です。今月も、楽しく、DirectX対応BASIC・LGPについて勉強していきましょう。

yuu_bustup.jpg
今月は、入力と、条件判断について勉強していくよ……。頑張ろうね……。

airi_bustup.jpg
おーっ。今月は盛りだくさんだねっ。頑張っていこーっ。

haruka_bustup.jpg
それでは、今月もはじまりです。

~キーボードから入力しよう!KEYBTN2関数

yuu_bustup.jpg
それじゃ、まずはキーボードから入力することからやっていこうか……。それには、KEYBTN2関数を使うんだよ……。

airi_bustup.jpg
KEYBTN2か~。あれ?ということは、KEYBTN関数、というのもあるのかな?

haruka_bustup.jpg
はい、ありますよ。ただ、KEYBTN2関数のほうが便利なので、今回はそちらを使うことにします。

airi_bustup.jpg
はーいっ。それで、どう使えばいいのかな?

yuu_bustup.jpg
うん……。その前に、もう一つ関数を使うんだ。KEYGET2関数だよ……。

haruka_bustup.jpg
KEYGET2関数は、キーボードについての情報(どのキーが押されたかなど)を取得する命令です。KEYBTN2関数は、その情報から、実際に情報を調べる命令です。

yuu_bustup.jpg
まず、KEYGET2関数はこう書くんだよ……。
-----
I@KEYGET2( )
-----

haruka_bustup.jpg
そして、KEYBTN2関数はこう書くんですよ。
-----
変数=I@KEYBTN2(ボタンタイプ)
-----

haruka_bustup.jpg
こうすると、キーについての情報が変数に入るんですよ。

airi_bustup.jpg
このボタンタイプというのは?

yuu_bustup.jpg
うん。それは、どんな情報を取得するか、ということ……。どのキーが押されたかを知るなら、ここに0を入れればいいよ……。

haruka_bustup.jpg
ちなみに、1だと、キーが押されたかどうか、2だと押された時間を知ることができますよ。

yuu_bustup.jpg
それじゃ、これを踏まえたうえで、画面に押されたキーを表示するプログラムを作っていこうか……。なお、今回は数字キーだけについて考えていいよ……。

airi_bustup.jpg
はーいっ。

haruka_bustup.jpg
その前に、今回は次のプログラムを骨格として使います。
-----
SC=G@SETUP(640,480,16,1)
LOOP
G@CHRCLEAR(SC)
xxxxx
G@FLIP()
S@SLEEP(1000) //1秒停止
ENDLOOP
-----

airi_bustup.jpg
xxxxxの部分に、押されたキーを調べる文と、それを表示する文を入れればいいんだね。えーと……KEYBTN2命令は、押されたキーを調べるんだから、ボタンタイプに0を入れればいいんだよね。
そういえば、ボタンタイプに0を指定した場合、何が入るの?

yuu_bustup.jpg
うん。そのキーに対応した番号が入るんだけど、数字キーに限っていえば、押したキーの数字より1大きい数字が入るよ……。ただし、0が押された場合は、11が入るんだ……。

airi_bustup.jpg
ということは、単純に変数の値から1を引くわけにはいかないなぁ……。どうしたらいいんだろ?

haruka_bustup.jpg
よく考えてみてください。0が押されたときには変数に0を入れて、そうでないときには、そのまま1を引けばいいですよね?ということは……。

airi_bustup.jpg
あ!ここで、条件判断が出てくるんじゃないの?

yuu_bustup.jpg
うん、その通りさ……。条件判断については、この後説明するよ……。

~条件判断を入れてみよう~

yuu_bustup.jpg
さて……。条件判断の基本といえば、やっぱりIF文だね……。
IF文は、こう書くんだ……。
-----
IF 条件 THEN
条件が成立したときの処理
ELSE
条件が成立しなかったときの処理
ENDIF
-----

airi_bustup.jpg
へぇ~。VisualBasicなどのIF文と同じなんだね。
ということは、やっぱり、条件が成立したときだけ処理を実行させるときは、ELSE以降は省略してもいいの?

haruka_bustup.jpg
はい、そうですよ。 あと、条件の部分の式の書き方も、他の言語と同じです。

airi_bustup.jpg
よーし、それじゃさっそく、IF文を使って、プログラムを作るぞーっ。変数Kに押したキーの番号が入るんだから……。 Kが11ならKに0を入れ、それ以外なら普通に1を引くように処理を分岐させればいいんだよね。カタカタ……。

airi_bustup.jpg
よしっ。これでどうかな。
-----
SC=G@SETUP(640,480,16,1)
LOOP
G@CHRCLEAR(SC)
//キー入力受付
I@KEYGET2()
//変数Kに押したキーの番号を取得
K=I@KEYBTN2(0)
//Kが11(0キー)かどうかで処理分岐
IF K == 11 THEN
//Kに0を代入
K=0
ELSE
//Kから1を引き、押したキーと同じにする
K=K-1
ENDIF
//変数Kの内容を表示
G@PRINT(SC, 320, 240, STR(K))
G@FLIP()
S@SLEEP(1000) //1秒停止
ENDLOOP
-----

yuu_bustup.jpg
うん、これで大丈夫だと思うよ。 動かしてみて……

airi_bustup.jpg
はーいっ。
……やったぁっ。ちゃんと0を押したら、0って表示されたよっ。

lgp-01.JPG
▲ 0以外を押したとき

lgp-03.JPG
▲ 0を押したとき

haruka_bustup.jpg
よかったですね、愛梨ちゃん。
さて、条件判断の命令には、今回説明したIF文のほかにも、場合によって分岐させるSELECT文とSWITCH文の二つがあります。

airi_bustup.jpg
それってどういうものなの?

yuu_bustup.jpg
うん。まず、SELECT文は、成立した条件に合わせた処理を行うものなんだ……。
-----
SELECT
WHEN 条件1:
条件1が成立したときに実行する処理
WHEN 条件2:
条件2が成立したときに実行する処理
……
OTHER:
すべての条件が成立しなかったときに実行する処理
ENDSELECT

例:
SELECT
WHEN A > 5:
B=3
WHEN A == 5:
B=2
WHEN A < 5:
B=1
OTHER:
B=0
ENDSELECT
→例えば、変数Aが5より小さいときは、B=1が実行される。
-----

haruka_bustup.jpg
一方、SWITCH文は、指定した変数の値に合わせて処理を分岐させる命令なんですよ。
-----
SWITCH 変数
CASE 値1:
変数が値1のときに実行する処理
CASE 値2:
変数が値2のときに実行する処理
・・・
DEFAULT:
変数がいずれの値でもないときに実行する処理
ENDSWITCH

例:
SELECT A
CASE 1:
B=1
CASE 2:
B=3
CASE 3:
B=5
DEFAULT:
B=0
ENDSELECT
→例えば、変数Aが2のときは、B=3が実行される
-----

airi_bustup.jpg
なるほどーっ。うまく使い分けることが大切だねっ。

yuu_bustup.jpg
そ、そうだね……。それじゃ次回は、プログラム言語の、もう一つの大切な機能、繰り返しについて説明するよ。楽しみにしててね……。

airi_bustup.jpg
はーいっ。

haruka_bustup.jpg
それでは、また次回にお会いしましょう。

※次回の更新は、10月9日、『師匠のJava道場』の予定です。お楽しみに!
posted by 裏編 at 09:10| LGP講座(かり | 更新情報をチェックする