Это онлайн-игра, и мне заплатили за реализацию игрового события, которое является игровой системой Player and the Player.Лучше ли сортировать сервер и распространять его на клиентов или отправлять несортированные и разрешать клиентам сортировать его?
В моем проекте у меня есть класс на стороне сервера (с именем PvpEventManager
, который является менеджером событий, и он обрабатывается, когда игрок убивает другого, когда игрок присоединяется или покидает событие, будь то по решению, будучи отключенным .. .etc, и имеет много других функций.
Теперь этот класс также содержит контейнер с информацией о игроке во время события (по имени vPlayerInfo
) для всех видов обработки. Когда игрок убивает кого-то другого, его kill
должен быть и жертва death
тоже, совершенно очевидно. Но также случается, что у клиентов есть табло, и поскольку это задача сервера обрабатывать убийство и сообщать всем другим клиентам, связанным с событием об этом, контейнер получит обновлено.
Необходимо, чтобы контейнер был отсортирован с kill
элементом структуры от возрастания до убыточного так, чтобы табло можно было визуализировать (на клиенте) правильно.
Что было бы лучше?
- Чтобы сортировать контейнер на сервере, увеличивая работу сервера и отправляя уже отсортированный контейнер готового к отображению на экране всем клиентам.
- Чтобы отправить контейнер без сортировки и пусть каждый подключенный клиент игры сортирует сам контейнер при его получении.
Обратите внимание, что сервер обрабатывает тысячи и тысячи пакетов входящих и исходящих каждый тик и действительно обрабатывает МНОГО, много другого материала.
Это несколько описывает конструкцию этого:
Этот код описывает то, что делается при сортировке контейнера на части фактического кода.
#include <iostream>
#include <array>
#include <vector>
#include <map>
#include <algorithm>
struct PlayerScoreBoardInfo
{
std::string name;
unsigned int kill, death, suicide;
unsigned int scorestreak;
PlayerScoreBoardInfo()
{
kill = death = suicide = scorestreak = 0;
name = "";
}
explicit PlayerScoreBoardInfo(std::string strname, unsigned int nkill, unsigned int ndeath, unsigned int nsuicide, unsigned int nscorestreak) :
name(strname), kill(nkill), death(ndeath), suicide(nsuicide), scorestreak(nscorestreak)
{
}
};
class GameArenaManager
{
private:
GameArenaManager() {}
public:
std::map<u_long, PlayerScoreBoardInfo> m_Infos;
public:
static GameArenaManager& GetInstance()
{
static GameArenaManager InstanceObj;
return InstanceObj;
}
};
template <typename T1, typename T2> inline void SortVecFromMap(std::map<T1,T2>& maptodosort, std::vector<T2>& vectosort)
{
std::vector<T1> feedvector;
feedvector.reserve(maptodosort.size());
for(const auto& it : maptodosort)
feedvector.push_back(it.second.kill);
std::sort(feedvector.begin(), feedvector.end(), std::greater<T1>());
for(const auto& itV : feedvector) {
for(const auto& itM : maptodosort) {
if(itM.second.kill == itV) {
vectosort.push_back(itM.second);
}
}
}
}
int main()
{
GameArenaManager& Manager = GameArenaManager::GetInstance();
PlayerScoreBoardInfo info[5];
info[0] = PlayerScoreBoardInfo("ArchedukeShrimp", 5,4,0,0);
info[1] = PlayerScoreBoardInfo("EvilLactobacilus", 9,4,0,0);
info[2] = PlayerScoreBoardInfo("DolphinetelyOrcaward", 23,4,0,0);
info[3] = PlayerScoreBoardInfo("ChuckSkeet", 1,4,0,0);
info[4] = PlayerScoreBoardInfo("TrumpMcDuck", 87,4,0,0);
for(int i=0; i<5; i++)
Manager.m_Infos.insert(std::make_pair(i, info[i]));
std::vector<PlayerScoreBoardInfo> sortedvec;
SortVecFromMap(Manager.m_Infos, sortedvec);
for(std::vector<PlayerScoreBoardInfo>::iterator it = sortedvec.begin(); it != sortedvec.end(); it++)
{
std::cout << "Name: " << (*it).name.c_str() << " ";
std::cout << "Kills: " << (*it).kill << std::endl;
}
return 0;
}
Вот ссылка для ideone скомпилированного кода: http://ideone.com/B08y9l
И одна ссылка для Wandbox в случае, если вы хотите редактировать компилировать на реальном времени: http://melpon.org/wandbox/permlink/6OVLBGEXiux5Vn34
Это очень умные высказывания, он имеет полный смысл, клиент должен отсортированный один и сервер не делает! Большое спасибо. –
Да, я знал, что люди будут слишком критиковать этот вопрос, но, что ж, это настоящий проблемный вопрос, включает в себя дизайн и проблему программирования, и самое главное, я бы не прочитал эти превосходные аргументы, если бы я не спросил об этом , –
@ViniyoShouta, если игра прошла успешно, вы знаете, кому кредит! ;-) –