User Tag List

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя
Показано с 31 по 40 из 55

Тема: Генератор случайных полей Last Battle под эмулятор ПС

  1. #31

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение
    Подробности метода где почитать?
    Да я только что придумал этот метод, на коленке Подробности - у меня в голове. Спрашивай, что тебя интересует. То ли генерация матрицы MxN случайных чисел, то ли фильтрация (ФНЧ), то ли "отсечение уровня моря", то ли генерация берега.

  2. #31
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #32

    Регистрация
    19.11.2006
    Адрес
    г.Слоним Гродненской области
    Сообщений
    1,283
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    4
    Поблагодарили
    4 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от rnd.gen Посмотреть сообщение
    После введения числа от 1 до 6.
    что-то у меня под эмулятором не работает, ну в смысле не включается "открытый" режим, или я что-то не так понял. Поэкспериментирую - отпишусь.

    Добавлено через 25 минут
    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Да я только что придумал этот метод, на коленке Подробности - у меня в голове. Спрашивай, что тебя интересует. То ли генерация матрицы MxN случайных чисел, то ли фильтрация (ФНЧ), то ли "отсечение уровня моря", то ли генерация берега.
    Фильтрация ФНЧ!
    По поводу случайных чисел мое ламерское мнение думает что проблем не будет если использовать не деление, а умножение (возведение в степени, вычисление логорифма и т.д.), а если еще перемешивать эти результаты с задержками нажатия клавиш пользователем, то вообще все должно быть красиво. Когда мне нужны были случайные числа, я создавал массив на 256 байт, брал один регистр и постоянно инкриминировал его значение и опрашивал клавиатуру или мышь. Как только была нажата какая-нибудь клавиша инкремент прекращался и этот регистр сохранялся в массиве, брался следующий элемент массива и так далеее. Массив адресовывался регистровой парой HL и я просто делал INC L, что позволяло постоянно двигаться по кругу. Прерывания были запрещены. У меня была тогда самопальная утилита для рисования анимированных спрайтов 2 на 2 знакоместа и вот в эту утилиту я и вставил процедуру случайных чисел. Процесс рисования был длительный и неравномерный и числа получались действительно случайными.
    Но я так понимаю что для генерации ладшафта такой способ не годится. Если я понял верно, то в результате геренации должен получится как бы рельеф местности, который будет отсечен уровнем моря и разделен на сушу и воду, а для этого ландшафт должен быть достаточно плавным. Иначе может получиться (и чаще всего так и будет) друшлаг вместо материка. Так что это за волшебный метод ФНЧ?
    Последний раз редактировалось valeron; 16.09.2008 в 22:47. Причина: Добавлено сообщение

  4. #33

    Регистрация
    25.02.2008
    Адрес
    г. Мукачево
    Сообщений
    509
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение
    что-то у меня под эмулятором не работает, ну в смысле не включается "открытый" режим, или я что-то не так понял. Поэкспериментирую - отпишусь.

    Добавлено через 25 минут


    Фильтрация ФНЧ!
    По поводу случайных чисел мое ламерское мнение думает что проблем не будет если использовать не деление, а умножение (возведение в степени, вычисление логорифма и т.д.), а если еще перемешивать эти результаты с задержками нажатия клавиш пользователем, то вообще все должно быть красиво. Когда мне нужны были случайные числа, я создавал массив на 256 байт, брал один регистр и постоянно инкриминировал его значение и опрашивал клавиатуру или мышь. Как только была нажата какая-нибудь клавиша инкремент прекращался и этот регистр сохранялся в массиве, брался следующий элемент массива и так далеее. Массив адресовывался регистровой парой HL и я просто делал INC L, что позволяло постоянно двигаться по кругу. Прерывания были запрещены. У меня была тогда самопальная утилита для рисования анимированных спрайтов 2 на 2 знакоместа и вот в эту утилиту я и вставил процедуру случайных чисел. Процесс рисования был длительный и неравномерный и числа получались действительно случайными.
    Но я так понимаю что для генерации ладшафта такой способ не годится. Если я понял верно, то в результате геренации должен получится как бы рельеф местности, который будет отсечен уровнем моря и разделен на сушу и воду, а для этого ландшафт должен быть достаточно плавным. Иначе может получиться (и чаще всего так и будет) друшлаг вместо материка. Так что это за волшебный метод ФНЧ?
    Сначала выбирается номер карты, потом нужно нажать "а", потом любую другую клавишу и тогда должно нарисовать мини карту.

    По поводу отделения суши от моря. Что-то Вы все очень усложняете, отделение суши от моря, фнч. Голову можна сломать. Все намного проще. Сушу можна просто наростить (или море ) и при этом ничего не нужно будет отделять и озер будет не много. У меня они получаются только когда 2 острова перекроют один другого, тогда есть вероятнось озера. Иначе никакого озера не будет.
    В генерации карт суть проблемы не только в генерации случайных чисел, а и в том как правильно воспользоваться случайными числами чтобы вполне не случайно получились например острова .
    Последний раз редактировалось rnd.gen; 17.09.2008 в 09:23.

  5. #34

    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,089
    Спасибо Благодарностей отдано 
    281
    Спасибо Благодарностей получено 
    70
    Поблагодарили
    49 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от valeron Посмотреть сообщение

    Фильтрация ФНЧ!
    По поводу случайных чисел мое ламерское мнение думает что проблем не будет если использовать не деление, а умножение (возведение в степени, вычисление логорифма и т.д.),
    Насчет случайных чисел повторюсь: зачем изобретать велосипед? Зачем попадать в ловушки, в которые ранее попадали другие? Вспомни закон Мерфи: "Сложные проблемы всегда имеют простые, легкие для понимания, неправильные решения".

    Вот рекомендую почитать про генерацию псевдослучайных чисел вообще:

    http://ru.wikipedia.org/wiki/%D0%93%...81%D0%B5%D0%BB

    И конкретно про один простой в реализации метод, который обеспечивает генерацию приемлемых для данной задачи случайных чисел:

    http://ru.wikipedia.org/wiki/%D0%9B%...82%D0%BE%D0%B4

    ---------

    Теперь о фильтрации.

    Простейший случай двумерного фильтра низких частот представляет собой обычное усреднение элемента матрицы с его соседями.

    То есть если у нас имеется исходный двумерный массив A, и нужно построить отфильтрованный массив B, то каждый элемент B(i,j) будет равен среднему арифметическому соответствующего элемента A(i,j) и 8 его ближайших соседей.

    Еще большей степени сглаживания можно добиться, если усреднять не 3х3 ближайших соседей, а 5х5 (по два элемента в каждую сторону) и более. При этом совсем не обязательно чтобы "маска усреднения" была симметричной. Можно брать одного соседа влево и двоих вправо, например. Это повлияет на фазовую характеристику фильтра и т.д., но у нас ведь исходные данные и результат являются случайным шумом, и мало ли, что там оно чуть-чуть по фазе будет сдвинуто - сущность результата от этого не поменяется.

    Дальнейшее развитие идеи - это усреднение элемента с соседями не в равных пропорциях, а с разными весовыми коэффициентами. Например, брать 0.5 от самого элемента и по 0.0625 от каждого из соседей, и складывать вместе.

    Тут уже идет речь о (малых размеров) матрице с коэффициентами фильтра. Для изотропного фильтра, действие которого одинаково во всех направлениях, эта матрица обладает центральной симметрией. Если она не обладает центральной симметрией, то действие фильтра может быть различным в разных направлениях. Например, более плавные изменения по горизонтали и более резкие - по вертикали.

    Фильтры низких частот получаются обычно с коэффициентами, которые образуют как бы колокол. То есть с максимумом в центре и монотонным убыванием при движении к краям. Можно взять любую функцию с подобными свойствами - например, косинус, или параболу, или функцию Гаусса... Все они обеспечивают пропускание низких частот и подавление высоких, хотя и в разной степени, с разной эффективностью.

    Фильтр высоких частот можно получить из фильтра низких частот, взяв все его коэффициенты с обратным знаком и прибавив после этого к центральному элементу матрицы фильтра единицу.

    Обычно также следует стремиться к тому, чтобы сумма всех элементов матрицы ФНЧ была равна 1. Это несложно обеспечить, взяв произвольный набор коэффициентов, вычислив их сумму и разделив коэффициенты на полученное число. В противном случае происходит не только фильтрация, но и усиление/ослабление сигнала.

    Для конкретной задачи генерации карт я рекомендую начать с простого усреднения соседних элементов, подобрав подходящее их количество. Более сложные фильтры вряд ли придется придумывать.

    И вот еще что. По своим краям отфильтрованный массив-карта будет иметь значение, ведущее себя иначе, чем в центре. Это потому, что фильтр имеет "краевой эффект", протяженность которого равна половине длины матрицы фильтра. Чтобы побороть краевой эффект, достаточно взять размеры исходного массива с случайными числами немного больше, чем нужно, а после фильтрации края просто выбросить.

  6. #35

    Регистрация
    25.02.2008
    Адрес
    г. Мукачево
    Сообщений
    509
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Судя по посещаемости никого не интересует генератор полей к Last Battle. Уже наверное никто даже под эмулятором не играет.

  7. #36

    Регистрация
    20.11.2008
    Адрес
    Санкт-Петербург
    Сообщений
    34
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от rnd.gen Посмотреть сообщение
    Судя по посещаемости никого не интересует генератор полей к Last Battle. Уже наверное никто даже под эмулятором не играет.
    Играем. Полтора часа искал, наконец тут нашел редактор карт. Только проблема - карты в основном корявые получаются, три маленьких острова и огромное море, например.

    А я хотел бы вслепую поиграть на картах подобных тем, что в игре.

    Есть эмулятор получше у кого-нибудь?

  8. #37

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Процедурные текстуры типа "плазма" в демах так и делаются. Причём даже можно не 3x3 соседа, а только соседа слева и соседа сверху. Естественно, прогонять всю карту несколько раз. Можно вообще фильтровать по очереди горизонтально и вертикально, 2x1.

  9. #38

    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,866
    Спасибо Благодарностей отдано 
    328
    Спасибо Благодарностей получено 
    310
    Поблагодарили
    234 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    некроманты
    С уважением,
    Jerri / Red Triangle.

  10. #39

    Регистрация
    20.11.2008
    Адрес
    Санкт-Петербург
    Сообщений
    34
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от alone Посмотреть сообщение
    Естественно, прогонять всю карту несколько раз. Можно вообще фильтровать по очереди горизонтально и вертикально, 2x1.
    Спасибо, несколько прогонов помогло, острова больше стали и расплылись.

    А как делать горизонтально и вертикально? Я просто выбирал номер карты и enter.

  11. #40

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    По горизонтали:
    ld a,(hl)
    add a,c
    rra
    ld c,(hl)
    ld (hl),a
    inc l

    По вертикали то же самое, но inc h.

    Можно и быстрее.

Страница 4 из 6 ПерваяПервая 123456 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Last Battle (.tap .z80)
    от OZR в разделе Игры
    Ответов: 13
    Последнее: 16.10.2019, 18:11
  2. Генератор прямоугольных импульсов
    от Jukov в разделе Несортированное железо
    Ответов: 3
    Последнее: 04.02.2008, 19:06
  3. Ответов: 0
    Последнее: 24.03.2006, 18:14
  4. BATTLE CITY
    от klim в разделе Игры
    Ответов: 0
    Последнее: 30.01.2006, 16:05
  5. генератор тора
    от voodoogod в разделе Программирование
    Ответов: 1
    Последнее: 10.03.2005, 20:19

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •