簡體   English   中英

C ++記分牌困難時期

[英]C++ Scoreboard hard time

大家好,stackoverflow大家好,這真的很難,一直在折磨我的大腦。 我必須要做的是在多人服務器端計分板。 基本上有10個客戶端連接到我的服務器應用程序,在此事件中,每當一個玩家殺死另一個玩家時,他的殺死增加,每個連接到服務器的玩家都有一個類指針

class CUser
{
(...)
    public:
    unsigned m_uEventKills;
    unsigned m_uEventDeaths;
(...)
};

每當有人殺死某人和辦公室時,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 ));
    (...)

Organize max必須填充nMax,從所有連接的用戶(他們都擁有一個指向CUser的指針)中讀取0到9(十個頂級用戶)-> 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];

以降序排列,我該怎么做?

第一個絕妙的主意:避免使用原始的C樣式數組,它們對您幾乎沒有錯誤檢查...無法動態調整大小...並且即使您正確使用它們,也無法在性能方面真正為您提供太多幫助。

std :: vector很好,如果您覺得必須, std :: array )。

第二個絕妙的主意:使用已經編寫的排序算法,例如std :: sort

我不使用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號(或類似的名稱)以跟蹤哪個用戶,而不管當前他們排列的順序。

編輯:

要將a ... j中的int s值僅按升序獲取到nHold中,您可能只想按其現有順序插入它們,然后進行排序:

nHold[0] = a;
nHold[1] = b;
//...
nHold[9] = j;

std::sort(nHold, nHold+9);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM