![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ALexusB |
![]()
Сообщение
#1
|
Разработчик ВМЛ-КВЛ ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Admin Сообщений: 16,605 Регистрация: 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 Решение ??? Какие есть идеи? Понятно, что вариант наколбасить все ручками рабочий - редактор такой сделать не вопрос, он у мя уже почти готов. Но хочется, чтоб само делало, каждый раз разное |
![]() ![]() |
Destynar |
![]()
Сообщение
#2
|
homo cogitus ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: бета-тестер Сообщений: 478 Регистрация: 27-February 06 Из: Москва Пользователь №: 2,773 ![]() |
Ну например:
Есть клетка матрицы (100x100), с координатами х,у. Тогда: 1. х=0, у=0 2. х=х+а, где а - случайное число от 0 до 99 3. у=у+b, где b - случайное число от 0 до 99 Получаем случайную точку на матрице. Потом задаем этой точке глубину: g(глубина)=m (+/-) n, где m - средняя глубина на участке (допустим 3), а n - разброс глубин (пусть будет 2). Соответственно потом строим цикл, и повторяем его q раз (q - сложность рельефа дна) (пусть 4) Тогда у нас 4 точки с произвольными координатами на матрице, глубиной от 1 до 5. Далее. Записав координаты этих точек, получаем для каждой 8 точек, которые вокруг. И устанавливаем их глубину g (+/-) 1 (на повышение грунта или на понижение) т.е. это получается для всех точек "х (+/-) 1 or y (+/-) 1" Соответственно для следующего круга будет g (+/-) 2 "х (+/-) 2 or y (+/-) 2" И так до точки, у которой g!=0 (не равно). Тут надо подумать, правда, что делать когда разница на границе 2 и более, но это уже технический вопрос. Ну вот как-то так. |
![]() ![]() |
Текстовая версия | Сейчас: 10th September 2025 - 23:36 |