То, как он отображается (openGL, swing / awt, все остальное), не связано с самой картой. Вот как это выглядит. Я использую специальный класс CoordinateMap, который я написал, но в основном это не более чем оболочка для Map<Point,MapTile>
.
Как вы хотите, чтобы ваша карта имела большое влияние на то, что вы пытаетесь сделать здесь Я полагаю, что большинство алгоритмов будут использовать что-то вроде этого (предполагая прямоугольный):
for(int x = minx; x <= maxx; x++) {
for(int y = miny; y <= maxy; y++) {
map.put(new Point(x,y),generateRandomTile());
}
}
Еще один вариант - распространение. Это работает так:
// pick 10 random points (10 is up to you)
MapTile[] seeds = new MapTile[10];
Point[] seedPoints = new Point[seeds.length];
for(int i = 0; i < seeds.length; i++) {
seeds[i] = generateRandomTile();
seedPoints[i] = generateRandomPoint();
}
int distance = 1;
while(true) {
boolean changed = false;
for(int i = 0; i < seedsPoints.length; i++) {
Point p = seedPoints[i];
for(int x = -distance; x <= distance; x++) {
Point here = new Point(x,p.y));
MapTile tile = tiles.get(here);
if(tile == null) {
tiles.put(here,new Tile(seeds[i].terrainType));
changed = true;
}
}
// that does the left edge of the square of distance away from
// the center. I'll leave the other edges of the square for you since they're boilerplate
} // end for seeds
if(!changed) break;
distance++;
}