![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ALexusB |
![]()
Сообщение
#1
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Народ, нужна помощь в одной интересной задаче для нужд игры про "кораблики" не на стром-2.х
Уперся в генерацию (роботом) дна (мелей) Дано: Есть матрица, например, 64х64 или 100х100, не важно, хоть 100х60 клеток. Значение клеток - это глубина в метрах. Для простоты считаем до 7 метров, далее для корабля не важно - "нет дна". То есть 1 2 3 4 5 6 7 видов значений. переходы глубин плавные, то есть 1-2 2-3 и тп, 1-7 или 1-3 быть не может. Рандомно задаются: - место мели в матрице - размер и форма мели - ширина полоски перехода на каждую глубину (то есть ширина 1-2, 2-3... можно одну на всех - это частный случай) - число мелей (они могут быть в нескольких местах или накладываться, тогда переходы будут 1-2-3-4-3-2-1 или 1-2-1, зависимо от расстояния) Требуется Алгоритм генерации мелей амебообразной формы (из значений 1) с плавным переходом в 7 Решение ??? Какие есть идеи? Понятно, что вариант наколбасить все ручками рабочий - редактор такой сделать не вопрос, он у мя уже почти готов. Но хочется, чтоб само делало, каждый раз разное |
![]() ![]() |
Belphegor |
![]()
Сообщение
#21
|
ou Le Fantome du Louvre ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 1,232 Регистрация: 4-September 07 Пользователь №: 11,932 ![]() |
Сделал копию своей модели в Фотошопе.
Все еще квадратнее, чем я думал, зато более наглядно. Зацените. ![]() нужно увеличить число двоек и единиц. Скругляйте теперь. ![]() Хотя квадрат - самая плохая форма для больших высот. Там лучше прямоугольники (если эллипс никак). Они, перекрываясь, создают более сложные формы, которые бывают скруглены. Цитата безусловно можно, но следуя какому алгоритму? Т.е. откуда там взялась 4? Я и пытаюсь понять, по какому алгоритму заполнять круги. То ли радиально по лучам от центра. Но с увеличением номера круга увеличивается кол-во нужных лучей, там не соориентируешься. То ли по часовой стрелке кругами. Тогда круги между собой не связаны. То ли по строкам. Тогда нужно каждый раз проверять соответствие столбцов и! диагоналей. Как? |
ALexusB |
![]()
Сообщение
#22
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Сделал квадратами от 7 к 1
Получились теже пирамиды, но уже с правильными переходами при наложении. До того у мя было наоборот от 1 к 7 Но как мы видим, ранд - фигня ![]() Пирамиды и есть |
Tymofei |
![]()
Сообщение
#23
|
Приватир ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 3,759 Регистрация: 20-November 07 Из: Москва Пользователь №: 12,641 ![]() |
Пирамиды получаются, потому что весь расчет работает "от вершин и далее".
ИМХО: 1) нужно сгенерить в массиве произвольное число в известном интервале: -группа I - мели (1); -группа II - глубины (7). 2) как верно отметил уважаемый Serginio, между пиковыми значениями должны быть промежуточные, следовательно, нужно произвести проверку, чтобы расстояние между координатами ближайших точек в полученных группах превышало 6 единиц (1-2-3-4-5-6-7-6-5-4-3-2-1). Неудовлетворяющие условию значения исключить, группы объединить в один массив. 3) начиная движение от начала координат, определить значения для ячеек массива с координатой (а1+а2)/2 как среднее арифметическое между наличными значениями, с округлением в сторону ближайшего целого, для каждой оси (где а - имя соответствующей оси координат). Действие повторить необходимое число раз для расчета всех значений ячеек массива. Недостатки метода: а) на поле всегда будут мели и глубины; б) визуальное отображение глубин на линии между соседними пиковыми значениями всегда будет равномерным; в) для расчета глубин вдоль границ активного "поля" потребуются неотображаемые мели и глубины. Как вариант, можно повторять уже известные значения (мели - желтые точки, "нет дна" - синие): ![]() |
ALexusB |
![]()
Сообщение
#24
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Цитата Недостатки метода:а) на поле всегда будут мели и глубины; Не годится ![]() нужны фарватеры - это же все для корабликов делается, а не ради самих мелей. Нужна чистая вода обязательно. Потому и мели с понижением дна. |
ALexusB |
![]()
Сообщение
#25
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Начал понимать подход с реперными точками - да, может получиться.
всего высот 8, от 0 до 7 0 - это торчащие камни в цвете воды как у 1, потому я и ставил тз из 1-7, тк 0 накидать по 1 не вопрос. Вобще, подумав (про баланс). Понимаю, что плясать только от (1) не верно в корне Должны быть "мели" и 7-6-7 и 7-6-5-6-7 без захода в 1 вообще Это просто и красиво и функуонально для шхуна vs линкор То есть 1 и 0 - это скорее редкость. 1 будет переходом от суши (это вообще -1 ![]() |
ALexusB |
![]()
Сообщение
#26
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Дело сдвинулось.
Метод с реперными точками и решеткой осознал, в ехеле ручками програн на нескольких сетках 7х7 и получил в итоге те же квадратики + неясность как роботом делать промежутки, что б не было 2-4 3-5 и 5-7 стыков. Как раз про принципу игры "сапер", как и говорилось Но пока это все делал вывел для себя замену реперам "пирамидками наоборот". Все просто - пирамидки нужны малеькие, разной высоты и не 1-2, а сотни. Тогда на выходе имеем мель произвольной формы, но вписанной в прямоугольник. Это пока не победил. Так же, что реперы, что пирамидки дают равномерное покрытие (1) - в игре вода такая смотрится хорошо, только по балансу лажа - потому продолжаю поиск метода, который сгенерит мель амебообразной формы и рандомный расход глубины от нее. |
Serginio |
![]()
Сообщение
#27
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
Дело сдвинулось. Метод с реперными точками и решеткой осознал, в ехеле ручками програн на нескольких сетках 7х7 и получил в итоге те же квадратики + неясность как роботом делать промежутки, что б не было 2-4 3-5 и 5-7 стыков. Как раз про принципу игры "сапер", как и говорилось Чтоб не было таких стыков, генерирование цифр должно происходить линейно (например от определённой оси влево и вправо, одновременно для всех рядов поля). От другой оси генерирование идёт навстречу. Принцип один - одинаковых цифр в ряду должно быть не меньше 2 и не более 10 (чтоб склоны не были очень крутыми или очень пологими). При стыковке полей (когда заполнены уже все ячейки) идёт корректировка (проверка) в обратном направлении и изменение цифр только в сторону понижения их значения (уже без ограничени количества одинаковых цифр в ряду). Пример: 33445!55444 22334!66555 33445!66655 44566!76655 В данном примере 2 ошибки, корректировка простая: ВУо второй строке при проверке от оси ! вправо, на значение 6 будет влиять значение 4, которая слева от оси. 6 под этим влиянием изменится на 5. Следующая 6, такдже на 5. В четвёртой строке 6 изменится на 5 под влиянием верхней четвёрки... Бред, конечно... Но для модели, которая будет состоять из одной кривой плоскости (как простынь, разостланная на траве), больше ничего в голову не лезет. Цитата Но пока это все делал вывел для себя замену реперам "пирамидками наоборот". Все просто - пирамидки нужны малеькие, разной высоты и не 1-2, а сотни. Тогда на выходе имеем мель произвольной формы, но вписанной в прямоугольник. Это пока не победил. Так же, что реперы, что пирамидки дают равномерное покрытие (1) - в игре вода такая смотрится хорошо, только по балансу лажа - потому продолжаю поиск метода, который сгенерит мель амебообразной формы и рандомный расход глубины от нее. Хотел спросить. А как программа рассматривает, собственно "мель"? Как единую плоскость с координатами точек по трём осям? Или как набор плоскостей, каждая из которых имеет свой уровень (глубину)? Или там математикой (тригонометрией) и не пахнет, - а просто генерация объёмных объектов (пирамидок к примеру) в определённой последовательности (или по определённым принципам)? Дело в том, что на Ваших примерах прямоугольных мелей явно просматривается "слоистая" их структура. Я подумал, и пока не вижу особых препятствий для того, чтоб генерировать овальные (пока в форме правильных эллипсов) слои с чётким алгоритмом. Т.е. мель будет выглядеть точно, как у Вас, только не из прямоугольников, а из эллипсов. Стыковку их можно придумать (при соблюдении некоторого условия, вообще проблем нет). Только для этого нужно, чтоб дно (плоскость со значением 7) программой рассматривалось, как плоскость координат. Если это возможно, то готов завтра к вечеру математически описАть алгоритм построения. |
ALexusB |
![]()
Сообщение
#28
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Все верно- плоскость и есть. матрица двумерная. Значение и есть глубина.
Так что идея с эллипсами годится - мне нужен понятный алгоритм рисования эллипса по клеткам. Ну и соотв другие идеи. В игре проверяется реальная координата корабля (его части, тк он больше клетки матрицы) на пересечение с матрицей мели. Вот и все. Если отойти от матрицы и рисовать фигуры в реальный координатах, я потом не пойму, где мель. Если только по пикселям не считывать цвет. Но в визуальном плане дно сильно заблёрено и накрыто анимацией волн, так что лучше матрицу. Но рассмотреть можно и реальные коорд, если это действительно проще. А потом их как-то в матрицу перевести. Типа как переводят фотографии в полотно для вышивания крестиком (то есть матрицу) на минимапе у меня 1х1 пиксель = клетки матрицы. Так что если рисовать на минимапе, а потом его по пикселям перевести в матрицу - то и будет результат! Вощем, канает подход - слушаю! |
Serginio |
![]()
Сообщение
#29
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
... Значение и есть глубина. ...Если отойти от матрицы и рисовать фигуры в реальный координатах, я потом не пойму, где мель. Если только по пикселям не считывать цвет. Для каждого значения (глубины) будет своя плоскость (вернее её часть в виде эллипса). Соответственно объекты лежащие в разных плоскостях имеют разный цвет (как у Вас на минимапе). Это не есть проблема. Короче, занимаюсь... |
os_ |
![]()
Сообщение
#30
|
юнга ![]() ![]() Группа: форумчанин Сообщений: 32 Регистрация: 2-November 07 Из: г.Пушкино МО Пользователь №: 12,434 ![]() |
2 варианта генерации поверхности дна.
Прикрепленные файлы ![]() |
ALexusB |
![]()
Сообщение
#31
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Наглядно, спасибо.
А если от середины плясать а не от угла по диагонали? Как быть - перевернуть алгоритм в др сторону? И как задать рандомную площадку кляксевидной формы, от которой плясать? |
Serginio |
![]()
Сообщение
#32
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
|
os_ |
![]()
Сообщение
#33
|
юнга ![]() ![]() Группа: форумчанин Сообщений: 32 Регистрация: 2-November 07 Из: г.Пушкино МО Пользователь №: 12,434 ![]() |
Можно и от середины плясать. Но для меня не совсем ясна задача, точнее её конечные визуальные условия. И просветите, что такое PHP?
|
ALexusB |
![]()
Сообщение
#34
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
PHP - это
Например, скрипты этого форума - РНР и есть (см в строку адреса, на разрешение в конце) Мель должна генерится в РНР, а отрисовываться во флаш. Отрисовку по матрице уже сделал, с ней проблем нет вообще. Нужно матрицк нагенерить - пример где-то выше показывал. |
os_ |
![]()
Сообщение
#35
|
юнга ![]() ![]() Группа: форумчанин Сообщений: 32 Регистрация: 2-November 07 Из: г.Пушкино МО Пользователь №: 12,434 ![]() |
ИМХО оптимальный вариант:
Создать несколько базовых форм различной конфигурации «амеб», «ромашек». Каждую из фигур выводить на экран, по принципу "детской пирамидки", разным цветом и разным размером (масштабировать), в зависимости от глубины – чем глубже, тем крупнее и темнее. Тогда отпадает необходимость сложного механизма генерации самой формы. Остается случайным образом определить координаты каждой формы и построить на этом месте "пирамидку". Прикрепленные изображения ![]() |
m-traxx |
![]()
Сообщение
#36
|
Бермудский Бомбардир ![]() ![]() ![]() ![]() ![]() ![]() Группа: финалист турнира КВЛ 1.2.3 НЕ Сообщений: 4,036 Регистрация: 24-January 08 Из: Бермуды Пользователь №: 14,825 ![]() |
ИМХО оптимальный вариант: Надо ещё учесть, что основное количество мелей, это не холмики и рифы. Чаще всего это песчаные мели, косы. Они очень узкие и длинные. Морская прибрежная зона не бывает усеяна "холмиками". Не без этого конечно... но преобладать они не должны. Приливы-отливы создают длинные песчаные образования. |
Scatimon |
![]()
Сообщение
#37
|
...Welcome To Scatlend... ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 707 Регистрация: 14-April 05 Из: Москва Пользователь №: 662 ![]() |
|
os_ |
![]()
Сообщение
#38
|
юнга ![]() ![]() Группа: форумчанин Сообщений: 32 Регистрация: 2-November 07 Из: г.Пушкино МО Пользователь №: 12,434 ![]() |
Спрайты могут применяться для оптимизации графического ядра, когда отрисовка трёхмерной детализованной модели слишком накладна и может привести к сильному падению скорости рендеринга.
На 3D-акселераторах применяется такая техника: объект рисуется в виде плоскости с наложенной на неё текстурой с прозрачными областями... Если сделать набор разнообразных «профилей», да ещё с прозрачными областями, тогда и картинка будет реально смотреться. Примерно так будет выглядеть через слой воды: Прикрепленные изображения ![]() |
Serginio |
![]()
Сообщение
#39
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 2,018 Регистрация: 7-August 07 Из: Днепропетровск Пользователь №: 11,632 ![]() |
Спрайты могут применяться для оптимизации графического ядра, когда отрисовка трёхмерной детализованной модели слишком накладна и может привести к сильному падению скорости рендеринга. На 3D-акселераторах применяется такая техника: объект рисуется в виде плоскости с наложенной на неё текстурой с прозрачными областями... Нужен не рисунок, а объект имеющий высоту, на которую бы реагировали модельки шипов. |
ALexusB |
![]()
Сообщение
#40
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Оно (дно) и сейчас в моей двиге не плохо смотрится (там же еще слой волн). Другое дело -нужна матрица самих высот. Что б понимать стукается корабль или нет. А отрисовка этой матрицы - уже сделано.
Похоже на приведенный выше рисунок, кстати ![]() |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 02:23 |