テキスト(PDF)

ICT ジュニア(上田パソコンクラブ)
プチコンでダンジョンゲームを作る(3)
●上画面に自分のキャラクターを表示する
前回は、下画面に迷路を作る所まで、プログラムを
作りました。
今度は上画面に、自分のキャラクターと、周辺の迷
路を表示させます。
まずは自分のキャラクターの表示からです。
プチコンでは、画面に文字を表示するほかに、あらかじめ用意されているキャラクターなどを
表示する「スプライト機能」があります。
それを使って、自分のキャラクターを表示
してみましょう。
まず、最初のプログラムタイトルを
「DANJON6」にしましょう。
1 ’***
2
DANJON6
***
ゲームループに入る前の所で、自分のキャラクターを表示しましょう。
95 @ANAHORIEND
96
97 PX=1
キャラクターの座標を OX,OY に設定
98 PY=1
99
100
101
102
103
104
105
106
OX=128
スプライト 0 番にキャラクターを設定
OY=96
SPSET 0,64,2,0,0,2
SPOFS 0,OX,OY
スプライトを(OX,OY)に表示
’--- ゲーム
@GAMELOOP
ループ
---
実行すると、上画面のまん中にキャラクターが表示さ
れます。
プチコンでダンジョンゲームを作る(3)/1
ICT ジュニア(上田パソコンクラブ)
スプライト関連の「SPSET」(エスピーセット)、「SPOFS」(エスピーオフセット)命令が新しく出
てきました。
SPSET 命令は、スプライトで使うキャラクターを設定します。
SPSET
0
管理番号
管理番号
キャラ番号
パレット番号
横反転
縦反転
優先順位
,64
キャラ番号
,2
パレット番号
,0
横反転
,0
縦反転
,2
優先順位
スプライトの管理番号。0~99 の範囲で自由に決められます。
スプライトのキャラ番号。0~511(上画面用)、0~117(下画面用)。
色のパレット番号を指定します。0~15。
0=なし、1=横反転(左右逆に表示)
0=なし、1=縦反転(上下逆に表示)
スプライトを表示する優先順位
0=コンソール(文字表示)の前
1=手前の BG 面(背景表示面)より前
2=2 枚の BG 面の間
3=奥の BG 面の後ろ
SPOFS 命令は、スプライトを画面に表示する座標を設定します。
SPOFS
0
管理番号
管理番号
x 座標
y 座標
補間時間
(省略可能)
,OX
x 座標
,OY
y 座標
,0
補間時間
スプライトの管理番号。0~99。
スプライトのx座標(標準では左上の座標)。-1024~1024。
スプライトの y 座標(標準では左上の座標)。-1024~1024。
前の状態から現在の状態へ移動する間にかかる時間。1=60 分の 1 秒。
プチコンの画面のグラフィック座標は、
右のようになっています。
スプライトの左上の座標の値(OX,OY)
は、キャラが画面のまん中に来るように
(120,88)にしています。
※画面の中心座標は(128,96)ですが、
キャラクターの大きさが 16×16 ドットある
ため、キャラを中心に配置するためには
縦横 8 ドットずつ減らして指定する必要
があります。
プチコンでダンジョンゲームを作る(3)/2
ICT ジュニア(上田パソコンクラブ)
また、SPSET 命令のキャラ番号を変えると、表示されるキャラクターが変わります。
以下のように変えてみましょう。
64:右向き
72:左向き
76:上向き
68:下向き
さらに、表示した自分のキャラクターをアニメーションで動かしてみましょう。
100 OX=120
101 OY=88
102 SPSET 0,64,2,0,0,2
103 SPOFS 0,OX,OY
4 コマ分アニメーション
104 SPANIM 0,4,10
105
106 ’--- ゲーム
107 @GAMELOOP
ループ
---
スプライトをアニメーションで動かすには、「SPANIM」(エスピーアニメ)命令を使います。
SPANIM 命令の文法は以下のとおりです。
SPANIM
0
スプライト
番号
,4
コマ数
,10
コマ表示
時間
,0
くり返し
回数
スプライト番号 アニメーションさせたいスプライトの番号。0~99。
コマ数
アニメのコマ数。SPSET 命令で指定した番号のキャラクター絵から、その
コマ数分だけアニメを表示する。
コマ表示時間 1コマを表示する時間。60 分の 1 秒単位で指定。
くり返し回数
アニメをくり返す回数を指定。0=無限にくり返し。省略すると無限くり返
し。
実行してみましょう。男の子のキャラがアニメーションして、歩いているように見えます。
→
→
→
→くり返し
プチコンでダンジョンゲームを作る(3)/3
ICT ジュニア(上田パソコンクラブ)
●キー操作でキャラクターの向きを変える
十字キーのキー操作で、自分のキャラクターの向きを上下左右に変えてみましょう。
上下左右の移動処理をするサブルーチンで、それぞれの向きのスプライトを設定します。
120
121
122
123
124
125
126
’イドウ ウエ
@UE
IF PY<=1 THEN RETURN
IF M(PX,PY-1)==0 THEN RETURN
PY=PY-1
上向きのスプライトを設定
SPCHR 0,76
RETURN
127
128 ’イドウ シタ
129 @SHITA
130
131
132
133
134
135
136
137
IF PY>=21 THEN RETURN
IF M(PX,PY+1)==0 THEN RETURN
PY=PY+1
下向きのスプライトを設定
SPCHR 0,68
RETURN
138
139
140
141
142
143
144
145
146
147
IF PX<=1 THEN RETURN
IF M(PX-1,PY)==0 THEN RETURN
PX=PX-1
左向きのスプライトを設定
SPCHR 0,72
RETURN
’イドウ ヒダリ
@HIDARI
’イドウ ミギ
@MIGI
IF PX>=29 THEN RETURN
IF M(PX+1,PY)==0 THEN
148 PX=PX+1
149 SPCHR 0,64
150 RETURN
RETURN
右向きのスプライトを設定
上下左右の 4 カ所のサブルーチンを変更しますが、キャラ番号以外は同じ内容なので、1 カ
所打ったら、あとはコピー&ペーストすればいいでしょう。
プチコンでダンジョンゲームを作る(3)/4
ICT ジュニア(上田パソコンクラブ)
新しく SPCHR(エスピーキャラクター)命令が出てきました。これはスプライトのキャラクターを
変更する命令です。
SPCHR
0
スプライト
番号
スプライト番号
キャラ番号
,76
キャラ
番号
キャラクターを変えたいスプライトの番号。0~99。
新しいキャラ番号。
プログラムを実行してみましょう。
十字キーの操作によって、自分のキャラクターが上下左右に向きが変わります。
ここで「DANJON6」の名前で、プログラムを保存(SAVE)しましょう。
プチコンでダンジョンゲームを作る(3)/5
ICT ジュニア(上田パソコンクラブ)
●上画面に背景を表示する
自分のキャラクターが表示できたので、次は自分の
周囲の迷路を背景として表示しましょう。
まず、最初のプログラムタイトルを
「DANJON7」にします。
1 ’***
2
DANJON7
***
プチコンの画面には、背景を表示するための「BG 画面」があります。
これを使って、背景の迷路を表示します。
プチコンでダンジョンゲームを作る(3)/6
ICT ジュニア(上田パソコンクラブ)
背景を表示する部分はサブルーチンにして、メインプログラムから呼び出すようにします。
最初に自分のキャラクターを設定する所で、GOSUB 命令で呼び出します。
100
101
102
103
104
105
106
107
108
OX=120
OY=88
GOSUB @BG
SPSET 0,64,2,0,0,2
SPOFS 0,OX,OY
SPANIM 0,4,10
’--- ゲーム
@GAMELOOP
ループ
---
上下左右の移動サブルーチンからも、背景表示サブルーチンを呼び出すようにします。
121 ’イドウ
122 @UE
ウエ
123
124
125
126
127
128
129
130
IF PY<=1 THEN RETURN
IF M(PX,PY-1)==0 THEN RETURN
PY=PY-1
背景を表示するサブルーチンを呼ぶ
GOSUB @BG
SPCHR 0,76
RETURN
131
132
133
134
135
136
137
138
139
140
@SHITA
IF PY>=21 THEN RETURN
IF M(PX,PY+1)==0 THEN RETURN
PY=PY+1
背景を表示するサブルーチンを呼ぶ
GOSUB @BG
SPCHR 0,68
RETURN
141
142
143
144
145
146
IF PX<=1 THEN RETURN
IF M(PX-1,PY)==0 THEN RETURN
PX=PX-1
背景を表示するサブルーチンを呼ぶ
GOSUB @BG
SPCHR 0,72
RETURN
’イドウ
シタ
’イドウ ヒダリ
@HIDARI
プチコンでダンジョンゲームを作る(3)/7
ICT ジュニア(上田パソコンクラブ)
147
148 ’イドウ
149
150
151
152
153
154
155
ミギ
@MIGI
IF PX>=29 THEN RETURN
IF M(PX+1,PY)==0 THEN RETURN
PX=PX+1
背景を表示するサブルーチンを呼ぶ
GOSUB @BG
SPCHR 0,64
RETURN
そして、プログラムの最後に、背景表示サブルーチンを追加します。
試しに、1 マス分だけ迷路のかべを表示してみます。
156
157 ’---
158
159
160
161
162
163
164
165
ハイケイ
ヒョウジ
---
@BG
BGCLR 背景面をクリア
BX=OX/8-2
キャラの1つ左上の BG 座標(BX,BY)を計算
BY=OY/8-2
BGPUT 1,BX
,BY
,91,2,0,0
BGPUT 1,BX+1,BY
,91,2,0,0
BGPUT 1,BX
,BY+1,91,2,0,0
166 BGPUT 1,BX+1,BY+1,91,2,0,0
167 RETURN
BG キャラクターを 4 個表示
プログラムを実行してしましょう。
キャラクターの左上に、迷路のかべが 1 個
表示されます。
かべの背景は、BG キャラクターの91番を
使っています。
他の番号の BG キャラクターに変えて、
試してみましょう。
プチコンでダンジョンゲームを作る(3)/8
ICT ジュニア(上田パソコンクラブ)
背景に関する新しい命令が出てきました。
BGCLR
BGPUT
BGCLR(ビージークリア)命令
背景画面をクリアします。
1
BG 面
番号
BG 面番号
x 座標
y 座標
BG キャラ番号
パレット番号
横反転
縦反転
,BX
x 座標
,BY
y 座標
,91
BG キャラ
番号
,2
パレット
番号
,0
横反転
,0
縦反転
BG キャラを表示したい BG 面。0=手前、1=奥。
BG キャラのx座標(0~63)。
BG キャラの y 座標(0~63)。
表示したい BG キャラ番号(0~1023)。
0~15。
0=反転しない、1=横反転。
0=反転しない、1=縦反転。
プチコンの BG 画面の座標は、以下のようになっています。
BG キャラクター1 個は 8×8 ドットの大きさです。
(スプライトは 16×16 ドットなので、その 4 分の 1 の大きさです)
BG 画面全体は、BG キャラクターで数えて 64×64 個分の大きさがあります。そのうちの一
部分の横 32×縦 24 個分(256×192 ドット)が画面に表示されます。
プチコンでダンジョンゲームを作る(3)/9
ICT ジュニア(上田パソコンクラブ)
BG キャラクターの座標(BX,BY)は、以下のように計算しています。
自分のキャラクター(スプライト)のグラフィック座標
(OX,OY)=(120,88)を 8 で割ると、BG キャラクター
162 BX=OX/8-2
163 BY=OY/8-2
で数えた座標になります。
さらに 2 を引くと、左上のブロックの座標になります。
BG キャラクターは 8×8 ドッ
トで、スプライトの 4 分の1の
大きさなので、スプライトと同
じ大きさで表示するには、
 (BX,BY)
 (BX+1,BY)
 (BX,BY+1)
 (BX+1,BY+1)
の座標で 4 個並べます。
「-2」の部分の数を変えると、
表示位置が変わります。試し
てみましょう。
プチコンでダンジョンゲームを作る(3)/10
ICT ジュニア(上田パソコンクラブ)
●迷路と対応して背景を表示する
今は勝手にかべを表示しましたが、実際はマップで周囲の迷路を1マスずつチェックして、
上画面にかべか道を表示しないといけません。
マップを1マスずつチェックして、上画面に「かべ」か「道」を表示する
上画面
マップ
マップの状態は、マップ配列変数 M(x,y)に入っていますから、その値をチェックして、上画
面にかべを表示しましょう。
157
158
159
160
161
162
163
164
165
166
’---
@BG
ハイケイ
ヒョウジ
---
BGCLR
自分の座標-4~+4の範囲で
FOR MDX=-4 TO 4
ループ
FOR MDY=-4 TO 4
MX=PX+MDX
自分の座標(PX,PY)→マップ座標(MX,MY)を計算
MY=PY+MDY
IF MX<0 OR MX>30 THEN @BGNEXT
IF MY<0 OR MY>22 THEN @BGNEXT
167 IF M(MX,MY)==1
168
169 BX=OX/8+MDX*2
170 BY=OY/8+MDY*2
THEN
@BGNEXT
マップが道だ
ったら飛ばす
迷路の外に
はみ出した
場合は飛ばす
BG の座標を計算
プチコンでダンジョンゲームを作る(3)/11
ICT ジュニア(上田パソコンクラブ)
171 BGPUT
1,BX
172
173
174
175
176
177
178
179
1,BX+1,BY
,91,2,0,0
1,BX
,BY+1,91,2,0,0
1,BX+1,BY+1,91,2,0,0
BGPUT
BGPUT
BGPUT
,BY
,91,2,0,0
かべを
表示
かべを表示しない時はここへジャンプ
@BGNEXT
NEXT MDY
MDY、MDX を変化させてループ
NEXT MDX
RETURN
プログラムを実行してみましょう。
上画面に迷路の背景が表示されます。
このままだと、出口のドアが表示されません。(ただのかべになってしまいます)
出口の位置は(29,22)で決まっているので、その座標の時はドアを表示するようにします。
ドアの表示はサブルーチンにします。
171
172
173
174
BGPUT
BGPUT
BGPUT
BGPUT
1,BX
,BY
,91,2,0,0
1,BX+1,BY
,91,2,0,0
1,BX
,BY+1,91,2,0,0
1,BX+1,BY+1,91,2,0,0
175 IF MX==29 AND MY==22 THEN
GOSUB @BGDOOR
マップ座標が出口の時は
176
ドア表示のサブルーチンを呼ぶ
177 @BGNEXT
178 NEXT MDY
179 NEXT MDX
180 RETURN
181
182 ’ドア
ドアの背景を表示
183 @BGDOOR
184 BGPUT 1,BX
,BY
,719,2,0,0
185
186
187
188
BGPUT 1,BX+1,BY
,720,2,0,0
BGPUT 1,BX
,BY+1,751,2,0,0
BGPUT 1,BX+1,BY+1,752,2,0,0
RETURN
プチコンでダンジョンゲームを作る(3)/12
ICT ジュニア(上田パソコンクラブ)
プログラムを実行してみましょう。
出口まで行くと、ドアが表示されます。
これで、基本的な画面表示はできました。
「DANJON7」の名前で、プログラムを保存(SAVE)してください。
プチコンでダンジョンゲームを作る(3)/13
ICT ジュニア(上田パソコンクラブ)
●ゴールの設定
ここまでで、基本的な画面表示やキー操作はできました。
あとは、おもしろいゲームになるように、いろいろルール設定や演出をしていきましょう。
今のままだと、出口へたどりついても何も起きないので、「ゴール」と表示してゲームが終了
するようにしましょう。
先頭のプログラムタイトルを
「DANJON8」にします。
1 ’***
2
DANJON8
***
ゴールの条件は、出口のドアの1つ上、
座標で(29,21)へ来た時にします。
(ドアの場所へは移動できないので)
ゲームループの所で、プレイヤーの座標(PX,PY)をチェックして、(29,21)になったら「ゴール」
のプログラムへジャンプします。
107
108
109
110
111
112
113
114
115
116
’--- ゲーム
@GAMELOOP
ループ
---
B=BUTTON()
PNLSTR PX,PY,” ”
IF B==1 THEN GOSUB
IF B==2 THEN GOSUB
IF B==4 THEN GOSUB
IF B==8 THEN GOSUB
PNLSTR PX,PY,”г”
@UE
@SHITA
@HIDARI
@MIGI
117
出口へ着いたら、ゴールのプログラムへジャンプ
118 WAIT 1
119 IF PX==29 AND PY==21 THEN @GOAL
120 GOTO @GAMELOOP
プチコンでダンジョンゲームを作る(3)/14
ICT ジュニア(上田パソコンクラブ)
プログラムの最後に、「ゴール」を表示するプログラムを追加します。
190
191
192
193
194
195
196
197
’--- ゴール ---
@GOAL
画面をクリア
ACLS
画面中央に「ゴール」表示
LOCATE 9,11
PRINT ”★★★ ゴール ★★★”
END
プログラムを終了
プログラムを実行してみましょう。
ゴールに着くと、「ゴール」と表示されて
ゲームが終わります。
プチコンでダンジョンゲームを作る(3)/15
ICT ジュニア(上田パソコンクラブ)
●BGM を鳴らす
ゴールした時の演出として、音楽(BGM)を鳴らしてみましょう。
BGM を鳴らすには、BGMPLAY(ビージーエムプレイ)命令を使います。
190
191
192
193
194
195
’--- ゴール ---
@GOAL
ACLS
LOCATE
9,11
196 PRINT ”★★★
197 BGMPLAY 5
ゴール
★★★”
5 番の BGM を鳴らす
198 END
プログラムを実行してみましょう。
ゴールすると、ファンファーレが鳴ります。
同じように、ゲームプレイ中も BGM が鳴るようにしてみましょう。
迷路を作り終わって、ゲームループに入る前に、プレイ BGM が鳴るようにします。
103
104
105
106
107
108
109
110
SPSET 0,64,2,0,0,2
SPOFS 0,OX,OY
SPANIM 0,4,10
BGMPLAY
1
’--- ゲーム
@GAMELOOP
1 番の BGM を鳴らす
ループ
---
プログラムを実行してみましょう。
ゲーム中も BGM が鳴ります。
プチコンでダンジョンゲームを作る(3)/16
ICT ジュニア(上田パソコンクラブ)
BGMPLAY 命令の文法は、以下のとおりです。
BGMPLAY
1
曲番号
番号
説明
0 軽快な曲
曲番号は 0~29。
1 湿った暗い感じの曲
2 緊張感高まる曲
曲は 30 曲あります。一覧リストはこちら→。
曲番号を変えると、違う曲になります。
いろいろ試してみてください。
3 激しくアップテンポな曲
4 スタートジングル
5 クリアジングル
6 ゲームオーバー
「DANJON8」の名前で、プログラムを保存(SAVE)し
てください。
7 メニューセレクト
8 結果発表
9 スタッフロール
10 スタッフロール その 2
11 時代劇ゲーム風
12 軽快なマーチバンド風
13 激しいロック調
14 軽快な曲 その 2
15 WOND
16 考え中
17 WOND2
18 未来系
19 BAL
20 BAL_2
21 スパイ系
22 SCI
23 シューティング
24 パッド
25 SEN
26 ピュア
27 ROA
28 CUR
29 FIG
プチコンでダンジョンゲームを作る(3)/17