りょうのゲーム塾 -93ページ目

りょうのゲーム塾

再開、準備中。

$りょうちゃんのゲーム企画塾

GM02はステージ表示を行うタスクです。
タスクは実際には何度も実行することが多いのですが、
画面を描画するタスクは一度実行するとすぐに次のタスクへと移ります。

このタスクでは最初に@LOADSTGルーチンを呼び出します。
このルーチンはステージデータをロードします。
ここでのステージデータとはマップデータです。
ロードするデータはプログラムのDATA文に記述されている
文字列のデータです。
この文字列をPRINT文で表示するわけですが。。。
それだけではありません。

一度そのデータを配列に格納しています。
格納される配列変数はMAP$です。

次に@DISPSTGルーチンを呼び出します。
このルーチンはMAP$に格納されているマップデータを
画面に表示しています。

最後に呼び出している@DISPINFOルーチンは
ゲームのデータをコックピットに表示しています。

これでゲームステージの表示ができました。

それにステージ番号の情報を表示しています。

GM_CNT に3×60、要するに3秒程度時間待ちするための
カウント数(このシステムは1秒間に60回実行されます)をいれ
タスクフラグに3を入れ戻ります。
タスクフラグに3を入れた場合次回はGM03が実行されます。



GM03では GM_CNT の内容から1引いて時間待ちします。
カウントが残っていた場合は戻ります。
カウントが0の時次へ進みます。

カウントが0になるともう一度@DISPSTGルーチンを呼び出し、
再度ステージを行います。

え?なんで必要か?
それはステージにステージ番号が表示されているからです。

そしてプレイヤと敵の初期化を行い、
BGM番号2番を演奏し次のタスクへ移行します。
$りょうちゃんのゲーム企画塾

このタスクはタイトルを画面に表示した後に画面の5,20の位置に
PUSH ANY KEY のメッセージを点滅表示(ブリンク)します。
点滅表示のしくみはゲームループの中で毎回、
SYS_CNT の値を+1しています。
この値を使い時間間隔(インターバル)を作ります。(解説済み)

SYS_CNT の値をマスク値で AND して0かそうでないのかで判断します。
ブリンクの間隔をもっと早くしたければマスク値を下げてください。
遅くしたければ逆に上げてください。
ここではマスク値8(2進数値で1000)を使っています。

次にキー(ボタン)状態をチェックします。
もし、何もキーが押されていないときは ON_KEY の値は0なので戻ります。
キーが押されている場合は押されているキーのビット位置が1になるので
0以外の値になります。
キーが押されていれば次の処理に移ります。

次の処理はゲームを実行するために必要な値の初期化を行っています。

なんで、ここで初期化が必要か?
これはこのゲームがゲームクリアされた場合に、
もう一度ゲームの初期化を再度ゲームを実行するためです。

初期化する値は

STAGNUM=0
ステージ番号です。
1ステージ目が0番です。
ステージは5面あります。

EMYNUM=1
敵番号(ENEMY:エネミー、NUMBER:番号)です。
実際のステージは1から5までの5つの面で構成されています。
各面は敵番号1から5まで存在します。

SCORE=0
プレイヤのスコアを0にします。
この変数に得点を加算していきます。

EMYCNT=5
ここは敵の数です。
一応いま5が仮に入っていますが、調整が必要です。

PLYCNT=3
これはプレイヤの数です。
一応3と入っていますが、これも調整が必要です。
今回プレイヤは残機制とします。

残機制とはプレイヤの数が設定されていて、
プレイヤがプレイ不可能になった場合にこの値を引いていき
残機数が0になった場合にゲームオーバーとなります。

初期画が終わったらBGM番号4番の曲を流し、
次のタスクへと進みます。
まだ。。。学生がひとりも来てません。

といっても4人だけの授業なんですが。。。

一人は、もともとスケジュールとして帰郷。。。これで後3人
一人は、急な用事で帰郷。。。これで後2人
一人は、帰郷して帰ってくるはずなのに。。。帰ってきません。。。これで後1人

で、あと一人がもともと自由参加だったので。。。


せっかくの夏期授業。。。俺だけ?

笑えん。。。今から泣きます。