Я работаю над RPG на основе PHP, в котором игрок перемещается по карте сетки. Мои карты определяются с помощью двумерной матрицы, причем каждое значение является 21 символьной строкой букв и цифр. Эта строка является закодированным значением, которое сообщает игре, что происходит на этой плитке, и дает мне широкий спектр опций для дополнительных функций в будущем. Я считал, что для этого значения используют только целые числа, но я решил, что хочу сохранить некоторую удобочитаемость карт, чтобы я мог еще следить за файлами.
В настоящее время я вывожу карту с помощью скрипта создания карты в CSV файл, затем класс движения игрока открывает этот файл карты, находит текущие координаты игроков и перемещается в направлении, указанном игроком.
Мои текущие размеры карт превышают 200х300 плиток, каждая плитка содержит это значение сетки (AAAAB111CCC2222223333); однако я хотел бы сохранить возможность сделать их до 1000x1000 в будущем (больше, чем это, вероятно, будет видеть карты для регионов всего мира).
Я храню координаты игрока в базе данных о состоянии пользователя, поэтому я просто буду читать строки карты.csv, которые были в пределах диапазона движения игрока, и не допустить, чтобы вся карта загружалась в переменную каждый раз, когда игрок перемещается. Однако это все равно может быть сеткой 11x1000 с этими 21 символьными кодами в каждой плитке. После нахождения результата каждого движения я отключу массив.
Даже с моими мерами предосторожности я обеспокоен тем, что это станет слишком большим бременем для ресурсов в будущем, если многие пользователи будут играть одновременно, и мне интересно, следует ли вместо этого хранить информацию о карте в базе данных.
Остальные данные моего пользователя и игры хранятся в нескольких больших базах данных. Когда я начал работать над своей игрой, я не думал, что эти наборы данных сетки карт были достаточно сложными, чтобы гарантировать, что они будут помещены в их собственную базу данных, и казалось, что использование массива для перемещения было бы простым ($location[$x][$y]
). Тем не менее, теперь мне интересно, будет ли использование CSV файлов повреждать мою работу или нет.
Чтение файла, безусловно, будет больше работать с csv, особенно если вы увеличите размер карты. Проблема, которую я вижу при использовании только частей csv для загрузки, вам все равно придется анализировать данные, чтобы получить координаты игроков x, y. После (или в то же время) разбор каждой строки, чтобы узнать, включен ли она в ближайший набор игроков.
И, как вы говорите, вы ожидаете больше игроков со временем. Количество прочитанных чтений дисков, необходимых для открытия/разбора файла, будет быстро расти и вызывать проблемы, если у вас нет какой-либо формы кеширования.
Итак, я бы сказал, пойдите с базой данных, и чем скорее, тем лучше. Как да, использование csv может повредить производительность.