sim3x, я начал писать. Я сейчас работаю над картой. Мне нужно реализовать логику передвижения по миру. Продумать пространство в игре. По клетка там все будет, или же как то иначе. По клеткам делать я не хочу. Мне нужно реализовать карту, по функционалу схожую с 2ГИС. Понять как работает схема составления маршрутов. Изучил Алгоритм Дейкстры для поиска коротких маршрутов. Как хранятся дороги в БД. И тд и тп.
Exploding, мне очень нравится ход ваших мыслей и то как вы их рассказываете)) И я тоже думал об этом, причем не мало. Но стоит признать, что все гениальное, делается просто. Я пока не нашел четкого решения всему этому, могу только изложить ход своих мыслей.
Все это, можно разделить по секторам. Сектор памяти, эмоций, личных качеств, сектор настоящего момента. Что я имею в виду говоря Сектор? Это разделение поступающей информации по потокам.
Каждый сектор, это отдельная таблица с записями. Каждая запись имеет свою степень важности для персонажа. Остается реализовать взаимодействие между всеми этими секторами.
Берем конкретный пример в виде укуса собаки. Происходит событие, в котором есть взаимодействие с собакой. Но для этого, чтобы все это работало, стоит реализовать сами Действия которые может совершать персонаж. Что это значит? Все просто. Есть персонаж, есть предмет взаимодействия, и есть исходный результат.
Вернемся к нашему примеру. В данном случаи Действие можно назвать "Собака в поле зрения". Вы можете возразить, мол это действие слишком ситуативное, выходит нам стоит реализовать Поле видимости каждого существа в нашем мире? Встречный вопрос - а что это нам даст? Сможем ли мы реализовать много интересного на фундаменте этого? Я считаю сможем. Тогда стоит продумать эту систему которую если мы сядем и подумаем то продумаем, но мы сейчас не о ней.
И снова, вернемся к нашему примеру. Произошло действие. Исход данного действия, это накинуть определенный модификатор на персонажа. Какой еще модификатор? Модификатор изменения определенных характеристик этого персонажа. Берем его храбрость, встревоженность, внимательность, и все остальное в таком порядке, и просто изменяем их значения.
Каждое действие будет храниться отдельно, в таблице, в папке, не важно. Главное что с каждым действием будет рядом хранится его индивидуальный скрипт. Его логика. То, что будет происходить при выполнении данного действия.
Что от нас требуется? Конечно же разработать упрощенный конструктор. Чтобы желающие энтузиасты могли создавать сами эти действия и прописывать к ним логику.
Действие "Сесть под деревом"? Да запросто, логика такого действия будет - накинуть на персонажа модификатор, который изменяет на определенное время Эту, Эту и вот Эту характеристику.
Действие "Собака в поле зрения"? Логика - берем из сектора Памяти объект Собака, подтягиваем к нему из сектора Эмоций объект, смешиваем с рандомными значениями (если таковы требуются), учитываем настоящий момент (в какой атмосфере находится персонаж) и отдаем Пользователю энтузиасту все эти данные. Конечно в UX-дизайне, и пускай тот творит свой креатив и создает логику данного действия.
Остается только реализовать отдел по модерации этих самых действий.
Я вот тоже остановлюсь тут пожалуй)) "а то поплохело уже)))"
sim3x, болезнь творца на то и болезнь творца. То, что я хочу, это не игра для массовой аудитории, я не хочу монетизации, не хочу какого-то одобрения от кого-то. То, что я хочу, это чувствовать как там, что-то живет в данный момент. Что-то, что создано мной. Что какой-то мой созданный персонаж, в данный момент думает куда ему устроиться на работу, на ком жениться, жениться ли вообще, и все такое и все такое. А я каждый вечер, буду открывать этот мир, и умиляться происходящим. Разговаривать с каждым своим творением, чувствовать его стремления и неудачи. Буду до конца своих дней, совершенствовать этот мир. Я не хочу пустой, бездушный обман, в виде быстрой обработки после запроса. Нет запроса, нет жизни. Там все мертво, когда я сделаю запрос, все это дело быстро создаст мне что-то ради того чтобы просто что-то показать.
Причина по которой мне нужно это делать каждую секунду, я не буду реализовывать только голод. Я хочу создать мини-город из 1000 жителей, каждый из которого будет просыпаться утром, выполнять свои задачи, развиваться, умирать, рождаться. Я хочу свою мини матрицу, хоть и примитивную, но свою)
Причина по которой мне нужно это делать каждую секунду, я не буду реализовывать только голод. Я хочу создать мини-город из 1000 жителей, каждый из которого будет просыпаться утром, выполнять свои задачи, развиваться, умирать, рождаться. Я хочу свою мини матрицу, хоть и примитивную, но свою)
Причина по которой мне нужно это делать каждую секунду, я не буду реализовывать только голод. Я хочу создать мини-город из 1000 жителей, каждый из которого будет просыпаться утром, выполнять свои задачи, развиваться, умирать, рождаться. Я хочу свою мини матрицу, хоть и примитивную, но свою)
Виталий Столяров, это весьма интересно и может мне пригодится! А ты не в курсе чего нибудь такого, что более похоже на бесконечный цикл? Или какие нибудь фоновые процессы которые это делают? Хотелось бы работать не только с одним MySQL. CRON все говорят использовать не стоит.
sim3x, да неужели нет ничего что каждую секунду будет проверять одну переменную и делать что-то с другой? Почему все должно быть всегда супер-мега усложнено? Интегралы, арифметики, херифметики.
Почему нельзя написать как вы говорите Демон фоновую програмку, которая каждую секунду будет обращаться к MySQL, брать от туда какое то значение, что-то с ним делать, и обратно его туда записывать?
sim3x, послушай, я тут перечитал все, но так все таки и не врубаюсь. Пожалуйста, объясни мне как мне проверять каждую секунду определенного жителя, на что либо. К примеру на голод.
Есть у меня персонаж. Он ничего не делает. Он сидит. И каждую секунду, у него должен уменьшаться показатель голода. Когда его голод достигнет отметки 10%, то он должен тупо отправить мне email об этом.
Вот возьми к примеру игру Cities Skyline. Как он высчитывает столько машин, людей, самолетов и поездов каждую секунду? Неужели все это завернуто в один общий цикл и каждый раз скрипт с нуля пересчитывает все с нуля обращаясь к бд?
sim3x, примерно к такой логике и я приходил. Я думал именно об этом же. Но столкнулся с проблемой того, что пока пользователь не сделает второй запрос, результата не будет и вовсе.
К примеру игрок заказал новый меч у NPC кузнеца, оплатил и ушел пить кофе. Кузнец должен отправиться в склад, взять оттуда нужные ресурсы, вернуться, выковать меч и поставить его на прилавок. И все это должно происходить даже если заказавший меч игрок, вдруг захлебнулся со своим кофе и его увезли в больницу.
Я думал это сделать еще след. образом. При заказе меча, сразу создать все нужные записи в бд, в котором уже написано что со склада кузнец забрал столько то ресурсов, что он выковал такой то меч. Но учитывать эти записи только по дате. К примеру, если я заказал меч, то запись о мече в БД сразу же создалась, но обрабатываться эта запись будет только когда ее дата придет в активность. Обычный запрос в бд по условие где дата равна прошлому.
Александр Павлюк, интересно, он проверяет в каждом цикле наличие соединения по сокету и соответственно что-то делает.
У меня возник такой вопрос. Я как-то запускал бесконечный цикл на PHP. Самый просто while(true). Так вот, пока сервер выполнял этот цикл, он не отвечал на другие http запросы.
Соответственно я подумал. Видимо сервер может работать одновременно над одним скриптом, и все остальные попадают в очередь пока он не выполнит этот. А раз цикл бесконечный, значит все запросы попадают в очередь.