singlepost

Зерно рандома. Веселье, печеньки и хранение больших штук. << На главную или назад  

Сабж:
к примеру, нам надо организовать почти рандомную генерацию двумерного массива структуры, весящей несколько интов, размером, скажем 100к*100к.
почти рандомную – значит, есть некие критерии, согласно которым распределяются значения.
а теперь представим, что надо передать карту через интернет. или, проще, сохранить ее(да в той же куче). сохранять 1 000 000 000 000*16 > 1TB явно некошерно(если мне не изменяет моя математика)).
вероятно, можно задать некую псевдо-рандомную функцию от аргумента. вспомнив урок труда, я посчитал, что для, скажем, для ключа int случаев будет 2^(2^16), что неплохо.
можно? использовав зерно рандома, генерировать(получать от функции) ту часть, которую нам нужно?

извиняюсь за тупость).
и да, тема – геймдев, хочу сделать боооольшой мир.

64 ответов в теме “Зерно рандома. Веселье, печеньки и хранение больших штук.”

  1. 64
    Александр Лищенер ответил:

    ну я пока маленький глупый мальчик. начнем с небольшого, правильно?

  2. 63
    Леонид Максимов ответил:

    фигня это все. можно и большой мир с множеством активных и неактивных секторов.

  3. 62
    Александр Лищенер ответил:

    На данный момент ТС распрощался с идеей делать бооольшой-большой мир без перехода на глобальный.
    И вот почему:
    - если делать онлайн, надо, однозначно, просчитывать каждую клеточку, нужен сервер и не такой большой мир
    - хождение по пустыне не доставляет ни разу.
    Поэтому мир будет большой, но с глобальной картой, с которой можно уже перейти на локальную. Соответственно, игрок может вносить в клетку глобальной карты вектор изменения, влияющий на нее. Все это дело – довольно большой секс, то, что придумаю, выкину сюда – хотя быдлокод и ересь еще та…

  4. 61
    Леонид Максимов ответил:

    не обращайте внимания. вам тоже не будет интересно играть с администраторами, которые не являются программистами :)

  5. 60
    Александр Лищенер ответил:

    >>Со знающими людьми играться интереснее, чем с дятлами
    что-то мне совсем грустно стало(

  6. 59
    Веном Кац ответил:

    И чем вам поможет поиск модулей, которые создают подключения?)
    Всегда рад помочь =) Со знающими людьми играться интереснее, чем с дятлами, которые исправляют критическую дыру в течении трёх месяцев в ядре системы, часто встречающихся на серверах паблик хостинга.

  7. 58
    Леонид Максимов ответил:

    >> трафика там будет чуть менее, чем доюя, частично он будет фейковый и так же шифрованным.

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

    а за идею с выявлением подозрительных чужеродностей спасибо :)

  8. 57
    Веном Кац ответил:

    Да, только ты не учитываешь одного момента – нет встроенных в ОС средств анализа пакетов, соответственно, будет палевом скачать их и поставить. Поэтому с анализом трафика, если нет захваченного маршрутизатора, некоторые проблемы… Можно, впрочем, поступить иначе – если обнаружен чужеродный модуль в системе, слить его к себе на машину и запустить и там уже анализировать трафик. Другой вопрос, что трафика там будет чуть менее, чем доюя, частично он будет фейковый и так же шифрованным. Вот уж подарок, правда?) Другой вопрос, если захвачен сервер и на нём обнаружена вдруг админка… Но такое случается редко. Так что зря насчёт простоты…
    Плюс, даже захватив сервер, вы захватите только часть ботнета, обычно не более тысячи машин, которые "обслуживаются" этим узлом. Так же далеко не факт, что вы не столкнётесь с тем, что трафик идёт через прокси, принадлежащий тому же лицу и, в результате, полученный вами сервер является лишь промежуточным звеном. И далеко не факт, что на нём не окажется IDS…
    А для отключения сервера, обслуживающего ботнет, далеко недостаточно иметь клиент ботнета, который к нему стучится. Хотя, конечно, зависит от провайдера и админа. Если админка вдруг стоит на шареде или каком там VPSе, то всё закончится быстро. А если там массив серверов в ТТНете – то это практически безнадежно.

  9. 56
    Леонид Максимов ответил:

    >> основная проблема – его вычислить =)

    ну, тоже мне проблема. анализировать трафик зараженной тобой машины, как правило, не так сложно. а если пользователя удалось заразить тебе, то это мог сделать кто-то еще. вуаля – мы знаем адрес сервера конкурирующего ботнета. :)

  10. 55
    Веном Кац ответил:

    Захватить сервер не особо просто =) На самом деле, основная проблема – его вычислить =)
    Плюс, клиентские части периодически попадают в базы ко всяким неприятностям, вроде каспера и нода тридцать два. Плюс брандмауры, которые тоже мешаются, если о них не позаботиться, но, к сожалению, от забот о них жирнеет та самая клиентская часть, и её становиться сложнее запихать на машину пользователя, через дыру в браузере или другом ПО или в оси или в голове пользователя… Плюс, провайдеры не в восторге от нагрузки, создаваемой серверами, через которые происходит администрирование… Поэтому содержать ботнет довольно недешево и сложно технически… Плюс не вполне законно… Но вполне себе стоит того.

  11. 54
    Леонид Максимов ответил:

    да ладно. если бы все было так просто, то и ботнетов бы практически не было.

  12. 53
    Веном Кац ответил:

    Захватываем/уничтожаем корневые сервера – и привет, ботнет перешел в наши руки/исчез.

  13. 52
    Леонид Максимов ответил:

    а есть убиваемые ботнеты? :)

  14. 51
    Веном Кац ответил:

    Хотя, конечно, если работать в направлении создания децентрализованной сети, которая на поиск нодов не будет жрать трафика (и, соответственно, палиться) и не будет разваливаться при выбывании нодов, то если такую штуку сделать… денюжек станет немеряно =) На основе такой технологии можно создать практически неубиваемый ботнет.

  15. 50
    Леонид Максимов ответил:

    не-не, я тоже думаю, что для начала это слишком круто.

  16. 49
    Веном Кац ответил:

    А вы предлагаете создать полностью децентрализованную сеть? Что-т мне подсказывает, что у автора кишка тонка на такую задачу…

  17. 48
    Леонид Максимов ответил:

    хорошо, когда имеется выделенный сервер :)

  18. 47
    Веном Кац ответил:

    В его случае будет лучшим случаем реализовать репликацию БД средствами самой БД.

  19. 46
    Денис Лисов ответил:

    Нет, я не знаю реализаций. Схема была продумана сейчас. У этой задачи есть кое-что общее с параллельным программированием, которым в определенный момент я занимался.

  20. 45
    Леонид Максимов ответил:

    Дублирование для обеспечения надежности распределенного сервера.

  21. 44
    Александр Лищенер ответил:

    Леонид, в самом – нет, в других – да.
    Дублирование – ?
    Денис, кстати, идея… Придумали только что, думали над этим раньше или так уже делалось? Если не первое, можно наработки\литературу(если близко)?

  22. 43
    Денис Лисов ответил:

    Александр, поясняю. Хорошим я называю генератор, который генерирует последовательность, почти не отличимую от случайной. Поищите информацию на эту тему в англоязычной Википедии.

    Леонид, вообще говоря, я бы попробовал пойти следующим путем.

    Сперва рассмотрим неизменные характеристики зон, к примеру, рельеф и климат. Задается два алгоритма – "ребро" и "зона". Алгоритм "ребро" берет зерно рандома для заданной границы зон и строит описание условий сшивки на границе (к примеру, рельеф общей для секторов полоски шириной 1 клетка). Алгоритм "зона" берет зерно рандома и условия сшивки на каждой границе и генерирует характеристики внутри зоны таким образом, чтобы они были согласованы с заданными условиями.

    Изменяющиеся характеристики разных типов характеризуются одним или несколькими параметрами в масштабе зоны как целого взамен неиспользуемого для них зерна рандома. Алгоритм "ребро" строится на основе параметров в соседних зонах; алгоритм "зона" опирается на значения параметров в зоне и сгенерированные "ребром" граничные условия. В этом случае используется настоящий рандом, так как не требуется повторяемости сгенерированной ситуации.

    Неизменные характеристики, кстати, также могут хранить не только зерно рандома, но и какие-то характеристики, влияющие на генерацию.

  23. 42
    Леонид Максимов ответил:

    Александр, если каждый умный поговорит сам с собой (равносильно "друг с другом" для отдельно взятого каждого умного), то ничего не изменится.

    ЗЫ: я не понимаю, какое предыдущее обсуждение вы имеете в виду. но если я правильно вас понял, то могу сказать следующее: я тоже когда-то думал написать игрушку, продумал многие моменты, вплоть до распределения серверной нагрузки по клиентам, но запнулся на моменте дублирования.

  24. 41
    Александр Лищенер ответил:

    прошу каждогоумного поговорить друг с другом, потому как хотя бы предыдущее обсуждение натолкнуло меня косвенно на многие мысли

  25. 40
    Леонид Максимов ответил:

    >>зерно для каждого сектора свое

    а сшивку секторов как делать? :)
    на случай, если просчитывается не только текущий сектор, но и смежные с ним, а при перемещении из сектора-в сектор меняется только набор активных секторов? :)

  26. 39
    Александр Лищенер ответил:

    просто сказать "хороший", блджад!

  27. 38
    Денис Лисов ответил:

    Хороший генератор псевдослучайных чисел. А зерно для каждого сектора свое и хранится в его свойствах.

  28. 37
    Александр Лищенер ответил:

    Ога. А зерновой рандом самодельным массивом, как в старых добрах играх?)

  29. 36
    Денис Лисов ответил:

    Не надо генерировать карту целиком и сразу. Лучше сделать "глобальную" карту и генерируемые из рандома с заданным зерном локальные карты.

  30. 35
    Александр Лищенер ответил:

    ммм…
    надо сгенерировать карту сначала, а потом хранить вещи, достаточные для примерной картины мира…
    т.е. по сути, при огромном мире, если игрок убьет, скажем, человека под именем "Артем", потом через 10 лет(грубо говоря) зайдет туда обратно, там будет новый "Артем", это объяснимо. Т.е. мир практически не меняется, меняется только игрок(только если глобально)

  31. 34
    Александр Лищенер ответил:

    игрок может задать т.н. "вектор изменения" мира.
    все это довольно сложно, конечно…
    но мы исходим из того, что просчитывать каждое существо невозможно(

    блин, как Бог создавал этот мир вообще хД?

  32. 33
    Денис Лисов ответил:

    Получение по агрументу реально при определенных условиях. Но ведь персонажей, скажем, моделировать везде вы не сможете. А значит, по меньшей мере что-то придется генерировать с нуля при очередном входе в подзону….

  33. 32
    Александр Лищенер ответил:

    Денис, не забыл. Думал над этим…
    Короче.
    Вариант №1, который предложил я.
    получение клетки по аргументу. идеален, но недостижим, как я понял.(
    Вариант №2, Денис, Ваш.
    генерировать какие-то области с абстрактными параметрами, притом "считать" только одну – ту, которую нужно.
    видимо, так и надо делать?
    Павел, конечно, года через 10 доделаю, приглашу ;)

  34. 31
    Павел Васильченко ответил:

    Не забудьте меня поиграть пригласить :)

  35. 30
    Артём Мигда ответил:

    ребят извините, что не по теме, посмотрите плз тему //vkontakte.ru/topic-912_22778219 очень надо…

  36. 29
    Денис Лисов ответил:

    Александр, вы знаете что забыли учесть? У вас нет такого варианта, как моделировать развитие всего мира. Он слишком велик. Вы даже хранить все его состояние не можете. Вам нужно разбивать его на более или менее независимые области и моделировать только текущую и немного глобального состояния – иначе вы не смоделируете даже один шаг.

  37. 28
    Александр Лищенер ответил:

    издеваетесь?
    я нуб! я проигрывал в олимпиадах и ничего, превышающего 1000 строк, не писал!

  38. 27
    Александр Лищенер ответил:

    Рандома нужно много(.
    В идеале, нужно распределить по карте климатические условия, заселить людишек(троллей. хоббитов и прочих кислотных созданий), бросить зерно – коэффициент развития, свести в драке кого-то с кем-то(притом запомнить примерное место действий), получить на выходе ландшафт территории, развитость государств, места сражений.(
    Впринципе, можно, наверное, написать очень хитрую вещь, которая рандома требует не много.
    Так и придется делать?

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

  39. 26
    Павел Васильченко ответил:

    Александр, вы компитентный человек, объясните мне как делается рэндом в браузерных играх от гейм форж, в частности в игре Огейм?

  40. 25
    Александр Лищенер ответил:

    нет, конечно – я про рандом говорил)
    Daggerfall помните? там все было очень убого, но было же…
    есть вариант, конечно, генерировать по ходу прохождения героем карты, но это скорее изврат

  41. 24
    Денис Лисов ответил:

    Так сделайте для начала алогритм генерации на основе рандома. Хоть какой-то. И посмотрите, сколько этого рандома вам нужно. Может, его и нужно-то совсем немного?

  42. 23
    Денис Лисов ответил:

    Александр, а рисовать мир вы собираетесь вручную или как?

  43. 22
    Александр Лищенер ответил:

    а Daggerfall?

  44. 21
    Леонид Максимов ответил:

    кстати, была древняя такая игрушка – FTA2. со значительного размера миром. мегабайт 30, не больше :)

  45. 20
    Вася Пупкинъ ответил:

    Чтобы строить города, надо придумать какой-то хитрый алгоритм, либо задать их вручную.

    В любом случае ландшафт слудеут хранить и рисовать отдельно от объектов на нем.

  46. 19
    Александр Лищенер ответил:

    Денис, нужно построить карту, скажем, 100 000 * 100 000 клеток.
    По-хорошему, карта должна строиться от ключа(зерна).
    Как это сделать – ума не представляю. Вернее, представляю, но плохие варианты.
    Вопрос стоял в том, чтобы кто-нибудь мне рассказал один из вариантов этого.

    Вася, для ландшафта это замечательно, спасибо.
    А если надо строить города? Накладывать на карту сетку из стен и зданий?

  47. 18
    Вася Пупкинъ ответил:

    Чувак, берешь любой алгоритм генерации "случайных" чисел. Почти все они принимают на вход какое-то число. Это число и есть координата точки. Кидаешь алгоритм в функцию. Результат функции – высота в даной точке.

    Но этого мало, так как высоты будут сильно прыгать.

    просто потом "выравниваешь" высоту чтоб рельеф был гладким.

    Выравниваешь ее в той же функции, в конце. Для этого передаешь ей соседнюю высоту.

    Надеюсь достаточно просто объяснил?

  48. 17
    Леонид Максимов ответил:

    о, можно кусков труб туда накидать. в смысле, сплайнов :)

  49. 16
    Nickolay White ответил:

    так задавай ключевые точки – а дальше апроксимируй.

  50. 15
    Денис Лисов ответил:

    Александр, а какой объем случайных данных вы планируете использовать для построения и откуда их брать? Ведь действительно случайные данные достаточно ценный ресурс.

  51. 14
    Леонид Максимов ответил:

    критерии очевидны – банальные правила отбора вроде "перепад высоты между соседними клетками в среднем маленький", etc.

    по поводу построения – задать спектр и значения в некоторой точке.

  52. 13
    Александр Лищенер ответил:

    Владимир, сложные и плохие критерии.
    Скажем, зоны ландшафта, принципы поселения людей… сложно там все (

  53. 12
    Александр Лищенер ответил:

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

  54. 11
    Nickolay White ответил:

    используй сжатие – и все дела.
    или может есть какая-то особенность массива? Откуда он берётся?

  55. 10
    Владимир Медведев ответил:

    как массив генерится, что там за "некие критерии" ?

  56. 9
    Владимир Медведев ответил:

    НИФИГА НЕ ПОНЯЛ ЧТО ТЕБЕ НУЖНО.
    На вход подается число типа int а на выходеполучаем последовательность [псевдо]случайных чисел. Для одного и того числа, одну и ту же последовательность. Так чтоли?

  57. 8
    Александр Лищенер ответил:

    #7,карта игры, которая, собственно, предполагается огромной.
    Вопрос в том, чтобы от числа построить мир и от числа получить точку.

    #8, покурю названный.

  58. 7
    Веном Кац ответил:

    Риманову дзета-функцию or something like в зубы и вперёд, заре на встречу =)

  59. 6
    Денис Лисов ответил:

    Александр, а как вы собираетесь использовать эти данные? Возможно, стоит уменьшить количество случайных данных?

  60. 5
    Александр Лищенер ответил:

    шо це таке?
    я же сказал, что тупой, объясняйте, пожалуйста, а не кидайте имхо)

  61. 4
    Александр Лищенер ответил:

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

  62. 3
    Александр Лищенер ответил:

    нет, рогалик, в браузерках такого не нужно.

  63. 2
    Nickolay White ответил:

    используй псевдо-случайные последовательности

  64. 1
    Павел Васильченко ответил:

    браузерные игры?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.