第3回 N88-BASICで学ぶプログラミング入門

PartIV N88-BASICプログラム入門(2)

1.花火を打ち上げる~変数~

お絵かきをして、何となく「コンピュータに命令する」ことが掴めてきたような気がしませんか?
N88-BASICというプログラミング言語は、ソフトウェアを作るという意味で時代遅れの言語かもしれませんが、 もしプログラミングというものに少しでも興味を感じたのなら、BASICを踏み台に最先端のプログラミング言語に チャレンジしてみてください。基本は同じです。

そしてこれまで「パソコンに使われる」日々から解放され、「パソコンを使う」日々にチェンジできるのです!(おおげさ)

それはさておき、もう少し「コンピュータに命令」してみましょう。
プログラミング言語には、"変数"というものが必ずあります。中学校の数学で言うと文字式のようなものです。

例えば、10+40をコンピュータに計算させるとします。

次のように打ち込んでみて下さい(これぐらいなら別に打ち込まなくていいですけど)

10 cls3
20 print 10+40

PRINT命令は「画面に文字や数字を表示しろ」という命令です。つまり上の例だったら10+40を計算した結果を画面に表示しなさい。 というものです。

実行結果はどうなるでしょう。

N88互換BASIC for Windows95
fig 3.25 実行しなくても結果はわかるが…

(ちなみに"10+40"という文字を表示したい場合には、print "10+40"と表示したい文字の前後に""を加えればOK)

では、次の例はどうでしょう。

10 cls3
20 a=10
30 b=40
40 c=a+b
50 print a,b,c

ちょっとプログラムが長くなってしまいましたが…行番号20でaに10という数字を入れ、行番号30でbに40という数字を入れました。
行番号40ではaに入っている情報(つまり10)とbに入っている情報(つまり40)を足した結果をcに入れています。
で、最後にaとbとcに入っている情報を画面に表示させています。

みなさんはa、b、cに何と言う数字が入っているか分かりますか?

N88互換BASIC for Windows95
fig 3.25 左からaの情報、bの情報、cの情報

このaとかbとかcの文字を変数といいます。
変数の中身は、ほとんどの場合が数字です。中学校で習った文字式を思い出せば、そこそこ理解できます。
変数の名前は、自分で好きなようにつけられます。たいていaとかbだと長いプログラムになったときに訳がわからなくなるので、意味のある名前をつけます。 この変数の名前のつけ方でプログラミングのセンスが問われます。

「どうせ後で消すから何でもいいや」と言ってunkoなんて変数にしたら、そのまま消し忘れて客先に納品してしまい後で大恥をかくこともあります(笑)

まぁそれはともかく、この例だと変数を使ったほうがプログラムが長くなってしまい「だったら使わない方がいいじゃん!」など 思ってしまいがちですが、長いプログラムになるほど変数はパワーを発揮してくれます。

2.花火を打ち上げる~繰り返し命令~

人間は繰り返しの作業が苦手です。某ヤ○ザキ○ンでベルトコンベアに流れてくる菓子パンの上にイチゴを延々と のせ続けるアルバイトがあり1日で逃げ出した人もいるという噂をあるとかないとか……。

その一方コンピュータは繰り返し作業に耐えられます。そして正確です。
コンピュータ自身は得意と思っているかどうか知りませんが、少なくとも人間がするよりマシです。

コンピュータに繰り返しマゾ作業をさせるのはFOR~NEXT命令を使います。
例えば、コンピュータに1から10までの合計を計算させるのはどうでしょう。print 1+2+3+4+5+6+7+8+9+10でも結構ですが、 これが1から100までの合計になると打ち込むだけで泣けてきます。

そこで繰り返し命令と変数を組み合わせて使います。

10 cls3
20 sum=0
30 for i=0 to 10
40 sum=sum+i
50 print sum
60 next i

この例では行番号30のFOR…から行番号60のNEXTの間を繰り返せという命令です。sumとかiとかは変数の名前です。
何回繰り返すは、FORに書かれている変数iがポイントです。i=0 to 10となっています。
これは変数iは最初は0。次は1、その次は2…というように1つずつ増やして10になるまで繰り返せという意味なのです。

ひたすら繰り返されているのは行番号40と50。
最初は変数sumに入っている数字は0です(行番号20)。1回目は変数iは0ですので、sum=sum+iはsum=0+0となって、答えはsum=0です。
2回目の繰り返しは変数iは1になっています。なのでsum=sum+iはsum=0+1となって、答えはsum=1
3回目の繰り返しは変数iは2になっています。前回の繰り返しで変数sumに入っている数字は1でしたので、新しいsumの答えはsum=1+2となって答えはsum=3

以下、i=3のときはsum=3+3で6。i=4のときはsum=6+4で10……というように、式だけつなげると1+2+3+ … +10と1から10までの合計を計算させています。

N88互換BASIC for Windows95
fig 3.27 1から10までの合計は55

慣れないうちは何がなにやらサッパリという感じですが。慣れれば分かります。要は「繰り返しができるよ」ということさえ理解できればよいです。

次はこの繰り返し命令を使ってお馴染みの絵を書いてみましょう。
この間の日本国旗で書いた赤い丸を繰り返し命令の中に入れてみましょう。

10 cls3
20 for i=0 to 20
30 circle(300+i,200+i),70,2
40 next i

実行してみましょう。どんな図形ができるかな……。

N88互換BASIC for Windows95
fig 3.28 赤い筒みたいなのが……

FOR~NEXT命令の中で変数iは0から20まで1つずつ増えながら繰り返されています。
行番号30のCIRCLE命令は1回目は中心(300,200)で半径70の円。2回目は中心(301,201)で半径70。3回目は中心(302,202)で半径70…… と円の中心座標が右下にずれながら円を描いているため、筒みたいな図形になります。

3.花火を打ち上げる

今度は中心は同じで半径と色を変えながら、繰り返し円を描かせてみましょう。

10 cls3
20 code=0
30 for i=0 to 100
40 circle(300,200),i,code
50 code=code+1
60 if code=7 then code=0
70 next i

実行してみましょう。

N88互換BASIC for Windows95
fig 3.29 カラフルな円ができた

FOR~NEXT命令で変化しているのは変数iとcode。iは0から100まで1ずつ増えていきます。それがそのまま円の半径(行番号40)になっています。
変数codeも1ずつ増えています(行番号50)が行番号60のIFなんちゃらは、まだ解説していません。とりあえず変数codeは0から7の間で1ずつ増えていると思ってください。
この変数codeが円の色になっています。

このカラフルな円を使って、夏の風物詩"花火"っぽいものはどうでしょう。
LINE命令で下から打ち上げ、座標(300,200)まで火薬が来たらドーンとなるようにしましょう。

10 cls 3
20 '火薬を打ち上げる
30 for i=0 to 200
40 line(300,480-i)-(300,480),6
50 for j=0 to 500 : next j '時間稼ぎ
60 next i
70 '花火を開く
80 code=0
90 for i=0 to 100
100 circle(300,200),i,code
110 code=code+1
120 if code=7 then code=0
130 next i

行番号20~60までで、直線で下から火薬を打ち上げています。
行番号20や70にあるのはコメントです。プログラム中にコメントを書くと、あとで見たときに何やっているか思い出せます。 やはりプログラムだけだと分かりづらいですから。

間違っても、"残業させるな!担当の○○死ね!!!"などという悪口をコメントに書いてはいけません。
消し忘れて客先にそのまま納品してしまうと…(以下略

行番号50は無駄にFOR~NEXT命令を回しています。特に作業させるものはありません。コメントにあるようにただの時間稼ぎです。 これがないとコンピュータのスピードが速すぎて一瞬で花火が上がってしまいます。BASICでゲームをつくるときは、こういう時間稼ぎをするようなプログラムをよく書きました。

N88互換BASIC for Windows95
fig 3.30 下から火薬が打ちあがり…
N88互換BASIC for Windows95
fig 3.31 どーん!!

……えっ?
期待させておいて花火に見えない?
これは大変失礼しました。