C++记分牌艰难时期
C++ Scoreboard hard time
大家好,再次堆叠溢出的人,这真的很难,它一直在折磨我的大脑。我必须做的是,一个多人服务器端记分牌。基本上有 10 个客户端连接到我的服务器应用程序,在此事件中,每次玩家杀死另一个玩家时,他的杀戮都会增加,连接到服务器的每个玩家都有一个类指针
class CUser
{
(...)
public:
unsigned m_uEventKills;
unsigned m_uEventDeaths;
(...)
};
每次有人杀死某人和 ofc 时,m_uEvenKills都会增加,m_uEventDeaths死亡玩家也会增加。想象一下,玩家a,b,c,d,e,f他们每个人都有随机击杀(a,b,c,d...是指向CUser的指针),所以:
a->m_uEventKills is 72
b->m_uEventKills is 13
c->m_uEventKills is 2
d->m_uEventKills is 44
e->m_uEventKills is 21
f->m_uEventKills is 33
和死亡的随机值。
我有这个:
int nMax[10];
void OrganizeMax()
{
memset( &nMax, 0, sizeof( nMax ));
(...)
组织最大值必须填充 nMax,从 0 到 9(10 个顶级用户)从所有连接的用户(他们都拥有指向 CUser) ->m_uEventKills 的读数,并设置为 nMax[0] 击杀次数最多的用户,nMax[1] 击杀次数最多的第二个,nMax[2] 击杀次数最多的用户,依此类推......关于如何做到这一点的任何大胆想法?
-编辑
我会更简单,我有 10 个变量。
int a,b,c,d,e,f,g,h,i,j;
a = 3;
b = 61;
c = 29;
d = 44;
e = 12;
f = 8;
g = 27;
h = 11;
i = 0;
j = 4;
我需要将这些变量插入
int nHold[10];
按降序排列,我该怎么做?
而不是使用 a
, b
...f
,我会使用CUser
的std::vector
(顺便说一句,我不喜欢CUser
作为类名):
std::vector<CUser> users;
如果这是您关心的用户的唯一顺序,我会将排序定义为CUser
类的一部分:
class CUser {
// ...
bool operator<(CUser const &other) const {
return m_uEventKills < other.m_uEventKills;
}
};
然后,当您需要将用户按正确的顺序排序时,您可以执行以下操作:
std::sort(users.begin(), users.end());
但是,您可能需要在CUser
类中添加一个 ID 号(或类似的东西),以跟踪哪个用户是哪个用户,而不管他们目前碰巧排列的顺序如何。
编辑:
要只获取int
的值...j 按升序插入nHold
,您可能只想按现有顺序插入它们,然后排序:
nHold[0] = a;
nHold[1] = b;
//...
nHold[9] = j;
std::sort(nHold, nHold+9);
第一个绝妙的想法:避免使用原始的 C 样式数组,它们对你几乎没有错误检查......无法动态调整大小...即使你做对了,在性能方面也不要真正帮助你。
(std::vector 很好,std::array 如果你觉得你必须的话)。
第二个绝妙的想法:使用已经编写好的排序算法,例如std::sort。