#include "Highscore.h" Highscore::Highscore() { scores = new TStringList(); } bool Highscore::sendeScore(int pScore, AnsiString pName) { return schreibeScore(pScore,pName); } AnsiString Highscore::gibName(int pPlatz) { return leseName(pPlatz); } int Highscore::gibScore(int pPlatz) { return leseScore(pPlatz); } int Highscore::berechneChecksumme(int pScore, AnsiString pName) { int length = pName.Length(); int check[2]; char *temp = new char[pName.Length()+1]; strcpy(temp, pName.c_str()); check[0] = temp[length]; check[1] = temp[0]; delete [] temp; int quersumme=0; while(pScore > 0) { quersumme += pScore % 10; pScore /= 10; } return quersumme%10+(check[0]+check[1])%10; } bool Highscore::ueberpruefeChecksumme(int pScore, AnsiString pName, int pChecksumme) { if(berechneChecksumme(pScore,pName) == pChecksumme){ return true; }else{ return false; } } int __fastcall Sortieren(TStringList *list, int Item1, int Item2) { AnsiString temp1,temp2; int pos; temp1 = list->Strings[Item1]; pos = temp1.Pos(";"); temp1 = temp1.SubString(0,pos-1); temp2 = list->Strings[Item2]; pos = temp2.Pos(";"); temp2 = temp2.SubString(0,pos-1); int t1,t2; t1 = StrToInt(temp1); t2 = StrToInt(temp2); if(t1==t2){ return 0; }else if(t1>t2){ return -1; }else{ return 1; } } bool Highscore::schreibeScore(int pScore, AnsiString pName) { int count = scores->Count; if(pScore > leseScore(count-1)){ while(count>9){ scores->Delete(count-1); count--; } int checksumme = berechneChecksumme(pScore,pName); scores->Add(IntToStr(pScore)+";"+pName+";"+IntToStr(checksumme)+";"); scores->CustomSort(Sortieren); scores->SaveToFile("system/highscore.kb"); } return true; } AnsiString Highscore::leseName(int pPlatz) { AnsiString temp; int pos; int count = scores->Count; if(pPlatzStrings[pPlatz]; pos = temp.Pos(";"); temp = temp.SubString(pos+1,temp.Length()); pos = temp.Pos(";"); temp = temp.SubString(0,pos-1); return temp; }else{ return "error"; } } int Highscore::leseScore(int pPlatz) { AnsiString temp; int pos; int count = scores->Count; if(pPlatzStrings[pPlatz]; pos = temp.Pos(";"); temp = temp.SubString(0,pos-1); if(temp!=""){ return StrToInt(temp); }else{ return -1; } }else{ return -1; } } int Highscore::leseChecksumme(int pPlatz) { AnsiString temp; int pos; int count = scores->Count; if(pPlatzStrings[pPlatz]; pos = temp.Pos(";"); temp = temp.SubString(pos+1,temp.Length()); pos = temp.Pos(";"); temp = temp.SubString(pos+1,temp.Length()); pos = temp.Pos(";"); temp = temp.SubString(0,pos-1); if(temp!=""){ return StrToInt(temp); }else{ return -1; } }else{ return -1; } } void Highscore::ueberpruefeHighscores() { int count = scores->Count; for(int i=0; iDelete(i); count--; } } scores->SaveToFile("system/highscore.kb"); } void Highscore::ladeHighscores() { scores->Clear(); if(FileExists("system/highscore.kb")){ scores->LoadFromFile("system/highscore.kb"); } }