Генерация мира

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 06 мар 2007, 15:34

Значит ты не прав. На малых картах (100х100 :) ) Он ведёт себя гораааздо лучше. Причём запускать его лучше в парах - два раза запустить по 1000-1500 итераций. На карте такого размера они 99,9% пересекутся.
Айв кнгенгах Йог-Сотот

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 06 мар 2007, 16:10

Кстати, непредсказуемость в генерации уровней - это как раз очень круто.
Айв кнгенгах Йог-Сотот

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 933
Зарегистрирован: 27 ноя 2006, 12:16

Сообщение BreakMT » 06 мар 2007, 16:45

Ну возможно, но в примере Кича уровни получаются довольно кривыми. Но это все ИМХО конечно. Т.к. лично мне нравится, когда пространства побольше.
Для этого нужно этот муравейник немного разрушить, потом расскажу как я делаю, когда крушу уровень:)

ADB

Сообщение ADB » 06 мар 2007, 17:40

Я прошу прощения за термин "толщина стенок", как обычно, сказывается усталость. :lol:
Конечно это не верное определение. Я имел ввиду растояние между стенками коридоров, т.е. толщину проходов тунелей.

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 07 мар 2007, 16:07

BreakMT писал(а):Ну возможно, но в примере Кича уровни получаются довольно кривыми. Но это все ИМХО конечно. Т.к. лично мне нравится, когда пространства побольше.
Для этого нужно этот муравейник немного разрушить, потом расскажу как я делаю, когда крушу уровень:)
Было бы наивно предполагать, что можно обойтись одним идеальным генератором. Генератор следует подбирать исходя из идеи уровня (подземелье, пещеры, муравейник, замок), либо комбинировать генераторы.

Вот муравейник, например, действительно предполагает, что уровни будут кривыми. Если слово «кривой» употреблено в прямом смысле, конечно.

Дальше его можно разнообразить. Как и любой другой генератор. В идеале генераторы следует комбинировать.
Dump the screen? [y/n]

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 08 июл 2007, 17:22

Наверно позновато пишу, да и не совем в тему, но уж как есть.

Тема у вас вроде началась с генерации мира, а затем продолжилась классическим спором на тему генерацией подземелий, так вот я, в основном, по поводу первого.

Как-то я расматривал проблемы генерации мира с точки зрения высот и понял, что нет ничего лучшего, чем какая-то заковыристая, нетривиальная функция двух переменных, где значение функции является высотой над уровнем миря, а переменные соответственно координатами. Немного поэксперементировал с этим. В принципе результаты меня удовлетворили, но я, как обычно, в исследованиях не доделал до конца. Сейчас глянул - фиг что понял, кроме того что функции были суммой синусов и косинусов от многочленов 5-6-й степени. Если кого-то заинтересует - могу скинуть, что получилось.

По поводу наброса ландшафта. Где-то так делал для другой игры (естественно недоделанной). Накидывал точки на плоскости и придавал им значения (типа лес, кустарник, степь, тундра) где-то 1/100 от общего числа точек, а затем расширял полученные зоны, рэндомом выбирая точку и продливая в произвольном направлении линией данный тип ланшафта, на случайное количество клеток. После чего заполнял по особой (не помню какой) схеме клетки между сторонами угла, состоящего из одного рельефа, когда таковые получались. Ну и потом на это реки как-то накладывал и горы. Эта прога потерялась, когда старый харддиск сломался.

Ну и по поводу подземелий. Когда писал АДОМ, делал просто - накидывал комнаты и попарно соединял проходами (выбор направления, случайная длина - пока не пересекутся, естественно следя за тем чтоб стены других комнат не нарушались, точнее углы, чтобы дверей в углах не получалось). Потом проверка и исправление ошибок и неудачных моментов. 8) В-общем, ровно как в АДОМЕ подземелья старался сделать. 8) Но не совсем так вышло. Это тоже могу выложить, если кому-то интересно.

P.S. АДОМ естественно до конца не доделал, но движок почти готов был - файт, монстры, левела, стрельба, вещи, сейвы, дружественность/агрессивность - кроме магии и монтерс инвентори. Тож могу выложить.

ADB

Сообщение ADB » 08 июл 2007, 21:32

