初心者のためのゲームプログラミング入門

プログラミングとゲームの杜

初心者のためのプログラミング入門 & ゲームプログラムの作り方入門

文系でもわかるBASIC入門

13.算数ドリルを作ってみよう

プログラムの書き方(文法)はマニュアルやヘルプを見ると書いてありますが
実際にプログラミングしてみようとした時、腕が(指が?)動かなくなりますよね。

プログラミングの作業って創造力が必要なんじゃないかと思います。
その力を付けるためにも、作る目標がしっかりとあって
より実践的な経験を積むのがいいのではないでしょうか。

そんな訳で今回は算数ドリルを作ってみようと思います。

 

1. ジャンルと出題数を入力させる

1. 足し算_ 2. 引き算_ 3.掛け算
これらのどれかを数値で入力させます。

1. 10問_ 2.20問_ 3.30問
出題数を入力させます。これも1.2.3の中から選ばせます。

関係ない数値が入力されたら、再入力のメッセージを表示させましょう。
実行サンプル画面は次のようになります。

basicで算数ドリルを作る

まず自分で作ることをチャレンジして下さい。
今までのことを思い出せばできると思います。

 

それでは解答です。

算数ドリルをプログラミングする

ちなみに上のプログラムと完全に一致させる必要はありません。
同じ動作をすればOKです。

行番号130 と 200 を見て下さい。
IF命令の中にANDという論理演算子が使われてます。

行番号130 の意味は
変数swより大きく、かつ、よりも小さい時、行番号180へジャンプせよ
という処理になってます。
つまり変数swが1から3のどれかであれば行番号180へジャンプします。

 

以前、論理演算子ORを使いましたが、ANDORの使い分けは
数値AからB以内を使いたいならAND
数値AからB以外を使いたいならORを使います。

論理演算子and と or の使い方

 

2. 準備ができるまでのキー入力待ち

ジャンルと出題数を入力させた後、待ち状態を作ります。
この手の処理は、ユーザーに準備できているのかを確認するのが一般的です。

basic キー入力を待つ方法

上の画面では、スペースキーが押されるまで処理が止まるようになってます。
このプログラムを組めるかチャレンジしてみて下さい。

実は、
この処理を実現するには、今まで学習してきた命令では作ることができません。

今後、習っていない処理を実現させたい時には、ツールのヘルプを見たり
ネットを検索して、自分で解決する習慣を付けましょう。
なかなか難しいことですが頑張って下さい。

 

それでは解答です。

basic inkey 入力待ち状態

行番号270 以降が新しく追加されました。
行番号290 を見て下さい。

IN$=INKEY$

INKEY$関数で、押されているキーの文字を取得します。
この関数が実行された時、何も押されてなければヌルストリング(空文字)を返します

行番号300 ではスペースキーが押されていればラベル名*STARTへジャンプします。
つまりスペースキーが押されるまで、行番号290 から 310 までの間を
無限に繰り返します。

 

3. 関数とは何か

BASICにおける命令とは、
IF命令やGOTO命令のようにコンピュータに対するコマンド(命令)です。
IF命令なら「この数式を比べよ」
GOTO命令なら「行番号800へジャンプせよ」
という感じで一番単純な命令なのです。

関数とは複数の命令をまとめて特定の処理をするために作られたもの
INKEY$関数なら
「キーの状態を調べて、押されていたらその値を返す
という感じになっています。

関数の処理において「~を返す」という言い方をよくします。
関数は特定の処理をした後、その処理を行った結果を知らせてくれる場合があります。
関数を使った場所へ値を返すことになるので、このような言い方をしています。

 

4. INKEY$ の使い方

注意です。これから説明するサンプルを試す場合
現在作業中のプログラムの保存を行って下さい
保存の後、NEW命令でプログラムを消し、新しいサンプルプログラムを打ち込みましょう。

 

INKEY$関数の使い方は次のようになります。

basic inkeyの使い方

行番号20 を見て下さい。
ダブルクォーテーションが2つ続けて表記されてます。
これは何も無い文字列(ヌルストリング)を表しています。
IF IN$<>”” THEN
この記号は=(イコール)の逆で、否定を表しています
つまり
変数IN$がヌルストリングでないとき、変数IN$の内容を表示する
という処理になります。

行番号30 ではダブルクォーテーションの間にスペースが入ってます。
INKEY$関数で押されたキーを取得した時
スペースバーならば変数IN$にスペースの文字列が代入されます。
よって行番号30 ではスペースキーが押されたかどうか判断できるのです。

INKEY$関数は、
キーが押された時のみ値を返し入力待ち状態にならない性質から、
ゲームの操作などによく使われます。

 

ここら辺で少し休憩しましょう。
「算数ドリルを作ってみよう」は次回に続きます。