C++记分牌艰难时期

C++ Scoreboard hard time

本文关键字:记分牌 C++      更新时间:2023-10-16

大家好,再次堆叠溢出的人,这真的很难,它一直在折磨我的大脑。我必须做的是,一个多人服务器端记分牌。基本上有 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];

按降序排列,我该怎么做?

而不是使用 ab ...f,我会使用CUserstd::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。