ゲームプログラミング (第kara.matsu.ac.jp/~hamasaki/h20/kougi/game/data/10.pdfgsel...
TRANSCRIPT
1
ゲームプログラミング (第 10 回)
平成 20 年 12 月 12 日
担当教員 浜崎 央
1. 準備
2. マップ用の画像と主人公の画像を用意する
☆今日やること
今日から、RPG の作成に挑戦してみます。
正直、結構難しいので、多少分からなくてもこんなものかなという感じで進めてみてください。
(算数の知識がちょっと必要かな・・・)
今日は、とりあえず、マップを作成してみます。
①【mgjcsrv5 の学籍番号】の中の【ゲームプログラミング】フォルダの中に【10】というフォルダを
作成しておく。
①「ペイント」を起動し、メニューバーの【変
形(I)】→【キャンバスの色とサイズ】を選
択。
②【幅】と【高さ】を「32 ピクセル」に設
定して【OK】
③道用の画像を作成し、フォルダの中
に「michi.bmp」という名前で保存。
④壁用の画像を作成し、フォルダの中
に「kabe.bmp」という名前で保存。
⑤主人公の画像を作成し、フォルダの
中に「jibun.bmp」という名前で保存。
2
3. マップデータから、マップを作成
①基本画面と、画像の読み込み用の命令を入力。
screen 命令で、画面 ID=0 に、横
640、縦 640 の画面を作成。
(32 ピクセル×20 個=640)
buffer 命令で仮想画面(ID=1,2,3)を
作って、そこに picload 命令で画像を
取り込む。
screen 画面 ID, 横の長さ, 縦の長さ
指定した画面 ID の画面の大きさを変更します。長さの単位はドットです。
buffer 画面 ID, 横の長さ, 縦の長さ
screen 命令と同じで、指定した画面 ID を初期化します。ただし、buffer 命令ではメモリ
上に仮想画面が作られるだけで、実際に画面には表示されません。
実際に表示されている画面
画面 ID=0
screen 命令で作られた画面
画面 ID=1
buffer 命令で作られた仮想画面
gcopy 命令
picload “ファイル名”
画像ファイルをロードして、ウィンドウサイズを自動的に絵のサイズに合わせます。
読み込むことの出来る画像は「bmp(ビットマップ形式)」「gif(GIF 形式)」「「JPEG(ジェ
イペグ形式)」「ico(アイコン形式)」の 4 つです。
picload 命令で、画像
ファイルを読み込み
3
3-1. マップデータの作成
①メモ帳を起動し、マップデータを作る。
このような「0」と「1」だけのデー
タを作っておいて、
「0」→「道の画像」
「1」→「壁の画像」
に置き換えて迷路にしていきます。
プログラムの中でデ
ータを読み込んで
とりあえず、すべて 1(壁)のデータをメモ帳で作
っておいて、「map.txt」という名前で【10】フ
ォルダに保存しておきます。
縦に 20 列
横に 20 列
gsel 画面 ID
これから処理するための画面を、指定された画面 ID に変更します。
cls クリアするときの色
ウィンドウ内の情報を全てクリアします。クリアする 5 種類の色を指定することが出来ます。
<クリアするときの色>
0:白 1:明るい灰色 2:灰色 3:暗い灰色 4:黒
gsel 命令で、画面 ID を 0 に戻し、
cls 命令で画面を初期化する。
4
3-2. マップデータの読み込み
0 1 2 ・・ 19
0 map(0.0) map(1.0) map(2.0) ・・ map(19.0)
1 map(0.1) map(1.1) map(2.1) ・・ map(19.1)
2 map(0.2) map(1.2) map(2.2) ・・ map(19.2)
: : : : :
19 map(0.19) map(1.19) map(2.19) ・・ map(19.19)
マップデータは、まず全部の数字を一つの変数(aa)に読み込んで、それを使いやすいように 2 次元配列
変数(map)に入れておきます。
aa = “000010001010101・・・”
まず全部の数字を一つの変
数(aa)に読み込む
map(0.0) = “0”
map(0.1) = “0”
map(0.2) = “1”
:
:
map(19.19) = “0”
後で使いやすいように、2
次元配列変数(map)に代入
しなおしておく。
いったん読み込みようの変数 aa を作成
マップデータファイル「map.txt」からデ
ータを読み込んで、変数 aa に代入
①”map.txt”ファイルから、マップデータを読み込む。
sdim 変数名, 文字数
文字列型の配列変数を作成します。
bload “ファイル名”, 変数名, 読み込むサイズ(バイト)
“ファイル名”のファイルからデータを読み込み、変数に代入します。
440 はバイト数(文字数)です。 (半角英数字 1 文字=1 バイト)
なぜ 440 かというと、
(「数字:20 文字」+「改行文字:2 文字」)×20 行 = 440 文字。
x:横座標
y:縦座標 map(x,y) = 0 → 道の画像
map(x,y) = 1 → 壁の画像
5
■ 2 重ループの練習(2 次元配列のために)
①<ツールバー>の【新規作成ボタン】か
ら、新しいファイルを作成
②右のプログラムを書いて、「2 重ループの
練習」という名前で保存して、実行
repeat から loop ま
でを 10 回繰り返す
変数 cnt繰り返しの中で、
1 回目は 0
2 回目は 1
と、何回目の繰り返しなのかが、自
動的に値として入る変数。
③今のプログラムを次のように変更
repeat から loop ま
でを 10 回繰り返す
repeat から loop ま
でを 10 回繰り返す
repeat 繰り返し回数 ~ loop
repeat~loop の間を回数分繰り返し実行します。
mes “文字列”
mes 変数名
ウィンドウ内に、指定された文字列、または変数の中身を表示します。
6
実行すると・・・
外側のループの 0 回目が実行される
内側のループの 0~9 回目が実行される
外側のループの 1 回目が実行される
内側のループの 0~9 回目が実行される
外側のループの 2 回目が実行される
④さらに変更すると・・・
7
map.txt
メモ帳に
書いた値
0 1 ・・・ 0 改 改 0 0 ・・・ 1 改 改 0
文字目
(s =)0 1 ・・・ 19 20 21 22 23 ・・・ 41 42 43 44
map(x,y)
x:横
y:縦
(x=0,y=0) (x=1,y=0) ・・・ (x=19,y=0) (x=0,y=1) (x=1,y=1) ・・・ (x=19,y=1) (x=0,y=2)
x と y を使って、何文字目(s)を計算すると、 x + y × 22
(例えば、3 列目の 7 行目(x=3、y=7)だと 3 + 7×22 = 157 文字目)
map(0.0) map(1.0) map(2.0) ・・ map(19.0)
map(0.1) map(1.1) map(2.1) ・・ map(19.1)
: : : :
map(0.19) map(1.19) map(2.19) ・・ map(19.19)
縦のための 20
回繰り返し 横のため
の 20 回
繰り返し
縦用のカウント(cnt:自動的に 0~19 が順番に
入る)を、変数 y に代入しておく。
変数 aa のデータを 1 文字、
変数 s に代入。
変数「map(横のカウント,縦のカウン
ト)」に、数字として s の値を代入。
②読み込んだデータを 2 次元配列にセットしておきます。
2 次元配列 map を 20×20 で作
成
横用のカウント(cnt:自動的に 0~19 が順番に
入る)を、変数 x に代入しておく。
変数 = strmid( 文字列が入っている変数名, 取り出す位置, 取り出す文字数 )
文字列の入っている変数から、取り出す位置と、何文字取り出すかを与えて、取り出した文字を
変数に代入します。
(例)
A=”MATSUMOTO”
S=strmid( A, 3, 2 ) ←A という変数から、3 文字目から、2 文字分取り出す
(この結果 S=”SU” となっています)
20×20=400 個の変数
が出来上がります。
8
3-2. マップの表示
とりあえず、ここまで・・・続きは来週・・・
来週は、主人公を動かすことをやります。
縦 の た め の
20 回繰り返
し
横のための 20 回
繰り返し
画像ファイルの大きさが 32 ピクセル×
32 ピクセルなので、横、縦のカウント
を 32 倍して、pos 命令で位置を設定し、
データが「0」
→画像 ID は 2(道)
データが「1」
→画像 ID は 3(壁)にするために、map の値+2 に
して、その値を変数「gid」に代入。
その画像 ID(gid)の画面を、表示する。
確認ができたらマップデータを完成させる
・スタートとゴールを決めておくこと。
gcopy 画面 ID, x1, y1, x2, y2
画面 ID に書かれている画像を、現在の画面にコピーして貼り付けます。コピーする画像の
大きさは(x1,y1)から(x2,y2)までです。