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

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

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

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

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

 

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

パターンジェネレータテーブルを書き換えて、文字を絵に変更したところが楽しかったですね。

どうしてもハード寄りの話が出てくるので理解が大変だと思います。
丁寧に説明しているつもりですが、情報としては足りていない感じです。
2進数や16進数のことも、もっと説明したかったです。

余裕があるなら、疑問に思ったことをネットでどんどん検索してみましょう。
無駄なように思える知識でも、のちのち役に立ってくることが多いですよ、プログラミングの世界は。

 

 

スプライトを使ってみよう

始める前に行番号の付け直しをします。

renum100 [エンターキー]

これで行番号100から10ずつ増えていきます。

renumで行番号を整理する

 

これからスプライトを使います。

スプライトとは、文字やグラフィックとは違う方法で表示される板のようなものです。

主な特徴です。

・文字やグラフィックより前に表示される
・絵の描かれていない部分は透明(後ろにあるものが見える)
・最大32枚まで表示できる
・横に4枚まで並べて表示できる
・1ドット単位の座標指定(移動)ができる

 

スクリーンモード1の場合、文字が 32x24 の座標なのに対し、
スプライトなら 256x192 の座標で指定することができます。

スプライトの特徴

 

 

スプライトを使うには、前回のようにデータを読み込むことが必要です。
まず、その部分を作ります。

スプライトのデータを読み取り登録する

 

つぎにデータ部分を入力します。
前回は 8x8 ドットの絵でした。
今回は 16x16 ドットなのでデータ量が4倍になってます。
データはカンマ,で区切っています。注意してください。

スプライトのデータ部分を入力する

 

実行してみましょう。
行番号229でスプライトの表示もしています。
カタツムリの絵が表示されたら成功です。

カタツムリの絵のスプライトが表示される

 

 

スプライトの登録について

スプライトは 8x8 ドット、または 16x16 ドットで表示することができます。
いっしょに使うことはできません。どちらを使うか設定します。

 

スプライトサイズは SCREEN で行います。
2つ目のパラメータで設定できます。

SCREEN [<画面モード>] [,<スプライトサイズ>]

<スプライトサイズ>
0: 8x8
1: 8x8 を縦横2倍にして表示
2: 16x16
3: 16x16 を縦横2倍にして表示

 

今回は2番の 16x16 ドットを選んでいます。行番号110を確認しましょう。

screenでスプライトサイズを指定する

 

データの読み込みを見てみましょう。

224 READ A$, B$

変数を2つ用意しているので、同時に2つずつデータを読み込みます。
つまり、下図のようにデータの左側をA$、右側をB$に読み込みます。

readで2つのデータを同時に読み込んでいる

8x8 ドットのとき、8バイトのデータ量でした。
16x16 ドットの今回は、左側16バイト、右側16バイト、合わせて32バイトのデータ量になります。

 

スプライトの登録はVRAMにするのではなく、SPRITE$を使います。
かっこの数値は登録する場所です。今回は0番目に登録しました。

228 SPRITE$(0)=C$+D$

C$には左側のデータ、D$には右側のデータが入っています。

 

なお、登録するための文字列データは、つぎのように作ります。
左右それぞれ16文字の文字列になります。

225 C$=C$+CHR$(VAL("&B"+A$))
226 D$=D$+CHR$(VAL("&B"+B$))

前回と違うのは VAL で数値にしたあと、CHR$で文字に変換しているところです。
よく分からないときは、この手順をそのまま覚えてしまいましょう。

 

スプライトの表示はPUT SPRITEを使います。
行番号229を見てみましょう。

 

スプライトの表示

スプライト面番号は0から31まで指定できます。
つまり、最大32枚までスプライトを表示できます。
(ただし、横方向に5つ以上並ぶと5つ目以降非表示になります)

パターン番号は228 SPRITE$(0)=C$+D$のかっこの番号と関係しています。
もしSPRITE$(2)に登録したものを使いたいときは、パターン番号を2にします。

 

 

GOSUB を使ってみよう

GOSUBサブルーチンを呼び出す命令です。

サブルーチンとは、特定の処理をひとまとめにしたものです。
メインとなる処理(メインルーチン)から必要な時に呼び出して使います。
また、プログラムを見やすくするためにサブルーチンにすることもあります。

これだけではよく分からないと思うので、別の機会に説明します。

 

使い方ですが、つぎの例を見てください。
GOSUB でサブルーチンへジャンプして、RETURNで元の場所へ処理が戻ります。
行番号100、200、300がサブルーチンになります。

gosubの使い方

 

 

カタツムリプログラムへ話を戻します。
作業の前に RENUM 100 をしてください。

今まで作ってきたものをサブルーチンにします。
RETURN は DATA の前に入れます。

gosubを使う

これで行番号100から325までがサブルーチンとして行番号10から呼ばれます。

 

 

橋を作ろう

道の穴をふさぐ橋を作ります。

橋は絵を描かずに、キャラクターコードにある記号で代用します。

穴をふさぐ橋を表示する

 

実行してみます。
丸が4つ並んで穴をふさぎます。

穴をふさぐ橋を表示してみた

 

使った記号のコードは 133 です。
CHR$ で表示してみます。丸ですね。

コードから記号を表示してみる

他の記号を知りたいなら キャラクターコード表 を見てみましょう。

 

プログラムの説明です。

302 P$=STRING$(4,CHR$(133))
305 LOCATE X(0),Y(0):PRINT P$

STRING$ を使って丸を4つ作り、変数P$に入れています。
あとは LOCATE で座標を決め表示するだけです。
なお、X(0) Y(0) は配列変数です。
この配列変数には、穴の座標を設定しています。

 

配列変数とは、
同じ名前の変数を番号で管理して、複数使えるようにしたものです。

下の例では、e(0)からe(10)までの配列変数それぞれに数を入れてみました。
カッコ内の数を変えるだけで、普通の変数のように使えます。

同じ名前を番号で管理する配列変数

 

注意点として、変数と配列変数は別のものです。
同じ名前でもそれぞれ別の変数として使えます。

同じ名前でも変数と配列変数は別のもの

 

配列変数のカッコ内の数は添え字(そえじ)と言います。
10までなら宣言せずに使えます。
宣言しないで10を超えるとSubscript out of rangeエラーになります。

配列変数は添字10までなら宣言無しで使える

 

配列変数の宣言にはDIMを使います。
DIM E(20) とすれば E(0) から E(20) まで使えるようになります。

 

次回につづきます。