Сабж:
к примеру, нам надо организовать почти рандомную генерацию двумерного массива структуры, весящей несколько интов, размером, скажем 100к*100к.
почти рандомную – значит, есть некие критерии, согласно которым распределяются значения.
а теперь представим, что надо передать карту через интернет. или, проще, сохранить ее(да в той же куче). сохранять 1 000 000 000 000*16 > 1TB явно некошерно(если мне не изменяет моя математика)).
вероятно, можно задать некую псевдо-рандомную функцию от аргумента. вспомнив урок труда, я посчитал, что для, скажем, для ключа int случаев будет 2^(2^16), что неплохо.
можно? использовав зерно рандома, генерировать(получать от функции) ту часть, которую нам нужно?
извиняюсь за тупость).
и да, тема – геймдев, хочу сделать боооольшой мир.
24 февраля 2010 в 2:01
ну я пока маленький глупый мальчик. начнем с небольшого, правильно?
24 февраля 2010 в 0:03
фигня это все. можно и большой мир с множеством активных и неактивных секторов.
24 февраля 2010 в 0:02
На данный момент ТС распрощался с идеей делать бооольшой-большой мир без перехода на глобальный.
И вот почему:
- если делать онлайн, надо, однозначно, просчитывать каждую клеточку, нужен сервер и не такой большой мир
- хождение по пустыне не доставляет ни разу.
Поэтому мир будет большой, но с глобальной картой, с которой можно уже перейти на локальную. Соответственно, игрок может вносить в клетку глобальной карты вектор изменения, влияющий на нее. Все это дело – довольно большой секс, то, что придумаю, выкину сюда – хотя быдлокод и ересь еще та…
23 февраля 2010 в 12:02
не обращайте внимания. вам тоже не будет интересно играть с администраторами, которые не являются программистами
23 февраля 2010 в 3:00
>>Со знающими людьми играться интереснее, чем с дятлами
что-то мне совсем грустно стало(
23 февраля 2010 в 1:03
И чем вам поможет поиск модулей, которые создают подключения?)
Всегда рад помочь =) Со знающими людьми играться интереснее, чем с дятлами, которые исправляют критическую дыру в течении трёх месяцев в ядре системы, часто встречающихся на серверах паблик хостинга.
23 февраля 2010 в 1:02
>> трафика там будет чуть менее, чем доюя, частично он будет фейковый и так же шифрованным.
доюя трафика во внутренней сети не страшно, а полностью выпускать его наружу совсем не обязательно. ну и анализ пакетов в большинстве случаев не требуется, достаточно следить, какие модули какие подключения создают.
а за идею с выявлением подозрительных чужеродностей спасибо
23 февраля 2010 в 1:01
Да, только ты не учитываешь одного момента – нет встроенных в ОС средств анализа пакетов, соответственно, будет палевом скачать их и поставить. Поэтому с анализом трафика, если нет захваченного маршрутизатора, некоторые проблемы… Можно, впрочем, поступить иначе – если обнаружен чужеродный модуль в системе, слить его к себе на машину и запустить и там уже анализировать трафик. Другой вопрос, что трафика там будет чуть менее, чем доюя, частично он будет фейковый и так же шифрованным. Вот уж подарок, правда?) Другой вопрос, если захвачен сервер и на нём обнаружена вдруг админка… Но такое случается редко. Так что зря насчёт простоты…
Плюс, даже захватив сервер, вы захватите только часть ботнета, обычно не более тысячи машин, которые "обслуживаются" этим узлом. Так же далеко не факт, что вы не столкнётесь с тем, что трафик идёт через прокси, принадлежащий тому же лицу и, в результате, полученный вами сервер является лишь промежуточным звеном. И далеко не факт, что на нём не окажется IDS…
А для отключения сервера, обслуживающего ботнет, далеко недостаточно иметь клиент ботнета, который к нему стучится. Хотя, конечно, зависит от провайдера и админа. Если админка вдруг стоит на шареде или каком там VPSе, то всё закончится быстро. А если там массив серверов в ТТНете – то это практически безнадежно.
23 февраля 2010 в 0:03
>> основная проблема – его вычислить =)
ну, тоже мне проблема. анализировать трафик зараженной тобой машины, как правило, не так сложно. а если пользователя удалось заразить тебе, то это мог сделать кто-то еще. вуаля – мы знаем адрес сервера конкурирующего ботнета.
23 февраля 2010 в 0:02
Захватить сервер не особо просто =) На самом деле, основная проблема – его вычислить =)
Плюс, клиентские части периодически попадают в базы ко всяким неприятностям, вроде каспера и нода тридцать два. Плюс брандмауры, которые тоже мешаются, если о них не позаботиться, но, к сожалению, от забот о них жирнеет та самая клиентская часть, и её становиться сложнее запихать на машину пользователя, через дыру в браузере или другом ПО или в оси или в голове пользователя… Плюс, провайдеры не в восторге от нагрузки, создаваемой серверами, через которые происходит администрирование… Поэтому содержать ботнет довольно недешево и сложно технически… Плюс не вполне законно… Но вполне себе стоит того.
22 февраля 2010 в 22:01
да ладно. если бы все было так просто, то и ботнетов бы практически не было.
22 февраля 2010 в 22:00
Захватываем/уничтожаем корневые сервера – и привет, ботнет перешел в наши руки/исчез.
22 февраля 2010 в 21:01
а есть убиваемые ботнеты?
22 февраля 2010 в 21:00
Хотя, конечно, если работать в направлении создания децентрализованной сети, которая на поиск нодов не будет жрать трафика (и, соответственно, палиться) и не будет разваливаться при выбывании нодов, то если такую штуку сделать… денюжек станет немеряно =) На основе такой технологии можно создать практически неубиваемый ботнет.
22 февраля 2010 в 20:02
не-не, я тоже думаю, что для начала это слишком круто.
22 февраля 2010 в 20:01
А вы предлагаете создать полностью децентрализованную сеть? Что-т мне подсказывает, что у автора кишка тонка на такую задачу…
22 февраля 2010 в 20:00
хорошо, когда имеется выделенный сервер
22 февраля 2010 в 1:00
В его случае будет лучшим случаем реализовать репликацию БД средствами самой БД.
22 февраля 2010 в 0:03
Нет, я не знаю реализаций. Схема была продумана сейчас. У этой задачи есть кое-что общее с параллельным программированием, которым в определенный момент я занимался.
22 февраля 2010 в 0:03
Дублирование для обеспечения надежности распределенного сервера.
22 февраля 2010 в 0:02
Леонид, в самом – нет, в других – да.
Дублирование – ?
Денис, кстати, идея… Придумали только что, думали над этим раньше или так уже делалось? Если не первое, можно наработки\литературу(если близко)?
21 февраля 2010 в 23:04
Александр, поясняю. Хорошим я называю генератор, который генерирует последовательность, почти не отличимую от случайной. Поищите информацию на эту тему в англоязычной Википедии.
Леонид, вообще говоря, я бы попробовал пойти следующим путем.
Сперва рассмотрим неизменные характеристики зон, к примеру, рельеф и климат. Задается два алгоритма – "ребро" и "зона". Алгоритм "ребро" берет зерно рандома для заданной границы зон и строит описание условий сшивки на границе (к примеру, рельеф общей для секторов полоски шириной 1 клетка). Алгоритм "зона" берет зерно рандома и условия сшивки на каждой границе и генерирует характеристики внутри зоны таким образом, чтобы они были согласованы с заданными условиями.
Изменяющиеся характеристики разных типов характеризуются одним или несколькими параметрами в масштабе зоны как целого взамен неиспользуемого для них зерна рандома. Алгоритм "ребро" строится на основе параметров в соседних зонах; алгоритм "зона" опирается на значения параметров в зоне и сгенерированные "ребром" граничные условия. В этом случае используется настоящий рандом, так как не требуется повторяемости сгенерированной ситуации.
Неизменные характеристики, кстати, также могут хранить не только зерно рандома, но и какие-то характеристики, влияющие на генерацию.
21 февраля 2010 в 23:02
Александр, если каждый умный поговорит сам с собой (равносильно "друг с другом" для отдельно взятого каждого умного), то ничего не изменится.
ЗЫ: я не понимаю, какое предыдущее обсуждение вы имеете в виду. но если я правильно вас понял, то могу сказать следующее: я тоже когда-то думал написать игрушку, продумал многие моменты, вплоть до распределения серверной нагрузки по клиентам, но запнулся на моменте дублирования.
21 февраля 2010 в 23:01
прошу каждогоумного поговорить друг с другом, потому как хотя бы предыдущее обсуждение натолкнуло меня косвенно на многие мысли
21 февраля 2010 в 22:01
>>зерно для каждого сектора свое
а сшивку секторов как делать?
на случай, если просчитывается не только текущий сектор, но и смежные с ним, а при перемещении из сектора-в сектор меняется только набор активных секторов?
21 февраля 2010 в 21:02
просто сказать "хороший", блджад!
21 февраля 2010 в 12:04
Хороший генератор псевдослучайных чисел. А зерно для каждого сектора свое и хранится в его свойствах.
21 февраля 2010 в 0:02
Ога. А зерновой рандом самодельным массивом, как в старых добрах играх?)
21 февраля 2010 в 0:01
Не надо генерировать карту целиком и сразу. Лучше сделать "глобальную" карту и генерируемые из рандома с заданным зерном локальные карты.
20 февраля 2010 в 23:04
ммм…
надо сгенерировать карту сначала, а потом хранить вещи, достаточные для примерной картины мира…
т.е. по сути, при огромном мире, если игрок убьет, скажем, человека под именем "Артем", потом через 10 лет(грубо говоря) зайдет туда обратно, там будет новый "Артем", это объяснимо. Т.е. мир практически не меняется, меняется только игрок(только если глобально)
20 февраля 2010 в 23:04
игрок может задать т.н. "вектор изменения" мира.
все это довольно сложно, конечно…
но мы исходим из того, что просчитывать каждое существо невозможно(
блин, как Бог создавал этот мир вообще хД?
20 февраля 2010 в 23:03
Получение по агрументу реально при определенных условиях. Но ведь персонажей, скажем, моделировать везде вы не сможете. А значит, по меньшей мере что-то придется генерировать с нуля при очередном входе в подзону….
20 февраля 2010 в 22:04
Денис, не забыл. Думал над этим…
Короче.
Вариант №1, который предложил я.
получение клетки по аргументу. идеален, но недостижим, как я понял.(
Вариант №2, Денис, Ваш.
генерировать какие-то области с абстрактными параметрами, притом "считать" только одну – ту, которую нужно.
видимо, так и надо делать?
Павел, конечно, года через 10 доделаю, приглашу
20 февраля 2010 в 22:03
Не забудьте меня поиграть пригласить
20 февраля 2010 в 22:03
ребят извините, что не по теме, посмотрите плз тему //vkontakte.ru/topic-912_22778219 очень надо…
20 февраля 2010 в 22:02
Александр, вы знаете что забыли учесть? У вас нет такого варианта, как моделировать развитие всего мира. Он слишком велик. Вы даже хранить все его состояние не можете. Вам нужно разбивать его на более или менее независимые области и моделировать только текущую и немного глобального состояния – иначе вы не смоделируете даже один шаг.
20 февраля 2010 в 22:00
издеваетесь?
я нуб! я проигрывал в олимпиадах и ничего, превышающего 1000 строк, не писал!
20 февраля 2010 в 21:05
Рандома нужно много(.
В идеале, нужно распределить по карте климатические условия, заселить людишек(троллей. хоббитов и прочих кислотных созданий), бросить зерно – коэффициент развития, свести в драке кого-то с кем-то(притом запомнить примерное место действий), получить на выходе ландшафт территории, развитость государств, места сражений.(
Впринципе, можно, наверное, написать очень хитрую вещь, которая рандома требует не много.
Так и придется делать?
кстати, видел недавно веселую функцию рандома, которая собирает мусор, преобразует в двоичные числа и делает несколько побитовых операций. извращенцы))
20 февраля 2010 в 21:05
Александр, вы компитентный человек, объясните мне как делается рэндом в браузерных играх от гейм форж, в частности в игре Огейм?
20 февраля 2010 в 21:02
нет, конечно – я про рандом говорил)
Daggerfall помните? там все было очень убого, но было же…
есть вариант, конечно, генерировать по ходу прохождения героем карты, но это скорее изврат
20 февраля 2010 в 21:02
Так сделайте для начала алогритм генерации на основе рандома. Хоть какой-то. И посмотрите, сколько этого рандома вам нужно. Может, его и нужно-то совсем немного?
20 февраля 2010 в 21:00
Александр, а рисовать мир вы собираетесь вручную или как?
20 февраля 2010 в 15:00
а Daggerfall?
20 февраля 2010 в 14:04
кстати, была древняя такая игрушка – FTA2. со значительного размера миром. мегабайт 30, не больше
20 февраля 2010 в 12:02
Чтобы строить города, надо придумать какой-то хитрый алгоритм, либо задать их вручную.
В любом случае ландшафт слудеут хранить и рисовать отдельно от объектов на нем.
20 февраля 2010 в 9:02
Денис, нужно построить карту, скажем, 100 000 * 100 000 клеток.
По-хорошему, карта должна строиться от ключа(зерна).
Как это сделать – ума не представляю. Вернее, представляю, но плохие варианты.
Вопрос стоял в том, чтобы кто-нибудь мне рассказал один из вариантов этого.
Вася, для ландшафта это замечательно, спасибо.
А если надо строить города? Накладывать на карту сетку из стен и зданий?
19 февраля 2010 в 23:04
Чувак, берешь любой алгоритм генерации "случайных" чисел. Почти все они принимают на вход какое-то число. Это число и есть координата точки. Кидаешь алгоритм в функцию. Результат функции – высота в даной точке.
Но этого мало, так как высоты будут сильно прыгать.
просто потом "выравниваешь" высоту чтоб рельеф был гладким.
Выравниваешь ее в той же функции, в конце. Для этого передаешь ей соседнюю высоту.
Надеюсь достаточно просто объяснил?
19 февраля 2010 в 23:02
о, можно кусков труб туда накидать. в смысле, сплайнов
19 февраля 2010 в 23:01
так задавай ключевые точки – а дальше апроксимируй.
19 февраля 2010 в 23:01
Александр, а какой объем случайных данных вы планируете использовать для построения и откуда их брать? Ведь действительно случайные данные достаточно ценный ресурс.
19 февраля 2010 в 23:00
критерии очевидны – банальные правила отбора вроде "перепад высоты между соседними клетками в среднем маленький", etc.
по поводу построения – задать спектр и значения в некоторой точке.
19 февраля 2010 в 22:03
Владимир, сложные и плохие критерии.
Скажем, зоны ландшафта, принципы поселения людей… сложно там все (
19 февраля 2010 в 22:02
мне нужно хранить каким-то образом огромный массив. делать это явно – плохо, поэтому, предполагаю(!), можно использовать некую функцию. мне нужно знать, как это организовать
19 февраля 2010 в 22:02
используй сжатие – и все дела.
или может есть какая-то особенность массива? Откуда он берётся?
19 февраля 2010 в 22:02
как массив генерится, что там за "некие критерии" ?
19 февраля 2010 в 22:01
НИФИГА НЕ ПОНЯЛ ЧТО ТЕБЕ НУЖНО.
На вход подается число типа int а на выходеполучаем последовательность [псевдо]случайных чисел. Для одного и того числа, одну и ту же последовательность. Так чтоли?
19 февраля 2010 в 21:02
#7,карта игры, которая, собственно, предполагается огромной.
Вопрос в том, чтобы от числа построить мир и от числа получить точку.
#8, покурю названный.
19 февраля 2010 в 21:01
Риманову дзета-функцию or something like в зубы и вперёд, заре на встречу =)
19 февраля 2010 в 20:05
Александр, а как вы собираетесь использовать эти данные? Возможно, стоит уменьшить количество случайных данных?
19 февраля 2010 в 19:05
шо це таке?
я же сказал, что тупой, объясняйте, пожалуйста, а не кидайте имхо)
19 февраля 2010 в 19:05
типо заранее заготовленный массив случайных чисел, которые с определенной последовательностью выдергиваюццо?
19 февраля 2010 в 19:04
нет, рогалик, в браузерках такого не нужно.
19 февраля 2010 в 19:04
используй псевдо-случайные последовательности
19 февраля 2010 в 19:03
браузерные игры?