![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
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 Решение ??? Какие есть идеи? Понятно, что вариант наколбасить все ручками рабочий - редактор такой сделать не вопрос, он у мя уже почти готов. Но хочется, чтоб само делало, каждый раз разное |
![]() ![]() |
ALexusB |
![]()
Сообщение
#2
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,554 Регистрация: 2-November 04 Пользователь №: 3 ![]() |
Дело сдвинулось.
Метод с реперными точками и решеткой осознал, в ехеле ручками програн на нескольких сетках 7х7 и получил в итоге те же квадратики + неясность как роботом делать промежутки, что б не было 2-4 3-5 и 5-7 стыков. Как раз про принципу игры "сапер", как и говорилось Но пока это все делал вывел для себя замену реперам "пирамидками наоборот". Все просто - пирамидки нужны малеькие, разной высоты и не 1-2, а сотни. Тогда на выходе имеем мель произвольной формы, но вписанной в прямоугольник. Это пока не победил. Так же, что реперы, что пирамидки дают равномерное покрытие (1) - в игре вода такая смотрится хорошо, только по балансу лажа - потому продолжаю поиск метода, который сгенерит мель амебообразной формы и рандомный расход глубины от нее. |
Serginio |
![]()
Сообщение
#3
|
инопланетянец ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: форумчанин Сообщений: 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) программой рассматривалось, как плоскость координат. Если это возможно, то готов завтра к вечеру математически описАть алгоритм построения. |
![]() ![]() |
Текстовая версия | Сейчас: 30th April 2025 - 02:06 |