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

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

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

文系でもわかるBASIC入門

18.落下ゲームを作ってみよう その2

[ 17.落下ゲームを作ってみよう ] の続きです。
前回は、谷間の壁をテキスト表示で表現する方法について学びました。
次は、プレイヤーが操作する落下物を作ってみましょう。

 

1. LOCATE命令でカーソル位置を指定する

LOCATE命令は、テキスト画面のカーソルを任意の位置へ移動します。

次のサンプルを入力しましょう。

basic locate カーソル位置を指定する

実行してみます。

basic locate カーソル位置を好きな位置へ移動できる

このように、PRINT命令やINPUT命令を続けて使えば
画面上の好きな位置でメッセージを表示させたりすることが可能です。

ちなみに、画面左上の角が座標0,0となります。

 

2. 落下物を作る

次のサンプルを入力しましょう。

basic 初心者でもわかるゲーム入門

実行してみます。

basic でプログラミングの学習

これは実行中の画面です。
実行中のプログラムを止めるには、ESCキーを押します。

このプログラムと実行中画面を見て、何が起きているのか分かりますか?
ちょっと分かり辛いので丁寧に説明します。

行番号130 では、座標 0,23 の位置に何も表示しないPRINT命令を書いてます。
でも表示していない訳ではなく、空白行を表示してます。

今までの学習の中で経験していると思いますが、PRINT表示を続けていると
画面がスクロールします
新しいメッセージは画面最下部に表示され、古いメッセージは上から消えていきます。

つまり、この行番号130 では、画面最下部(Y座標23)に空白行を表示することで
強制的に画面をスクロールさせているのです。

 

現在のサンプルプログラムを保存して、次のように変更して下さい。

basic locate 強制スクロールの仕組み

実行してみれば、◆マークが左右に動くので
画面が強制スクロールしていることが分かると思います。

 

3. 落下物を操作する

さきほど保存したプログラムを読み込み、次のように変更して下さい。
行番号150 以降が変更されてます。

basic カーソルキーを使ってものを動かす仕組み

実行してみます。

basic カーソルキーで左右に動かす

画像では確認し辛いですが、カーソルキーの左右で◆マークを動かせます。

左右のカーソルキーを何度が押してみましょう。
押したことに反応して◆マークは動くと思います。

今度は、左右のカーソルキーのどちらかを押しっぱなしにしてみましょう。
一瞬、動きが止まることを確認できましたか?

INKEY$関数は、キーボードバッファの情報を読み取ります。
キーを押しっぱなしにした場合、押した瞬間と
0.5秒後ぐらいにキーリピート機能が働いて押しているキーが連続してバッファに入ります。
この動作のために、キーを押しっぱなしにした時、一瞬動きが止まる現象が発生します。

このINKEY$関数の性能はゲームには向いてません。
アクション性が高いゲームであれば、一瞬動作が止まってしまうのは致命的です。
しかしこの講座では、他の適切な入力方法では難易度が高いため、
あえてこの方法で行います。

 

4. ASC関数でキャラクターコードを取得する

ASC関数は、文字のキャラクターコードを取得できます。
キャラクターコードとは、コンピュータが認識できるコードのこと
1つの文字に対して1つのコードが割り当てられてます。

次のサンプルを入力しましょう。

basic asc キャラクターコードを取得する

実行します。

basic 特殊なキーをASCで調べる

INKEY$関数で文字を識別したいとき、行番号50 のように
任意の文字をそのまま指定すれば識別できます。

ですが、カーソルキーのように特殊なキーでは、ASC関数を使って
キャラクターコードで識別する方法がいいでしょう。(行番号60、70)

 

5. 落下物と壁を合体する

次のサンプルを入力しましょう。

basic ゲームプログラミング入門 初心者向け

実行します。

basic 初心者向けのゲーム作成入門

壁に変化が無いので分かりにくいですが、下から上へスクロールしています。
行番号210 の LOCATE 0,23 は、先程説明した通り強制スクロールさせるために
この座標となっています。

変数Xは、落下物のX座標位置の管理用
変数WXは、壁の空白部分の管理用
として使っています。

行番号220 で谷間の壁を作っていますが、この内容が理解できなければ
前回の [ 17.落下ゲームを作ってみよう ] をもう一度、確認しましょう。

 

6. 壁をランダムに変化させる

谷間の壁がまっすぐだと、スクロールしているかも分からなくなります。
ランダム性を入れてみます。

basic ランダムに動かす

追加した行は、210 から 230 までの3行です。
行番号に注意してプログラムを変更しましょう。

行番号210 のRND関数は、0以上1未満の数を発生します
0.5が中間になるので、それより小さい時は変数PXに-1を、大きい時は+1を代入してます。

実行してみます。

basic ゲームプログラミング入門

どうでしょうか?
少し壁っぽく見えませんか。

 

7. 壁にひと工夫いれる

ランダム性を入れることで、見た目が壁らしくなりました。
しかし、ゲームとして見たとき、変化が少なすぎると思いませんか?
そこでひと工夫したいと思います。

ゲーム作成での上手なランダムの使い方

行数を少なくするため、変数の初期化は行番号110にまとめました。

変更されている所は、行番号200 から 240 までの間です。
この処理は、乱数で壁を毎回動かすのではなく
5回に1回だけ乱数を発生するようにしました

実行してみます。

プログラミング入門 初心者向け

変更前と変更後、どちらもプレイしてみると分かりますが、
変更後の方が「少し難しい」と感じるでしょう。

ゲーム制作で乱数を使う時(敵の動きなど)、少し制約を付けた方が良い場合がある
ということを覚えておいて下さい。

この続きは次回に行います。

 

サンプルを入力するだけでなく、改造してみましょう。
改造することで、プログラムに対する理解が深まります。

改造ポイント
1.落下物の移動を1回の入力で、もっと大きく動かす
2.左の壁と右の壁の空間を狭めたり、広げたりしてみる
3.時々、壁の中に「宝物」という文字が埋め込まれるようにする

他にも自分で課題を作ってチャレンジしてみましょう。