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

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

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

文系でもわかるBASIC入門

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

 

プログラムの書き方(文法)はマニュアルやヘルプを見れば分かります。
しかし、実際にプログラミングしようとすると腕が(指が?)止まりますよね。

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

そんな訳で今回は算数ドリルを作ってみましょう。

 

 

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

はじめに計算の種類と問題数を決めます。

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

1. 10問 2. 20問 3. 30問
出題数を入力させます。これも1.2.3の中から選ばせます。

関係ない数値が入力されたら、再入力のメッセージを表示させましょう。

次のようになります。

計算の種類と問題数を入力させる

まずはプログラムを見ないで自力で作ってみましょう。
これまでのことを思い出してください。

 

 

それではプログラム例です。

計算の種類と問題数を入力させるプログラム

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

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

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

 

 

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

andとorの使い分け

かならずこのように使えという訳ではないです。
分かりやすいプログラムを目指しましょう。

行番号130のときも OR を使っていいのです。
130 IF SW=1 OR SW=2 OR SW=3 THEN 180
こんな感じで。

今回の場合、どちらかと言えば OR を使う方が正解です。
なぜなら AND を使った場合、正しく動かないケースがあるからです。
出題数のところで 2.5 のように小数点ありで入力してみてください。
再入力にならずプログラムは先に進みます。

プログラミングに慣れてきたら、予想外の対応も考えるようにしましょう。

 

 

キーの入力待ちをする

出題数を入力させたあと、待ち状態を作ります。
準備ができているか確認することはよくあることです。

計算の種類と問題数を入力させるプログラム

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

実は…
これまで学習してきた命令だけでは作れません。

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

 

ヘルプである機能を見てみましょう。
ツールバーの「ヘルプ」をクリックして「トピックの検索」をクリックします。

ヘルプを参照しよう

 

「ヘルプ」が出ます。ここにはツールバーの説明もあります。
「MBASIC86使用説明」をクリックしましょう。

ヘルプを参照しよう

「MBASIC86のコマンドの説明」をクリックします。

 

下へスクロールして、キー制御関数の「INKEY$」をクリックします。

MBASIC86のコマンドの説明

INKEY$ の説明ページが出てきます。
キーの入力待ちにはこの機能を使います。
しっかりと読みましょう。

 

 

それではプログラム例です。
行番号270 以降を新しく追加しました。

キーの入力待ち

行番号290 を見て下さい。

IN$=INKEY$

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

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

それからスペースキーかどうかの判断は半角スペースと比較をします。

スペースキーかを判断するとき半角スペースを使う

 

 

関数とは

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

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

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

 

 

INKEY$ の使い方

注意です。
これから説明するサンプルを試す前に作業中のプログラムを保存しましょう
そのあと NEW 命令でプログラムを消し、サンプルを打ち込みましょう。

 

INKEY$を使ったサンプルです。

INKEY$の使い方

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

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

INKEY$関数は入力待ちせずにキーの押下を調べられるため、ゲームの操作などによく使います。

 

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