我只是更新代码,以便在我的Highscore列表中显示我尝试使用Vector的最新更新。我拿出了矢量语句,但我知道这一点,完全适用于从文本文件中写入和读取。注意 - 我为一个人更新此代码的任何新读者都可以观察我的新代码
// Get the scores from the game
int getHighscore()
{
ShowConsoleCursor(true);
HANDLE hOut;
hOut = GetStdHandle( STD_OUTPUT_HANDLE );
fstream file;
file.open("Highscores.txt", ios::out | ios::app);
if(file.good()==true) {
string TextLimit;
TextLimit = charLimit();
file << TextLimit;
for(int a=0; a<=40-TextLimit.length(); a++) {
file<<" ";
}
file<<Killed<<endl;
file.close();
}
ShowConsoleCursor(false);
return 0;
}
// Displays the scores from the game
void HighscoreResults()
{
system("cls");
fstream file;
file.open("Highscores.txt", ios::in);
if(file.good()==true)
{
string p1Name;
SetColor(11);
CPos(1,15); cout << " _ _ _ _ \n";
CPos(2,15); cout << " | | | (_) __ _| |__ ___ ___ ___ _ __ ___ ___ \n";
CPos(3,15); cout << " | |_| | |/ _` | '_ \\/ __|/ __/ _ \\| '__/ _ \\/ __| \n";
CPos(4,15); cout << " | _ | | (_| | | | \\__ \\ (_| (_) | | | __/\\__ \\ \n";
CPos(5,15); cout << " |_| |_|_|\\__, |_| |_|___/\\___\\___/|_| \\___||___/ \n";
CPos(6,15); cout << " |___/ \n";
CPos(7,10); SetColor(10);
cout << " ------------------------------------------------------------";
CPos(9,15); SetColor(14);
cout << " Names:\n";
CPos(9,50);
cout << " Zombies Killed:\n"; SetColor(15);
while(getline(file, p1Name))
{
cout << " " << p1Name << endl;
}
file.close();
}
else
{
cout<<"The file cannot open!";
system("pause >nul");
}
}
// Makes where only a 8 char can be entered when entering a name
string charLimit()
{
int characters=-1;
char text[10];
int Button;
string TextLimit;
while(true)
{
// Clears the name when backspaced
CPos(20, 13);
cout<<" ";
CPos(20, 13);
cout<<" Name: ";
// Puts a limit on the characters of the text
for(int a=0; a<=characters; a++)
{
cout<<text[a];
}
Button = getch();
if(Button==13 && characters>0)
{
for(int a=0; a<=characters; a++)
{
if(text[a]!=' ') TextLimit = TextLimit + text[a];
}
return TextLimit;
}
if(Button==8 && characters>=0)
{
text[characters] = ' ';
characters--;
}
else if(Button!=8 && characters+1<=9)
{
characters++;
text[characters] = Button;
}
}
}
答案 0 :(得分:0)
您需要在保存之前对矢量进行排序。 std::sort方法可用于您的目的,如下所示:
std::sort (SS.begin(), SS.end());
这将对SS进行排序。如果您希望将SS保持在无序状态,则应首先创建它的副本,然后对副本进行排序。 (虽然我不确定为什么你想要在无序向量中获得高分。)
您有评论建议您在某处对kill值进行排序,但似乎没有完成。
另外,当你填充矢量时,我不确定你要做什么。你没有包含Killed的类型(虽然我假设它是一个int,因为你试图将它添加到你的向量时会得到一个编译器错误),但是你只需要将一个int推送到SS一次你的代码。
根据您的新编辑,我认为您正在以错误的方式使用高分文本文件。你似乎并没有真正参考游戏过程的高分。相反,您将每个游戏的结果附加到文件,然后将文件的内容打印为高分。以下是我认为您应该这样做的方式:
阅读程序开头的高分,将每个分别存储在Score
结构中,其中包含字符串或char []名称和int kill。将其中的每一个存储在矢量类字段中。在填充后,将此向量从大到小排序。 (这将要求您为std::sort()
电话实施比较器,请查看我链接到您的指南。)
当玩家的游戏结束时,构建一个乐谱并将其添加到vector<Score>
。如果你想在棋盘上获得最多分数(你可能应该这样),你应该检查vector
中的最后一个元素(例如具有最少杀戮的Score
对象)是否少了杀死比最近的游戏。如果是,则删除最后一个元素,为当前游戏添加Score
对象,然后再次排序。清空乐谱文件并遍历vector<Score>
,写下姓名并在一行上杀死。
目前,您的SS矢量甚至无法保存玩家的名字。
答案 1 :(得分:0)
class player{
string name;
int score;
}
vector<player> players;
您没有对列表进行排序。您需要在存储之前对矢量进行排序。因此,每当您push_back
项目时,您都需要使用std::sort();
再次排序。