Создание 2D-карты

Я новичок в создании карт и хранении массивов, и мне было интересно, могу ли я получить некоторую помощь в этой задаче. Я работаю на Java и использую библиотеку LWJGL, если это вообще поможет.

Я не пытаюсь копировать какую-либо другую игру, поэтому она будет отличаться от любой другой игры. В основном мне понадобятся разные области, такие как вода, трава и грязь. Со временем я добавлю горы и холмы, скалолазание и т. д.

Мне нужно знать, как этого можно достичь, если это возможно, я новичок в этом, как я уже сказал, поэтому у меня нет кода, чтобы дать вам представление о том, на каком уровне я нахожусь.

Если вы можете помочь, пожалуйста, оставьте ответ, я тоже хотел бы получить столько помощи, сколько смогу.


person Shannon    schedule 25.04.2011    source источник
comment
есть еще один стек, который отвечает на такие вопросы ;) gamedev.stackexchange.com/questions/4031/   -  person Caspar Kleijne    schedule 25.04.2011
comment
Ничего страшного, сейчас посмотрю. Большое спасибо за помощь.   -  person Shannon    schedule 25.04.2011


Ответы (2)


То, как она отображается (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++;
}
person corsiKa    schedule 25.04.2011
comment
В этом отлично помогает глоукодер. Однако мне нужны дополнительные пояснения, и мне интересно, могу ли я каким-то образом связаться с вами извне? Что-то вроде MSN было бы уместно и упростило бы передачу кода и т. д. - person Shannon; 25.04.2011

Существует несколько способов создания игр на Java. Создание уровней на основе тайлов также может быть выполнено несколькими способами. Вы можете поискать в Интернете некоторые учебные пособия по созданию 2D-игр Java и найти некоторые идеи о том, как это сделать.

Поскольку вы хотите использовать lwjgl, вам будет сложно создавать 2D-игры. Вы можете использовать другие фреймворки, которые упростят это для вас, и ответы на этот вопрос предложат вы некоторые.

Вот несколько ссылок, которые могут вдохновить вас на создание 2D-карт:

Вам также следует попробовать использовать сайт обмена стеками разработки игр. Они также могут помочь вам с программированием игр.

person Spoike    schedule 25.04.2011