theMukhiddin
@theMukhiddin
Веб-разработчик

Болезнь творца или как создать свой виртуальный мир?

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

Мое знание:
  • HTML, CSS
  • Javascript, Jquery, Ajax
  • PHP, ООП
  • MySQL
  • Фреймворк Laravel

5a57b5fa7c1db099734299.jpeg
Перейду к сути. Я хочу создать огромный виртуальный город, времен средневековья, который будет жить своей жизнью, независимо от меня. 3D графику позволить себе не могу, потому все будет пока что в виде обычных графиков и цифр, в дальнейшем придумаю визуальную оболочку всему этому.

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

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

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

Итак вопросы

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

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

Вопрос - Как вы знаете, есть одна проблема у скриптовых языков вроде PHP, они умирают сразу же после выполнения. А мне нужно что-то, что будет работать постоянно и заниматься постоянным вычислением. Первое что приходит мне в голову это CRON. Что посоветуете вы?
  • Вопрос задан
  • 4037 просмотров
Пригласить эксперта
Ответы на вопрос 15
@santaatnas
Java, Python, Php
Вы какую-то ерунду выдумываете на php такое делать)). Unity + С# и вперед)) Можно и под VR сделать. Любая логика, любой код, ИИ и все прочее + интерфейсы бесплатные, куча моделей из коробки. В C# разберетесь, он тоже ООП как и php.
Ответ написан
sim3x
@sim3x
будет жить своей жизнью, независимо от меня
ага и кофе сам варить будет. Так не бывает. Потребуется балансировка и множество прогонов симуляции, чтоб понять как сделать стабильное окружение, которое будет интресно изменять пользователю

3D графику позволить себе не могу
поищите начинающих художников

в виде обычных графиков и цифр
их еще сложнее придумать

Город будет иметь небольшие окрестности, в которых необходимо реализовать рост растительности и активность некой фауны.
и как она буде симулироваться? Есть уже соотношения, сколько нужно вырастить деревьев и живности за один тик?

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

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

Фреймворк в данной задаче не сильно поможет, если только не сумеете спроектировать все так, чтоб валидации и сохранение через него проходили
Ответ написан
Exploding
@Exploding
wtf?
То ли это ответ, то ли это вопрос...

Когда-то я (да и почти каждый это читающий) размышлял на похожую тему, однако, дальше размышлений дело не пошло, да наверно и хорошо))) Но в вашем случае, эти мысли могут стать полезными и задать начальное направление. Если конечно это хорошие мысли, и кто-то из участников сможет объективно прокомментировать их, но с учетом того, что как мне кажется это единственный вариант который поможет:
- вывести проект на рабочий уровень (закончить - врядли... да и не нужно! Вся суть в этом как раз!)))
- исходя из п.1 -> быть интересным и может быть популярным...
- постоянно развиваться
- избежать глобальных ошибок проектирования
- безболезненно (как мне думается) вносить изменения в структуры базовых сущностей
- ну и еще там много разных плюсов, которые я не помню так сразу)))
- ах, да, самое главное: наконец можно будет грабить корованы!!!

Итак, собственно суть:
Самым главным в этом всем - правильный выбор ER-модели данных.
Я бы использовал объектную модель для описания сущностей, где каждая сущность была бы описана отдельным классом используя принцип ООП и концепцию наследования(!)
Таким образом, описав базовые классы, начиная с TObject - можно будет постепенно продвигаться к классам более высокого уровня, при необходимости внося изменения в родительские классы.
Под TObject я подразумеваю класс самой элементарной сущности, с минимальным набором свойств, без процедур и наверно даже без событий (хотя парочку типа ondelete/oncreate наверно нужно бы определить)
Не знаю, на какой уровень реалистичности вы замахнетесь, но в принципе если изначально не бежать "впереди паровоза" и обдуманно все выполнять - из этого может что-то да получиться.
Конечно же возникнет много вопросов с реализацией таких свойств объекта, например, как "навык" или "желание", но это уже не мне придумывать)))

В общем... основная суть я думаю ясна... Примерив на себя божественную рубаху, запустить это все дело для закрытого тестирования.
Не забыть реализовать две области взаимодействия с системой:
- простой мир (для каких-то людей, не знаю каких... короче для игроков)
- и так сказать "божественная" aka админка))
И самое интересное: чтобы доступ в "божественную" мог получить любой желающий, считающий себя хоть мало-мальски программистом.
Там бы на начальном этапе человек мог, взяв за основу определенный класс высокого уровня, создать наследника: т.е. взял например класс "птицы" и создал наследника "ворона", "воробей", "журавль")))
Ну и в "песочнице" уже там протестить... журавля)))) Если все норм - журавля в мир, а автору +1 к репутации и доступ к более низкоуровнему классу.

Такое вот. Хз, может и бред... Но лучше ничего не придумал.

P.S. Если бы была реализована подобная система - я бы с удовольствием попробовал создать журавля)) Ибо корованы наверно не потянул бы))
Ответ написан
@xCyber
История одного искусственного виртуального мира: https://geektimes.ru/post/90571/
Реализовать можно на javascript и canvas
5a58717ee25db142273485.png
Ответ написан
saboteur_kiev
@saboteur_kiev
build engineer
1. Можно вообще не заморачиваться графикой, обойтись по началу текстом.

2. Да, вполне можно разделить процессы на разные сервисы. Общение можно делать через базу данных или любой вид межпроцессорных взаимодействий, те же сокеты.
Главное грамотно разделить.
В идеале, чтобы остановка одного из процессов не мешала жить остальным - упал сервер обслуживающий AI, исчезли монстры. Но сам мир, трава, ресурсы - на месте, и пользователи могут бегать. Так реализовано в той же Linage от NCSoft.

3. Если у вас будет готова и описана логика, то высоконагруженные алгоритмы можно написать на С++, java, go, любом другом языке.

Если вы собираетесь это все монетизировать - это одно. Просто выпустите рабочий хороший вариант, доведите его до ума и пробуйте. Если взлетит - всегда можно будет нанять программистов, переписать отдельные процессы с нуля (при наличии ТЗ и хорошо описанной логики) на компилируемом языке.
Ответ написан
@iki90009
Посмотри в сторону игры Dwarf Fortless
Это лучший пример из того что вы требуете. Прочитайте вики игры.
Этот человек уже много лет пишет приключения дварфов.
Ответ написан
@LaitVersion
Как вы знаете, есть одна проблема у скриптовых языков вроде PHP, они умирают сразу же после выполнения - далеко не всегда https://www.google.ru/search?q=php+демон&oq=php+де...

А не разделить ли мне эти процессы по разным серверам - смысла в этом нет, по крайней мере на начальных этапах разработки, имхо

Как бы вы реализовали общение между этими серверами? - я думаю тут не стоит изобретать велосипед, достаточно будет использовать БД

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

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

В дальнейшем придумаю визуальную оболочку всему этому - что под этим понимается? Если 3d то это сразу я вам скажу гиблое дело.

Подвожу итог! Затея бесмысленная и пользы от нее будет 0, лучше займитесь изучением Unity или Unreal Engine и окунитесь с головой в game dev если вы действительно хотите создать что-то более менее интересное.

