RPG01

MAGI JAVA -Make a game in Java-
JAVA Game作成講座 027回

ダンジョンマップを作る1 チップとブロックを配置


kouza027 jarファイル


[ダンジョンマップを作成]

簡単に出来ると思ったが思った以上に時間を食った。
エディタ作った方が時間が短縮できたかもしれない…。
反面教師ということで、こういうクソめんどい方法を取った。
次は作るときは楽しよう…。

ダンジョンを2フロア分作った。
ここにイベント配置したらゲームは完成。
まだ細かい調整をしてないのでもう少し手間がかかるが、
マップだけ作ってキリにした。
手順は町とほとんど同じだから振り返るまでも無いかもしれないが、
サイズが一回り大きいのと、同じマップナンバーで別フロアを使ったのでそのおさらいだけしておく。
実際のデータ入力のコピペは長くなるので省略する。

if (mnum==3) { //ダンジョン 1F

String tnum[][]=null;
if (fnum==1) {
String tnum2[][]= {
--中略--
}
tnum=tnum2;
}
if (fnum==2) {
String tnum2[][]= {
--中略--
}
tnum=tnum2;
}
for (int x=0;x<=30;x++) {
for (int y=0;y<=30;y++) {
maptipNumber[x][y]=tnum[y][x];
}
}
setMapSize(31,31);


}

フロアナンバー、fnumで読み込むマップを分けているのがポイント。
マップが同じでフロアだけ切り替えたいダンジョンで使う。
マップナンバーだけで管理していると、どのナンバーがどのマップか分からなくなるので、
フロアも併用すると視覚的、感覚的に分かりやすくなる。
フロアとルームで分けていた時期もあるが、めんどくさいのでフロアで一本化した。

中略

if (mnum==3) { //ダンジョン 1F

int bnum[][]=null;
if (fnum==1) {
int bnum2[][]= {
//0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//0
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//5
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1},//6
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1},//7
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1},//8
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1},//9
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1},//10
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//11
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//12
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//13
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//14
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//15
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//16
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//17
{1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1},//18
{1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1},//19
{1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1},//20
{1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,1},//21
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//22
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//23
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//24
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//25
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//26
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//27
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//28
{1,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,1},//29
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}//30
};
bnum=bnum2;
}
if (fnum==2) {
int bnum2[][]= {
//0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//0
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},//1
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//2
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//3
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//4
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//5
{1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//6
{1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//7
{1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//8
{1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//9
{1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//10
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//11
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//12
{1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//13
{1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//14
{1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//15
{1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//16
{1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//17
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//18
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},//19
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},//20
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1},//21
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//22
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//23
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//24
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//25
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//26
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//27
{1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1},//28
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},//29
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}//30
};
bnum=bnum2;
}
for (int x=0;x<=30;x++) {
for (int y=0;y<=30;y++) {
kariBlock[x][y]=bnum[y][x];
}
}


}
マップの方は実データのコピペを省略したが、これの二倍くらい見づらいデータが入っている。
長時間見ているとゲシュタルト崩壊起こす。
拠点のマップよりは広いが、通常のゲームのマップよりはるかに狭い。一画面+10マス以下。
これでも打ち込みに二日以上かかった…。
テストして見比べながら修正、また打ち直して修正…という果てしない作業だった。

最後にオブジェ配置をどうやっているかも少しだけ書いておく。

if (mnum==3) {

if (fnum==1) {
objKariSet3(0,25,0,0,5,0,2,1,23,8,4);
objKariSet3(0,26,0,0,5,0,2,1,23,9,4);
objKariSet3(1,2,0,7,5,0,3,2,2,2,6);
objKariSet3(14,11,0,7,5,0,3,2,13,11,4);
}
if (fnum==2) {
objKariSet3(1,2,0,8,5,0,3,1,2,2,6);
objKariSet3(14,11,0,8,5,0,3,1,14,12,2);
}


}

こんな感じ。これもマップ同様フロア切り替えでオブジェを再読み込みさせる。
これから移動オブジェ以外のセットを行っていき、メインイベントを作る。
敵キャラオブジェなどもここで配置し、マップ切り替えで復活する。
メインのイベントはフラグ操作が3つ、ボスが1つ。
ボスも雑魚敵と扱いが変わらないので、マップ切り替えやロードで復活する。
うっかり消耗した状態でボス部屋でセーブしたら、デスルーラで戻るしかない。

次回は最低限のメインイベントをセットする。
ボスなし、雑魚なし、ただクリアできるかどうかのテストだけ行う。
もう設定するものは少ないのでそれほど時間はかからず見せられると思う。


・トップページへ戻る
inserted by FC2 system