У меня тоже, да и по другим файлам на форуме лежащим тоже так...Maelstrom писал(а):Качается какая-то лыжа в 155 байт...
Генерация мира
Модераторы: Sanja, Максим Кич
- Sanja
- Администратор
- Сообщения: 791
- Зарегистрирован: 24 ноя 2006, 12:25
- Откуда: Новосибирск
- Контактная информация:
Блин, похоже у хостера включён safe mode. Посмотрю что можно сделать.
edit: Ага, значит так, хостер запретил функции чтения файлов, использующиеся в этом моде. Ну и фиг с ним. Пока что ссылки будут во вложениях прямые, можно качать. Дальше посмотрим.
edit2: Тэксь, теперь можно и без прямых ссылок. Ну всё, вроде настроил.
edit: Ага, значит так, хостер запретил функции чтения файлов, использующиеся в этом моде. Ну и фиг с ним. Пока что ссылки будут во вложениях прямые, можно качать. Дальше посмотрим.
edit2: Тэксь, теперь можно и без прямых ссылок. Ну всё, вроде настроил.
Переписал творение Troll'а на си, получилось нечто вроде
У меня цикл while kol<>x*y do входит в бесконечное исполнение.
Заместил в своем генераторе, представленном на сайте в разделе для разработчиков, фрактальный алгоритм - данным...
Вот какую ерунду он рисует
http://www.templer.rlgclub.ru/gallery/lgen/lgen_01.gif
http://www.templer.rlgclub.ru/gallery/lgen/lgen_02.gif
http://www.templer.rlgclub.ru/gallery/lgen/lgen_03.gif
Код: Выделить всё
// Константы
main()
{
char l;
unsigned char k,i,j,ni,nj,col;
bool bb;
int kol;
unsigned char pole[x][y];
randomize();
ClearScreen();
for(i=0; i<x; i++)
for(j=0; j<y; j++)
pole[i][j] = 0;
for(kol=0; kol<baza; kol++)
{
bb = false;
while(bb==false)
{
i = rand()%x;
j = rand()%y;
col = rand()%tip + 1;
if(pole[i][j]==0)
{
pole[i][j] = col;
Draw(i,j, col);
bb = true;
}
}
}
while(kol!=x*y)
{
bb = false;
while(bb==false)
{
i = rand()%x+1;
j = rand()%y+1;
if(pole[i][j]!=0) bb = true;
}
k = rand()%(d*4)+1;
if(k>2*d) ni = i;
else if(k>d) ni = i + k - d;
else ni = i + k - d - 1;
if(k<=2*d) nj = j;
else if(k>3*d) nj = j + k -d*3;
else nj = j + k - d*3 - 1;
if(ni<0) ni = 0;
if(ni==x) ni = x-1;
if(nj<0) nj = 0;
if(nj==x) nj = y-1;
if(pole[ni][nj]==0)
{
pole[ni][nj] = pole [i][j];
Draw(ni,nj, col);
kol++;
}
}
}
Заместил в своем генераторе, представленном на сайте в разделе для разработчиков, фрактальный алгоритм - данным...
Вот какую ерунду он рисует
http://www.templer.rlgclub.ru/gallery/lgen/lgen_01.gif
http://www.templer.rlgclub.ru/gallery/lgen/lgen_02.gif
http://www.templer.rlgclub.ru/gallery/lgen/lgen_03.gif
А у меня нет почему то. Вот странно...ADB писал(а): У меня цикл while kol<>x*y do входит в бесконечное исполнение.
Но как-то исправил наверно, раз пишешь
Я конечно не знаю что тот рисовал, но то что нарисовано на этих картинках этот рисовать никак не может. Если конечно как-то жёстко не поизменять какие-то параметры, но вообще-то и это невозможно. По крайней мере мне не приходит в голову. Судя по всему что-то добавлено - какие-то ограничения на некоторые типы рельефа или неравноценные вероятности для них. Либо остались те, что были под фрактальный и на него настроены.Заместил в своем генераторе, представленном на сайте в разделе для разработчиков, фрактальный алгоритм - данным...
Вот какую ерунду он рисует
http://www.templer.rlgclub.ru/gallery/lgen/lgen_01.gif
http://www.templer.rlgclub.ru/gallery/lgen/lgen_02.gif
http://www.templer.rlgclub.ru/gallery/lgen/lgen_03.gif
Лучше выложи тот кусок, который это рисует. И какие там константы установленны?
Или переделанный тобой код под Си, который я могу тут наблюдать, отдельно от остального всего запусти (а ещё лучше в Паскале набери). Будет ессно не очень хорошо (я писал, что нужно настраивать) но уж никак не то что на картинках...
ADB
Кажется, догадался в чём дело...
Размер карты большой по сравнению с 78x23, а количество начальных точек то же? Если в этом - то поставь baza где-то 100 или даже больше.
Ещё раз повторю - НУЖНО НАСТРАИВАТЬ (изменять параметры, добавлять условия итд), это не готовая программа, а так намётка за полчаса.
К слову, параметр d стоит 3 или 2 задавать.
Кажется, догадался в чём дело...
Размер карты большой по сравнению с 78x23, а количество начальных точек то же? Если в этом - то поставь baza где-то 100 или даже больше.
Ещё раз повторю - НУЖНО НАСТРАИВАТЬ (изменять параметры, добавлять условия итд), это не готовая программа, а так намётка за полчаса.
К слову, параметр d стоит 3 или 2 задавать.
Если честно, я не умею.а ещё лучше в Паскале набери
Кстати, различие массивов в паскале и си в том, что в первом случае они начинаются с 1-цы, а во втором - с нуля. Посмотри, пожалуйста, мой код, возможно я не правильно переработал какие-то формулы или условия, учитывая это.И какие там константы установленны?
А мне на СИ тяжеленько писать. У меня он и не установлен даже...ADB писал(а):Если честно, я не умею.а ещё лучше в Паскале набери
Поэтому распишу человеческим. Долго получится (расписываю очень подробно)...
X,Y - размер карты. BAZA - количество начальных очагов. TIP - количество разных рельефов. D - удалённость.
1. Задаем массив X на Y значением элементов которого является тип рельефа. Вначале заполнен несуществующим типом местности (неопределён).
2. Начальные очаги.
Накидываем некоторый набор случайных точек количеством BAZA с каким-то типом рельефа, который для каждой точки рэндомом выбран из количества TIP.
Например, BAZA=20 TIP=5, следовательно после проделанной операции 2 в массиве будут определёнными 20 точек, то есть для каждой из них будет выбран определённый тип из 5-ти возможных рельефов.
Следует учитывать, что если в процессе накидывания при случайном выборе очередной точки выясняется, что эта точка уже задана (для неё уже определён тип местности, то есть она уже выпадала раньше), то следует перебросить, чтобы после операции 2 было выбрано ровно BAZA точек. (Думаю, это и без объяснения понятно, но подробно описываю)
3. Расширение очагов.
***Выбираем одну из уже опредёлённых точек (i,j). Определяем направление. Случайно выбираем число K из диапазона от 1 до D. Если точка, находящаяся от точки (i,j) в выбранном направлении на расстоянии K находится в пределах карты и для неё не определён пока тип рельефа, то определяем рельеф этой точки таким же, как рельеф точки (i,j). Если нет то перекидываем, начиная с ***. (Уточню, что в программе на паскале K сразу определяет и направление и расстояние).
4. Повторяем операцию 3 до тех пор, пока не заполнится вся карта.
Чем больше D - тем более смешанной получится карта, при D=1 типы местности вообще не будут залазить один на другой.
Да, работая таким образом программа дочерта холостых действий произвёдёт... Ну, уж как есть
Примечания.
1. Параметр BAZA кажется удобным ~1-2% от общего числа точек (то есть от произведения X на Y). Это для 4-5 типов рельефа, если типов больше то и BAZA стоить чуть увеличить. Ну и, повторю, что D стоит выбирать 2 или 3. Но это смотреть надо в зависимости от того, что хочется получить.
2. Ну и общие настойки, например, лес в 3 раза чаще болот, и в 2 чаще равнины или как там надо. Ну и другие всякие, типа, что в каком месте карты можно
Очень на то похоже. Измени строку "while(kol!=x*y)" на "while(kol!=x*y-1)", а то и на "while(kol!=(x-1)*(y-1))". Если в паскале при BAZA=20 kol после первой операции равно 20, а после заполнения поля произведению X на Y, то в СИ насколько я понимаю после первой операции kol=19, а после заполнения должно быть равным произведению X на Y минус 1. Хотя может и что-то ещё...ADB писал(а):У меня цикл while kol<>x*y do входит в бесконечное исполнениеКстати, различие массивов в паскале и си в том, что в первом случае они начинаются с 1-цы, а во втором - с нуля. Посмотри, пожалуйста, мой код, возможно я не правильно переработал какие-то формулы или условия, учитывая это
P.S. Чтоб меня ещё раз чёрт дёрнул что-то объяснять... Запарился, блин.
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
В Паскале массивы начинаются с чего угодно. Там описываются индексы начального и конечного элементов. Исключение составляют динамические массивы, индексы в которых идут с нуля.ADB писал(а): Кстати, различие массивов в паскале и си в том, что в первом случае они начинаются с 1-цы, а во втором - с нуля. Посмотри, пожалуйста, мой код, возможно я не правильно переработал какие-то формулы или условия, учитывая это.
Dump the screen? [y/n]
- Максим Кич
- Администратор
- Сообщения: 1642
- Зарегистрирован: 03 дек 2006, 20:17
- Откуда: Витебск, Беларусь
- Контактная информация:
Закончился конкурс картогенераторов. С результатами можно ознакомиться по ссылке:
http://www.dev-spot.com/forums/index.php?topic=4.15
http://www.dev-spot.com/forums/index.php?topic=4.15
Dump the screen? [y/n]
Спасибо за ссылку, сам бы никогда не стал бы искатьМаксим Кич писал(а):Закончился конкурс картогенераторов. С результатами можно ознакомиться по ссылке:
http://www.dev-spot.com/forums/index.php?topic=4.15
По самому конкурсу. Неплохое состязание. Если б я ещё знал английский настолько, чтобы толково оценить правила...
Если предположить, что я смог верно смог перевести все ограничения в правилах, и учитывая месяц на создание; то я вынужден сделать вывод что ихние генераторы, нельзя сказать что хреновые, но как минимум - невыдающиеся.
По очереди если
1. (konijn) Вообще чёрти-что. Это ж додуматся надо генерить кактусы в пустыне.... Сам генератор простейший, судя по свему.
2. (Icey) Город. Толково, но недоработано. Много оформительных эффектов, а мало нужных. Дома повёрнуты чёрти куда и дорог нет к ним.
3. (sinoth) Остров. Всё бы хорошо, песок и речки вообще супер, но эти луга посреди гор... Недоработано.
4. (gerryq) В целом, хорошо. Даже отлично я бы сказал. (Как-то странно двухклеточные коридоры смотрятся...)
5. (microwerx) Такое пишется за минимальное время. Наверно начинающий программер писал.
6. (Seventh Holy Scripture - winner). Совершенно не могу оценить реальность нарисованного, поскольку не понимаю, какой символ чего обозначает. По программе - действительно лучшая. Хотя может лес и не так растёт.
И это нужно учитывать, что показаны лучшие варианты. Сурс-коды не юзал и даже не читал, мне пока незачем.
You see the Troll. He wield giant club in right hand and huge rock in left hand. Troll looks satiaited and not agressive, he look at you with interest. It seems that Troll asks you: "What you do in trollish land?"
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 46 гостей