P.S не являюсь экспертов в каких либо областях, а высказываю свое субъективное мнение которое может быть ошибочным
Ответ написан
@AnotherStar
Я бы такой проект для самого себя начал со статичной странички с канвасом, на котором каждый пиксель — единица координат (вид сверху). На JavaScipt можно написать класс для деревьев, с примерно таким набором функций: растёт, в зависимости от времени года (суток) размножается (разбрасывает семена).
В этом случае получим бесконечно размножающаяся систему, в которой необходимо создать ограничивающий фактор: долголетие и возобновляемый ресурс (вода) и пространство для роста (солнечного света низким деревьям не хватает). Уже этих трёх факторов влияния хватит, чтобы посмотреть как работает экосистема, подобрать константы (а лучше диапазоны рандомных переменных), в которых система живёт.
Таким образом появится некий естественный отбор, в рамках которого можно будет видеть явное преобладание больших над маленькими и так далее..
Писать сразу большой проект, в котором попробовать учесть всё что только можно — нереально, т.к. часто вашу задумку придётся обходить хардкодом и хаками.
Ответ написан
Griboks
@Griboks
Гуглите "как создать ртрпг", "как написать ИИ для рпг", "как делать игры", "математическое моделирование". На основе этого начинаете строить свой мир (с архитектуры). Понимаете, что вы не можете это сделать, забрасываете. Через некоторое время возвращаетесь к работе, переписав половину кода. И так будет повторятся бесконечно долго, пока вы не напишете себе тз. Без тз ваш мир никогда не будет закончен, ибо ваш мозг будет придумывать всё новые фишки, при реализации предыдущих. Таким образом, вы не сможете удовлетворить себя в ближайшем будущем.

Как только сделаете игру, продайте её мейлу.

И не стоит разделять всё по серверам. Вообще, не стоит реально воспроизводить все действия. Первостепенным является ввод-вывод.
Ответ написан
lxsmkv
@lxsmkv
Test automation developer
Вот инструмент для разработки игр и десктопных программ на PHP develnext.org/ru
Начните с написания диздока. В нем кроме всего прочего описана механика игры в мельчайших подробностях. Без него вы закопаетесь в коде по уши и никогда не закончите свой проект.
Насчет клона игры Жизнь для разминки, тоже согласен. Чтобы понять как работает подобная симуляция.
Сложность на мой взгляд в императивном описании поведения каждого агента и мира.
Хотите поэкспериментировать с агентным моделированием, попробуйте NetLogo.
Ответ написан
CityCat4
@CityCat4
Жил да был CityCat за углом...
Не нужно сразу кидаться выбирать ЯП, базу и прочее. Сначала нужно описать механику взаимодействия всего этого друг с другом вплоть до самых подробностей - сверху, от крупных модулей до самого низа, где рассчитывается вероятность того, что у пары юнитов родится мальчик или девочка :)
Не имея такого описания, Вы постоянно будете путаться - потому что размер проекта не маленький
Ответ написан
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Так же важной частью реализации станет экономика.

Все пять лет учёбы на экономическом факультете я представлял экономику, как аппарат с тысячей ручек, поворачивание каждой из которых изменяет положение всех остальных на некоторый мало предсказуемый угол, а суть профессии в том, чтобы добиться идеального положения всех ручек одновременно. Спустя годы работы в области автоматизации торговли и банковского дела я понял, что мои представления были слишком оптимистичны. Удачи.
Ответ написан
DollyPapper
@DollyPapper
Господи насоветовали ему всякого, архитектуру продумай, то продумай, сё продумай. Человек вон жалуется мол, нахуа мне эта ваша математика нужна, неужели нельзя попроще. репортим и расходимся, это некропост.
Ну а если все же натравите крон на свою игру, то в ближайшем апдейте завезите огробления корованов.
Ответ написан
razumkov2015
@razumkov2015
"Программист" https://vk.com/cgs_game
Php тут точно плох, а вот node.js. Скачиваете pm2, запускаете jsник и он 24/7 работает. Там уже можно всю логику прописывать, cron тут вообще не нужен. Сервер берите 1, но подороже.
Ответ написан
MDiMaI666
@MDiMaI666
Талантливый программист
Я бы реализовал такой мир на основе генного алгоритма для начала.
Сделать геном , похожий на микроб например
https://m.habrahabr.ru/post/154387/
А дальше уже поймёте что надо будет сделать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы