012
27.07.2003, 11:43 Uhr
Oliver
S2-Pixelgeneral
|
Ja, warum einfach, wenns umständlich geht
Es sollt ja kein richtiges FAQ Forum sein, das habe ich ja schon gesagt. Ich meine zum Beispiel so eine Klasse:
C++: |
// Headerdatei für Highscorlisten
#ifndef schaltera #define schaltera #include <fstream> #endif #ifndef schalterb #define schalterb #include <cstring> #endif using namespace std;
#define uchar unsigned char #define ushort unsigned short #define ulong unsigned long
#define LH_NOTFOUND 0 #define LH_OK 1 #define LH_ERROR 2
struct Eintrag { char* name; int punkte; };
void Code(char*str) { unsigned len=strlen(str); for(unsigned i =0;i<len;i++) str[i]=str[i]*-1; }
class HListe { ulong anzahl; Eintrag *eintrag;
public:
HListe() { anzahl=0; eintrag=0; }
HListe(const ulong &anz,const char* DEFAULT) { anzahl=anz; eintrag = new Eintrag[anzahl]; for(unsigned d =0;d<anzahl;d++) { eintrag[d].name = new char[strlen(DEFAULT)+1]; strcpy(eintrag[d].name,DEFAULT); eintrag[d].punkte=0; } }
HListe(HListe &vorh) { anzahl = vorh.GetSpalten(); eintrag = new Eintrag[anzahl]; for(unsigned d =0;d<anzahl;d++) { eintrag[d].name = new char[strlen(vorh.GetName(d))+1]; strcpy(eintrag[d].name,vorh.GetName(d)); eintrag[d].punkte = vorh.GetPunkte(d); } }
~HListe(){ for(unsigned i=0;i<anzahl;i++) if(eintrag[i].name) delete [] eintrag[i].name; if(eintrag)delete []eintrag;}
char* GetName(const ulong &index) { if(index <0|| index >anzahl) return "<<FEHLER>>"; return eintrag[index].name; }
int GetPunkte(const ulong &index) { if(index <0|| index >anzahl) return 0; return eintrag[index].punkte; }
ulong GetSpalten() {return anzahl;}
ulong GetPlatz(const int &PUNKTE) { for(ulong r = 0; r<anzahl;r++) { if(PUNKTE > eintrag[r].punkte) return r+1; } return 0; }
void Add(const char*nam, const int &PUNKTE) { ulong platz; for(platz =0;; platz++) { if(eintrag[platz].punkte < PUNKTE)break; if(platz == anzahl-1) return;
} for(ulong h = anzahl-1;h !=platz;h--) { if(eintrag[h].name) delete [] eintrag[h].name; eintrag[h].name = new char[strlen(eintrag[h-1].name)+1]; strcpy(eintrag[h].name,eintrag[h-1].name); eintrag[h].punkte=eintrag[h-1].punkte; } if(eintrag[platz].name) delete [] eintrag[platz].name; eintrag[platz].name=new char[strlen(nam)+1]; strcpy(eintrag[platz].name,nam); eintrag[platz].punkte = PUNKTE; }
void Save(const char *name) {
ofstream of; char*zwisch=0; of.open(name,ios::out); of << anzahl*2<<"\n"; for(unsigned i =0;i<anzahl;i++) { of << int(strlen(eintrag[i].name)*-2)<<"\n"; if(zwisch)delete [] zwisch; zwisch=new char[strlen(eintrag[i].name)+1]; strcpy(zwisch,eintrag[i].name); Code(zwisch); of << zwisch<<"\n"<<eintrag[i].punkte*-2<<"\n"; } of << anzahl << " " << (anzahl+3)*2;
of.close(); }
char Load(const char*name) { int lengen; int gleiche, gleiche2; ifstream ifs; ifs.open(name,ios::in); if(!ifs.good()){ifs.close(); return LH_NOTFOUND;} this->~HListe(); ifs >> anzahl; anzahl/=2; eintrag = new Eintrag[anzahl]; for(unsigned i = 0;i<anzahl;i++) { ifs >> lengen; lengen*=-2; eintrag[i].name = new char[lengen+1]; ifs >> eintrag[i].name; ifs >> eintrag[i].punkte; eintrag[i].punkte/=-2; for(;lengen>0;lengen--) eintrag[i].name[lengen-1]*=-1; } ifs >> gleiche>>gleiche2; if(gleiche!=anzahl||gleiche!=(gleiche2/2-3)||anzahl!=(gleiche2/2-3)) return LH_ERROR;
for(i=0;i<anzahl-1;i++) if(eintrag[i].punkte<eintrag[i+1].punkte){ifs.close(); return LH_ERROR;} ifs.close(); return LH_OK; }
HListe &operator=(HListe &vorh) { this->~HListe(); anzahl=vorh.GetSpalten(); eintrag= new Eintrag[anzahl]; for(unsigned i =0;i<anzahl;i++) { eintrag[i].name = new char[strlen(vorh.GetName(i))+1]; strcpy(eintrag[i].name,vorh.GetName(i)); eintrag[i].punkte=vorh.GetPunkte(i); } return *this; }
unsigned GetVorhanden(const char * NAME) { ulong wieviel=0; for(ulong z =0;z<anzahl;z++) { if(!strcmp(NAME,eintrag[z].name)) wieviel++; } return wieviel; }
short Prozent(const char*NAME) {
return ((GetVorhanden(NAME) / (float)anzahl *100)); }
};
|
Eine Umfrage:
entweder:
oder:
PS: Der Code ist jetzt nicht so schön formatiert. -- Demokratie ist die Diktatur der Mehrheit.
www.siedler25.org/ ( Siedler2 - Remake ) |