Troll писал(а):По поводу наброса ландшафта...
Где-то...
недоделанной...
(не помню какой)...
как-то...
прога потерялась...
Это, конечно, все замечательно :wink:
Но хотелось бы конкретики, раз на то пошло 8)

Аватара пользователя
BreakMT
WANDER Team
Сообщения: 933
Зарегистрирован: 27 ноя 2006, 12:16

Сообщение BreakMT » 09 июл 2007, 12:12

Когда писал АДОМ
Ты свой рогалик адомом назвал чтоли? :shock:

Аватара пользователя
Максим Кич
Администратор
Сообщения: 1642
Зарегистрирован: 03 дек 2006, 20:17
Откуда: Витебск, Беларусь
Контактная информация:

Сообщение Максим Кич » 09 июл 2007, 14:00

BreakMT писал(а):
Когда писал АДОМ
Ты свой рогалик адомом назвал чтоли? :shock:
Аншынт Домейнс Оф Мыстери :lol:
Dump the screen? [y/n]

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 09 июл 2007, 15:07

ADB писал(а):
Это, конечно, все замечательно
Но хотелось бы конкретики, раз на то пошло
Нууу, я ж написал, что не помню. А в-целом, я указывал идеи, а способы их реализации могут быть разнообразными. Предложенная идея основывается на определении какого-то количества случайных базовых точек разного рельефа - этаких очагов, которые в последствии расширяются поглощая всю карту. А уж кто каким способом это сделает... Тем более что нужно эксперементировать и настраивать.

Насчёт конкретики, пожалуйста.
Сел, попытался вспомнить, как же я там делал - не смог, зато пришёл в голову несколько другой способ. Где накидывать не линиями и областями, а точками. Простейший Паскаль, думаю, все знают

program zones;
uses crt;
const x=78; y=23; baza=20; d=4; tip=5;
var l:char;k,i,j,ni,nj,col:byte;bb:boolean;kol:integer;
pole:array[1..x,1..y] of byte;
begin

textbackground(black);
textcolor(white);
randomize;
clrscr;
for i:=1 to x do for j:=1 to y do pole[i,j]:=0;

for kol:=1 to baza do begin
bb:=false;
while bb=false do begin
i:=random(x)+1;
j:=random(y)+1;
col:=random(tip)+1;
if pole[i,j]=0 then begin pole[i,j]:=col;
gotoxy(i+1,j+1);textcolor(col);write('#');bb:=true;end;
end;
end;

while kol<>x*y do begin

bb:=false;
while bb=false do begin
i:=random(x)+1;
j:=random(y)+1;
if pole[i,j]<>0 then bb:=true;
end;

k:=random(d*4)+1;
if k>2*d then ni:=i
else if k>d then ni:=i+k-d
else ni:=i+k-d-1;
if k<=2*d then nj:=j
else if k>3*d then nj:=j+k-d*3
else nj:=j+k-d*3-1;

if ni<1 then ni:=1;if ni>x then ni:=x;
if nj<1 then nj:=1;if nj>y then nj:=y;

if pole[ni,nj]=0 then begin
pole[ni,nj]:=pole[i,j];
gotoxy(ni+1,nj+1);textcolor(pole[i,j]);write('#');kol:=kol+1;end;
end;

l:=readkey;
end.

***Ессно, она не оптимальна по количеству проделанных операций, но это ясно решаемо, просто лень переделывать. Кстати, не проблемно и такого типа карты задавать несколькими байтами.


Конретнее быть не может. :) Уже с этим можно эксперементировать.
x,y - длина и ширина мира. baza - количество начальных очагов. d - максимально возможное минимальное расстояние точки от других точек такого же рельефа. tip - количество различных рельефов.
Скажем установив d=1, можно отменить все получающиеся "смешанные" зоны, хотя их можно считать и переходными типа лесотундры, болот с кустарником итд. Можно, к примеру, дать дополнительную установку, что вся тундра не южнее 5, а пустыня не севернее мах-5. Можно разные вероятности на разные типы местности поставить. Можно приближённость различных рельефов разную сделать. Да много чего.
Впрочем, для этого следует знать, что требуется получить - карту огромного мира подобного земному, карту большого острова или маленькую зону; какие типы местности нужны, как они друг на друга накладываются, должна ли быть вода итп. Например, речки точно так нельзя накидывать :)
И стоит реальные карты из атласов поизучать :).
В-общем, это тоже общие фразы получились (всё что ниже проги) - но ведь я и не знаю конкретной цели.:)

P.S. Кстати, карты для 3-ей цивилизации, о которых тут говорили, мне не очень нравятся, однообразные слишком - понятно что всё ради балланса делалось. Вот для 2-ой отлично получалось, эти замечательные горные массивы длиной до 15 клеток...
Последний раз редактировалось Troll 09 июл 2007, 15:23, всего редактировалось 1 раз.

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 09 июл 2007, 15:20

BreakMT писал(а):
Ты свой рогалик адомом назвал чтоли?
Шутку понял, жалею что так не планировал. :)
Хотя рабочее название было My_adom.exe :)

Офф-топ.
Ясно, что потом бы изменил, я в принципе только движок писал, были, конеш, прикидки как там сюжет будет, но цельной картины не было. Отдалённо DungeonCrawl должен был напоминать, но это я теперь знаю... :)
Пару слов. Что точно там бы было - это отсутствие левелов, только качание скиллов, причём прикладное. Ну и с богами мутка посеръёзнее чем в Crawl'е планировалась.

Аватара пользователя
Sanja
Администратор
Сообщения: 791
Зарегистрирован: 24 ноя 2006, 12:25
Откуда: Новосибирск
Контактная информация:

Сообщение Sanja » 10 июл 2007, 00:28

Максим Кич писал(а):Аншынт
Скорее "Ачеридной". :)

Troll
Выкладывай, раз грозился 8)

Кстати, если заметили, можно использовать кнопку "Вставить вложение"

ADB

Сообщение ADB » 10 июл 2007, 07:29

Спасибо за конкретику Troll, попробую на днях разобраться в твоем методе :wink:

Аватара пользователя
Troll
Сообщения: 59
Зарегистрирован: 08 июл 2007, 12:55
Откуда: Одесса

Сообщение Troll » 10 июл 2007, 13:17

Sanja писал(а):
Максим Кич писал(а):Аншынт
Скорее "Ачеридной". :)
Точно, очередной. :)
А что в этом плохого? Следтельно Бискап дейтвительно создал культовую игру.
Sanja писал(а): Troll
Выкладывай, раз грозился 8)
А надо ли???
Хорошо.

Необходимые пояснения:
1. Пойдёт ли прога где ещё кроме моей машины - фиг его знает. Под ДОС точно должна функционировать.
2. Сразу прошу на мой инглиш мне не указывать - сам знаю. :)
Знаю, что курсор прыгает - видно не везде поотменял его. Под ДОС (full screen) всё зашибись кстати.
3. Команды.
Передвижение на нумлоке. Удары также. i - инвентарь и далее по подсказкам. t - стрельба, перевести курсор и указать куда. o,c - открыть/закрыть. k - выбить. s - сеарч. d и запятая - бросить/поднять. >,< - понятно что. Ctr+e и Shift+q - выход. Ещё команда есть Ctr+h - типа поменять действующую руку и сколькими руками сражаться - на случай если в вопросах при смене оружия/щита/лука чего то не того ответил.
4. Примечания.
Двери можно бить оружием - шанс что сломается (попортится, погнётся, треснет итд), и "k"ick'ать - никаких последствий пока не написал. При стрельбе из лука он ломается с очень высокой вероятностью. :) Фиг сейчас найду, где это исправить. Заметил глюк с shooting/throwing - не те надписи, что следует. Но ерунда это. Можно поигратся с файтами монстов между собой.
5. Короче, адом-адомом на данном этапе. :) Дальше - лучше должно было быть. Может как-то всю идею распишу. В двух словах - реализьму побольше хотелось.

*** Второй вложенный файл - это генератор лабиринтов.

Аватара пользователя
Maelstrom
Мастер
Сообщения: 2062
Зарегистрирован: 26 ноя 2006, 14:19
Откуда: г. Усть-Кирдык
Контактная информация:

Сообщение Maelstrom » 10 июл 2007, 14:09

Качается какая-то лыжа в 155 байт...
Айв кнгенгах Йог-Сотот

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 35 гостей