Будет ли использование массива для листов карты в веб-игре таким образом слишком ресурсоемким?

0

Я работаю над RPG на основе PHP, в котором игрок перемещается по карте сетки. Мои карты определяются с помощью двумерной матрицы, причем каждое значение является 21 символьной строкой букв и цифр. Эта строка является закодированным значением, которое сообщает игре, что происходит на этой плитке, и дает мне широкий спектр опций для дополнительных функций в будущем. Я считал, что для этого значения используют только целые числа, но я решил, что хочу сохранить некоторую удобочитаемость карт, чтобы я мог еще следить за файлами.

В настоящее время я вывожу карту с помощью скрипта создания карты в CSV файл, затем класс движения игрока открывает этот файл карты, находит текущие координаты игроков и перемещается в направлении, указанном игроком.

Мои текущие размеры карт превышают 200х300 плиток, каждая плитка содержит это значение сетки (AAAAB111CCC2222223333); однако я хотел бы сохранить возможность сделать их до 1000x1000 в будущем (больше, чем это, вероятно, будет видеть карты для регионов всего мира).

Я храню координаты игрока в базе данных о состоянии пользователя, поэтому я просто буду читать строки карты.csv, которые были в пределах диапазона движения игрока, и не допустить, чтобы вся карта загружалась в переменную каждый раз, когда игрок перемещается. Однако это все равно может быть сеткой 11x1000 с этими 21 символьными кодами в каждой плитке. После нахождения результата каждого движения я отключу массив.

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

Остальные данные моего пользователя и игры хранятся в нескольких больших базах данных. Когда я начал работать над своей игрой, я не думал, что эти наборы данных сетки карт были достаточно сложными, чтобы гарантировать, что они будут помещены в их собственную базу данных, и казалось, что использование массива для перемещения было бы простым ($location[$x][$y]). Тем не менее, теперь мне интересно, будет ли использование CSV файлов повреждать мою работу или нет.

  • 0
    Я буду искать конкретную базу данных, которая соответствует вашим потребностям. Например, redis очень быстро работает с шаблоном ключ-значение. Я сделал кое-что на карте, например, ваше, и каждый тайл можно рассматривать как ключ (tile_XX_YY), а значение - это 21 код, или даже больше. Таким образом, у вас также будет все постоянное в любое время, а также, если игра масштабируется, вы сможете масштабировать базы данных, потому что Redis был построен так, чтобы быть также масштабируемым.
Теги:
csv
arrays

1 ответ

0

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

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

Итак, я бы сказал, пойдите с базой данных, и чем скорее, тем лучше. Как да, использование csv может повредить производительность.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню