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