kkolyan
Добрый вечер! Спасибо за ответы.
Привязка к php так как я его сейчас изучаю, не хочется пока что распыляться на другие языки.
В перспективе конечно хотелось бы полноценную игру создать, с боями пошаговыми, квестами, с передвижением по локациям как выше я писал и так далее. То есть если не задать правильную основу, то почти со 100% вероятностью придется всё переписывать в перспективе что бы была возможность спокойно расширять функционал. По этому промелькнула идея для начала взять готовые наработки что бы хотя бы передвижение по миру было нормально сделано и была возможность подсматривать в готовую логику.
JanCarlo
> То есть если не задать правильную основу, то почти со 100% вероятностью придется всё переписывать в перспективе
вы 100% будете переписывать то, что пишете сейчас. много раз переписывать. это нормально. лучше делайте так, как сейчас удобно. быстрее сделаете - быстрее получите опыт и быстрее научитесь делать лучше.
PS: язык, которые вы изучаете, традиционно очень тесно связан с парадигмой "быстрее в продакшен, там что-нибудь придумаем". не буду пытаться вас отговорить, но если уж изучать технологию, то лучше следовать ее идеологии.
Добрый день господа!
Руки дошли до проекта вот в принципе пару дней назад только. Реализовал переходы как посоветовали по координатам x/y/z, сделал контроллер (делаю на ларавеле, что бы уж сильно всё с нуля не пилить) который внутри сам, в зависимости от переданного параметра направления - плюсует или минусует вектор направления, проверяет существует ли по новой координате комната - и если существует, делает переход и записывает в юзера. Для юзера направления движения выглядят как активная ссылка для перехода которую можно клацнуть, и если перехода нет то ссылка в виде текста некликабельная.
В бд есть 2 таблицы - юзеры и комнаты. У таблицы юзера поля - login, pass, email, created_at, updated_at, current_room_id.
У таблицы rooms в принципе всё просто, поля - x, y, z, name, description.
Получается теперь так, что если у нас, к примеру 3 локации тянутся вперед, образно коридор - первая локация - x1/y1/z1, вторая x1/y2/z1, третья - x1/y3/z1 - всё логично (влево вправо это ось x, вперед назад y, вверх вниз - z). Допустим мы хотим добавить в конце коридора поворот на право и такой же коридор обратно, делаем - поворот - x2/y3/z1, далее так же идем обратно - x2/y2/z1, x2/y1/z1.
При данной структуре базы данных, на данный момент эти 6 локаций получились БЕЗ стен, то есть это не коридор буквой П, а просто большая комната из 6 локаций.
Первый вопрос - как структурировать базу данных, так, что бы можно было добавлять стены с любой стороны у самой локации?
Технически реализовать то думаю не сложно, сложно придумать что бы это было грамотно.
В кратце что бы можно было реализовать так -
И из первого вопроса у меня сразу образуется второй -
По задумке, в определенных местах игрового мира будут локации, в которых к примеру 3 кубических клетки, ну получается куб с ребром в 3 клетки (всего 27 клеток в кубе). В этом кубе не будет ни одной стены (ну кроме границ самого куба). То есть можно спокойно перемещаться по всем этажам куба во всех направлениях. И теперь самое главное - локации в кубе должны рандомно перемещаться со временем. То есть, к примеру, самая южная крайняя правая верхняя комната куба перемещается прямо в центр куба, а центр куба переезжает в тот самый угол.
Получается, что в принципе координаты у комнат остаются прежние, но ID локаций просто меняются местами (и тут кстати я еще не думаю, как primary key можно переприсваивать). НО, если реализовывать логику стен, (я сначала предполагал что таблица комнат будет содержать помимо координат еще и доступные направления типа - south - allowed, west - disallowed, up - allowed, down - disallowed ну и тд) то при перемещении комнат должны так же меняться еще и стены - тут короче говоря у меня мозг начал вытекать из ушей и носа.
Кто то может подсобить советом по этим двум вопросам? =)
Заранее спасибо!
каждая комната это отдельный пхп файл
ИПавлов
Комнат будет несколько тысяч..
значит в этойже самой бд в отдельом поле свойства в текстовом виде всякие теги свойств и значений потом парсятся в пхп для каждой комнаты.
а ещё в отдельной базе хранятся различные возможное свойства комнат. и из этого перечня они могут случайным образом вписываться в свойства комнат текущей игры.
однако если нужно делать уникальные комнаты, у них будет уникальный пхп. а свойсвах будет написано шота такое. уникумрум=ид12
JanCarlo
> так, что бы можно было добавлять стены с любой стороны у самой локации?
сам спросил
> и доступные направления типа - south - allowed, west - disallowed, up -
> allowed, down - disallowed ну и тд
сам ответил.
Table MAP
ID,
coord (можно как число, можно как три числа), coord_x, coord_y, coord_z
location_id (принадлежность к той или иной карте)
Table LOCATION
ID,
location_name,
location_neighbor (можно через json список. Ну то есть сделать это полем строкой и указать и куда мы можем переходить и координаты ячеек)
покажеш потом реализацию. тоесть итог. на реализацию мне пофиг. а вот будет ли чтото работать просто интересно)
Обязательно, сейчас можно бегать по комнатам, телепорт сделал. В целом начало положено)) сегодня соберу всю информация с вашими советами по организации базы, стен и прочего, начну дальше пилить наверно на выходных.
Первым делом сделаю рандомное перемещение комнат по таймингу (пока даже не представляю как, это поидее по крону надо как то создавать задачи) в строго определённом пространстве.
Далее добавлю рандомные ловушки во время перемещения по локациям.
И последнее добавлю стены для статических локаций, который не будут двигаться.
Надеюсь уложусь в неделю следующую, может даже быстрее чуток.
как ты создаёшь карты, или где их берёшь?
ты уже сделал "тонкие стенки" между комнатами-клетками?
как ты сейчас хранишь комнаты в базе?
будешь выкладывать демо-версию хождения по комнатам?
Стенок пока нет, вот их как раз буду пилить завтра, вручную накидал сидер и при миграции сразу 40 локаций базовых добавляются.
Локации элементарно храняться под уникальным айди, координаты x/y/z, при перемещении по ним через контроллер плюсуются вектора направления на +1. Таким образом левым гет запросом невозможно будет перепрыгнуть локации. Вообще локации придумываю из головы, хочу уникальный проект сделать а не пресловутые клоны.
Написал в админке добавление локации удаление/модификацию. Конечно по одной локе добавлять это такое себе занятие, по этому как будет готова структура базы - то либо закажу конструктор либо сам пилить буду. Вообще есть готовый конструктор, но он навороченный и на php 5.1 и на mysql, п у меня postgresql. И к сожалению я пока не настолько умен что бы старый чужой код адаптировать под пхп8 :(
супер мега пре пре пре пре пре альфу выложу обязательно на показ, что бы поклацать можно было. Если дело пойдет то будет тестовая группа ну и как полагается все
Но базу локаций я буду переделывать, координаты оставлю но будет добавлен алгоритм перемещения локаций, присвоение локаций юзера - типа за монеты можно локи купить будет ну и еще много переделается
JanCarlo
Приветствую! Возможно, эти ссылки вас заинтересуют.
https://www.prelude-prod.fr/demo/pp3diso
http://www.isogenicengine.com
Простой пример на основе pp3diso у меня на сайте http://vox.dx.am/builder (в качестве бд текстовые файлы).
Пример с использованием firebase (бд реального времени) http://vox.dx.am/puzzle Откройте ссылку в двух браузерах и перемещайте картинки.
Alexand3r
Добрый день, глянул. Не совсем то, но спасибо. Собственно я уже реализовал первичное хранение, передвижение и так далее. К слову - карта у меня без графики, только переходы по векторам. Как готовы будут стены то сделаю мини карту под аватаркой юзера для удобной ориентации в пространстве - будет карта с радиусом на 3 комнаты во все стороны
С разметкой не запаривался еще, потом поправлю -
Графика будет у абсолютно всех предметов, ключевых монстров, ключевых нпц, и аватарки игроков заранее готовые. Плюс возможно ключевые местности будут иметь картинки.
Уже забыл что что тут тему создавал))
В общем разработка была остановлена как раз тем летом, в августе. Сейчас снова продолжается)
Переписываю старое пока что. Пока функциональный код только =(