[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Генерация Ландшафта
ymniktm
Не могу придумать как сделать генерацию случайного ландшафта для игры.
Вот что я сотворил.
 <?
$X=100;//размер карты
$Y=100;

//озера
while(rand(1,2)==1){
$x=rand(50,$X);
$y=rand(50,$Y);
$dx=rand(3,50);//ширина
$dy=rand(3,50);//длина
$s=3;
$f=($dx-3)/($dy/2);
$y1=$y-round($dy/2);
while($y1<=$y+round($dy/2)){
$x1=$x-round($s/2);
while($x1<=$x+$s-round($s/2)-1){
$map[$x1][$y1]=3;
$x1++;
}
$y1++;
$s=$y1<=$y?($s+$f):($s-$f);
}
}

$x=1;
$y=1;

//земля
while(rand(1,10)>=4){
$x=rand(50,$X);
$y=rand(50,$Y);
$dx=rand(3,50);
$dy=rand(3,50);
$s=3;
$f=($dx-3)/($dy/2);
$y1=$y-round($dy/2);
while($y1<=$y+round($dy/2)){
$x1=$x-round($s/2);
while($x1<=$x+$s-round($s/2)-1){
if(!isset($map[$x1][$y1])){
$map[$x1][$y1]=4;
}
$x1++;
}
$y1++;
$s=$y1<=$y?($s+$f):($s-$f);
}
}

echo '<hr><div style="width: 2000px">';
$x=1;
$y=1;
while($y<=100){
$x=1;
while($x<=100){
$m=isset($map[$x][$y])?$map[$x][$y]:1;
echo '<img src="/img/map/'.$m.'.png">';//3.png - изображение воды,4.png - изображение земли,1.png-песок
$x++;
}
echo '<br>';
$y++;
}echo '</div>';

Но в этом скрипте озера и пятна земли генерируются ромбовидной формы. Я в принципе к этому и стремился, но нельзя ли селать более случайную форму? Поклонник minecraft :)



Спустя 6 дней, 4 часа, 13 минут, 35 секунд (15.05.2012 - 16:15) ymniktm написал(а):
Никаких предложений не будет? Может я некорректно вопрос задал? Так спросите. Я поясню.

Спустя 6 минут, 18 секунд (15.05.2012 - 16:22) inpost написал(а):
я просто ничего не понял, увы.

Спустя 1 минута, 20 секунд (15.05.2012 - 16:23) Игорь_Vasinsky написал(а):
я не поклонник квадратной графики
у тя же получался ландшафт.

Спустя 52 минуты, 45 секунд (15.05.2012 - 17:16) sergeiss написал(а):
Если я правильно понял вопрос... В любом случае в код не вникал.
Если же говорить про алгоритм, то можно сделать так. Ты определяешь для начала, какой формы у тебя могут быть объекты (например, квадрат, круг, овал, ромб, "клякса №1", "клякса №2"). Каждой форме задаешь индекс.
Затем задаёшь (всё случайным образом) для каждого объекта: координаты, размеры, индекс формы. Количество объектов тоже можно задать случайным, например, в некотором диапазоне. А потом просто "тупо" рисуешь эти объекты.

Спустя 3 часа, 38 минут, 43 секунды (15.05.2012 - 20:54) ymniktm написал(а):
sergeiss да я думал так сделать но ландшафт будет создаваться для каждего пользователя. Так что хотелось бы сделать его более индивидуальным. Ну нужен алгоритм что бы формы генерировались на ходу а не чтоб я создовал милион "клякс".

Спустя 8 минут, 57 секунд (15.05.2012 - 21:03) sergeiss написал(а):
Цитата (ymniktm @ 15.05.2012 - 20:54)
нужен алгоритм что бы формы генерировались на ходу а не чтоб я создовал милион "клякс"

Почему обязательно "миллион"? Ограничь их количество smile.gif Опять же, можно ограничить количество одних типов (например, воду), за счет того, что будет больше "равнин" или "гор". Можно наложить условие, допустим, чтобы между центрами форм было не больше определенного расстояния. Короче говоря, если подумать, то можно придумать ряд условий, которые позволят получить хороший результат. Ты думай сам smile.gif

А что касается индивидуальности для каждого пользователя... Будет индивидуальность, куда ж она денется? Генератор случайных чисел поможет этому.

Спустя 19 минут, 36 секунд (15.05.2012 - 21:23) ymniktm написал(а):
Ну рендомить можно только размер клякс. Но ладн спасибо ты мне подал другую идею:)

Спустя 2 минуты, 25 секунд (15.05.2012 - 21:25) ymniktm написал(а):
Оу у меня нет 10 постов что б поставить тебе +. Наберу не забуду поставить:)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.