📄 worldbuilder.java
字号:
package istarion.core;
import java.util.*;
import istarion.frontend.*;
public class WorldBuilder
{
MazeBuilder __mb = null;
MonsterFactory __mf = null;
private final Vault RECT_ROOM;
private ProgressBar __progressBar;
public WorldBuilder(ProgressBar pb)
{
__progressBar = pb;
__progressBar.setText("Generating Dungeon...");
__progressBar.setSteps(17);
__progressBar.doShow();
__mb = new MazeBuilder();
__mf = new MonsterFactory();
RECT_ROOM = new Vault(
new int[][]
{
{1,1,1,1,1,1,1},
{1,1,1,0,1,1,1},
{1,1,0,0,0,1,1},
{1,0,0,0,0,0,1},
{1,1,0,0,0,1,1},
{1,1,1,0,1,1,1},
{1,1,1,1,1,1,1}
}, 7, 7,
0,3,
6,3,
0,3,
6,3
);
}
public Dungeon buildDungeon(int level)
{
int sizeX = Toolkit.tk().rollDice(1, 30, 30) + (5 * level);
int sizeY = Toolkit.tk().rollDice(1, 30, 30) + (5 * level);
int startX = Toolkit.tk().rollDice(1, sizeX - 1, 0);
int startY = Toolkit.tk().rollDice(1, sizeY - 1, 0);
char maze[][] = new char[sizeX][sizeY];
__mb.makeMaze(maze, startX, startY, Dungeon.NORTH, 30, true);
for (int i = 0; i < 15; i++)
{
__mb.makeMaze(maze, Toolkit.tk().rollDice(1, sizeX - 1, 0),
Toolkit.tk().rollDice(1, sizeY - 1, 0), Dungeon.NORTH, 30, false);
__progressBar.nextStep();
}
addRooms(maze, 35 + level);
Dungeon dungeon =
new Dungeon(maze, "The Dungeon, Level " + level, level, startX, startY);
//some test monsters.
for (int i = 0; i < 20; i++)
{
Monster m = __mf.createMonster(Monster.ORC);
int mx, my;
do
{
mx = Toolkit.tk().rollDice(1, sizeX - 2, 0);
my = Toolkit.tk().rollDice(1, sizeY - 2, 0);
m.setLocation(mx, my);
m.setDungeon(dungeon);
} while (!dungeon.addMobile(m, mx, my));
}
__progressBar.nextStep();
return dungeon;
}
/**
* Add simple rectangular rooms to the dungeon.
*/
private void addRooms(char[][] maze, int amount)
{
for (int i = 0 ; i < amount; i++)
{
int roomSizeX = Toolkit.tk().rollDice(1,3,3);
int roomSizeY = Toolkit.tk().rollDice(1,3,3);
int roomPosX = Toolkit.tk().rollDice(1, maze.length - roomSizeX - 3, 0);
int roomPosY = Toolkit.tk().rollDice(1,maze[0].length - roomSizeY - 3, 0);
for (int a = roomPosX; a <= roomPosX + roomSizeX - 3; a++)
for(int b = roomPosY; b <= roomPosY + roomSizeY; b++)
maze[a][b] = Dungeon.FLOOR;
}
__progressBar.nextStep();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -