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

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

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

人生一度はやってみよう MSX Basic 入門

14.カタツムリ散歩ゲームを作ろう その3

 

[ 13.カタツムリ散歩ゲームを作ろう その2 ] の続きです。

前回、スプライトのパターンを登録して表示してみました。
早く動かしてみたいですね。

1980年代のパソコンにはスプライト機能のないものもありました。
グラフィカルなゲームを作ろうとしたとき、背景との重ね合わせの処理が大変だったと記憶しています。
何もせずに表示してしまうと、キャラクタの周りの背景が抜けて(消えて)しまうんですよ。

うーん、スプライトってスゴイ!

 

 

キャラクターに色を付けよう

今回、の入力があります。円マークまたは円記号と呼ばれています。
キーボードのつぎのところにあります。

キーボード上の円マークの位置

 

 

いま表示しているキャラクターは、色を付けていないため前景色になっています。

COLOR 15,1,1

このように指定しているので前景色は「白」です。
そこで、壁と橋に色を付けていきます。

壁と橋のキャラクターに色を付ける

 

実行してみます。
色が付くと見やすくなりますね。

壁と橋のキャラクターに色を付ける

 

キャラクターの色の情報は VRAM の 2000H番地(16進数)にあります。
(番地とはアドレスのことです)
ここを VPOKE で書き換えています。

 

307 VPOKE &H2000+35¥8, &H61

壁で使っている#のキャラクターコードは 35 です。
#の色は&H2000+35¥8番地を変えることになります。

¥は整数の割り算に使います。
割り切れなかった場合、小数点以下が切り捨てられます。

算術演算、整数の割り算¥とMOD

ついでに MOD は割り算の余りを求めるときに使います。

 

ところで、なぜ8で割るのかというと、色情報は8キャラクター単位で区切られているからです。
&H2000+35¥8 で色を変えると、キャラクターコード 32 から 39 まで同じ色になります。

 

色の指定 &H61 (16進数)についてです。
6の部分がキャラクターの色、1の部分が背景色です。
つまり、キャラクター色が暗い赤、背景が黒になります。

16色の色コード

橋の色は &H21 なので、キャラクター色が緑、背景が黒です。

 

 

橋を操作しよう

橋を操作できるようにします。

STICK(0) でカーソルキーを読み取り、左右に動かします。

橋を左右に動かす

 

処理を説明します。

20 カーソルキーの押下を読み取る
30 動かす前の座標の表示を消す
40 右キーが押され、左にあるなら右へ
50 左キーが押され、右にあるなら左へ
60 橋の表示
70 nキーが押されたら終了処理
80 行番号20へジャンプ

 

終了処理を行番号70に持ってきたので、以前の処理を消します。

DELETE 310-320 [エンターキー]

を実行しましょう。

キー入力待ちと終了処理を消す

 

実行します。左右キーを使って動かせるようになりました。

橋を左右に操作できる

(プログラムの終了は小文字のnキーになりました)

 

今回のポイントは変数と配列変数の使い方です。

変数Xは橋が左にあるとき0、右にあるときは1に設定します。

配列変数には、穴の座標をセットしておきます。(行番号303)
左側の穴はX(0)=8、右側はX(1)=20です。
これで添え字(カッコ内の数)を変えるだけで座標を変更できます。

配列変数に橋の座標を入れて管理している

 

 

縦の操作もできるようにします。
変数Yを切り替えて、配列変数Y(Y)にて座標を変更します。

縦の操作はy座標を変更する

 

実行したら縦の操作もしてみましょう。
反応が良すぎて、真ん中の段に止めるのがむずかしいですね。
これはプログラムを追加していくと遅くなるので、今は気にしなくてもいいです。

 

 

橋の点滅をなくそう

橋の点滅が気になりますよね。
これは毎フレーム、消しては表示するという処理を繰り返しているからです。
(行番号30で消し、行番号60で表示している)

点滅しないように、橋が動いたときだけ消すようにします。

 

まず、操作する前の座標(正確には添え字の数)を記憶する変数を用意します。
行番号304に:X1=0:Y1=0を追加しましょう。

操作する前の座標を記憶するための変数を用意する

 

つぎは、操作する前の値と比較して、違えば橋を消します。(行番号58)
以前の処理(行番号30)は必要ないので消します。

操作する前と値が違えば橋を消す

ポイントを見てみましょう。
X と Y どちらかが違っても操作したことになるのでORを使います。
LOCATE で使う添え字は X1 Y1 です。
消したあとに、現在の値を X1 Y1 に代入します。

 

実行してみましょう。
点滅が無くなりました。

 

 

RENUM をしよう

行番号の並びが汚くなったのでおなじみの RENUM をします。

RENUM [エンターキー]

renum後のコード

 

これからの作業で行番号80から90の間に沢山のプログラムを入れたいので、
もう一度 RENUM します。
パラメータに注意してください。

RENUM 200,90 [エンターキー]

renumで行番号の間を調整する

 

行番号90以降が200からになりました。
パラメータの意味はつぎのようになっています。

RENUM [<新行番号>][, <旧行番号>][, <増分>]

RENUM を活用して作業しやすくしていきましょう。

 

次回につづきます。