Open Battle.net is your friend.
That supplies absolutely no insight whatsoever, please don't post anymore.
I would look at the STL Containers for c++. Take a look at your options. Depending on the purpose of coding this, you could look for speed, efficiency, or just knowledge. After taking a look at the STL containers, you could always store some sort of write/readable file on your harddrive to keep track.
I did something similar, but never kept track of the enemies kills, and I chose to use the Vector to accomplish it.
It is very basic, has no specific ordering other than a linear progression of slayings. The most advanced feature is the ability to cycle through the vector and increment the slaying of the same character. IE if you killed ten people, then the first person you killed decided to return to the game, it would find that character and give it a +1 to the kill count.
Here is what I did before I was finally bored with my project. Hope it helps someway.
///////////////////////////////////////////////////////////////////////////////////////////
// In Game Kill List v1.0 //
///////////////////////////////////////////////////////////////////////////////////////////
#include <vector>
using namespace std;
std::vector<std::string> Names; // Player Names
vector<string> Games; // Game Player Slain
vector<int> Levels; // Player Levels
vector<int> KillCounts; // Amount Slain
// Iterators
vector<string>::iterator nSlot;
vector<string>::iterator gSlot;
vector<int>::iterator lSlot;
vector<int>::iterator kSlot;
//
bool stringCompare( const string &left, const string &right ) // Custom string compare.
{
int i = 0;
for( string::const_iterator lit = left.begin(), rit = right.begin(); lit != left.end() && rit != right.end(); ++lit, ++rit )
{
if( tolower( *lit ) == tolower( *rit ) )
continue;
i = 1;
}
if (i == 0)
return true;
return false;
}
void PrintKillList()
{
int pos = 0;
Speak("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
Speak("@@@@@@@@@@@@ BMPK KILL LIST @@@@@@@@@@@@@@");
Speak("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
Speak("VICTIM LEVEL KILLCOUNT GAMESLAIN");
for (nSlot = Names.begin(),gSlot = Games.begin(); nSlot != Names.end() ; nSlot++,gSlot++,pos++)
Speak ("%s %d %d %s",nSlot,Levels[pos],KillCounts[pos]/*,KillCounts[i] > 1 ? "times" : "time"*/,gSlot);
}
bool CheckDuplicate(string Name,string GameName,int Level)
{
int pos = 0;
char buffer1[50];
char buffer2[50];
for (nSlot = Names.begin(); nSlot != Names.end() ; nSlot++,pos++)
{
sprintf(buffer1,"%s",nSlot);
if ( stringCompare(buffer1,Name) ) // Slain character matches an input
{
for(gSlot = Games.begin(); gSlot != Games.end(); gSlot++) // Try to match the character with the same game name and update kill
{
sprintf(buffer2,"%s",gSlot);
if ( stringCompare(buffer2,GameName) )
{
KillCounts[pos]++;
return true;
}
}
}
}
return false;
}
void Insert(char* Name,char* GameName,int Level)
{
if (!CheckDuplicate(Name,GameName,Level))
{
Names.push_back(Name);
Games.push_back(GameName);
Levels.push_back(Level);
KillCounts.push_back(1);
}
}
There are always much, much better ways to achieve the same goal, all you can do is take examples, learn, and improve.
Good luck!