Spielergebnisse - Punkteberechnung c++
-
Ich brauche Hilfe bei meinem c++ Programm "Siedler-Punkterechner"
Das Problem:
ich habe bei einem StringGrid die werte ausgelesen und in einem Feld(String[]) gespeichert
jetzt möchte ich dem spieler mit der größten punktezahl 5 dem 2. 3 Punkte dem 3. 1 Punkt und dem letzten keinen Punkt
Aber! Wenn es 2 zweite plätze gibt dann sollen sie sich die punkte teilen:
4/2 = 2 jeder 2 punkteBis jetzt siehst es so aus:
for(int i=1;i<=StringGrid1->RowCount;i++){ int t = 0; for(int k=1;k < StringGrid1->ColCount;k=k+2){ if(StringGrid1->Cells[k][i]!="") { temp[t]= StringGrid1->Cells[k][i]; t++; }}Die Punktezahl sollte dann in dem feld daneben angezeigt werden
wie mache ich es jetzt am übersichtlichsten / besten ohne gleich mehrere seiten zu schreiben??
ich habe auch schon TStringList probiert
MFG SpiderX
Ps:ich benutze borland habe windows
-
Wo stehen denn die Punke drin? In dem Grid? Wie sind die geordnet? Also was sind die zeilen was sind die spalten?
Dein Code linearisiert das zweidimensionale cvells-array auf ein eindimensionales array temp[].
Schreib mal nochmal genau, wo Punkte stehen und was sie bedeuten.Und wieso willst du dem spieler mit den meisten punkten 5 punkte geben? sind das dann andere punkte als die die er schon hat?
-
eis ist so angeordent:
Datum || Spieler 1 SiegPunkte || Spieler 1 Punkte || ....
und jede zeile ist ein neues spielbei siedler ist es so das die spieler unterschiedliche punkte am schluss haben.
Ich habe dann die siegpunkte und muss/darf die punkte rausbekommen.
Mit 14 punkten hat man gewonnen.Also bekommt der erste in der Wertung 5 punkte.
der zweit 3 punkte usw.
ja es ist ein string grid.
-
dann würd ich dir erstmal empfehlen, die Punkte die im stringgrid stehen als erstes in eine besser verarbeitbare datenstruktur zu überführen, zB
struct Spieler { int SpielerNr; int Punkte; }; std::vector<Spieler> punkte;Dann kannst du dir noch einen operator < schreiben der zwei spieler anhand der punkte vergleicht.
dann geht zB
std::sort(punkte.begin(), punkte.end());Dann hast du die punkte schon sortiert. Der erste bekommt 5 punkte, der zweite 3 usw.
Und zurückschreiben in das stringgrid
-
danke fur die antwort!!
ich habe jetzt eine struktur spieler gemacht.
aber das mit demstd::vector<Spieler> punkte;und dem
std::sort(punkte.begin(), punkte.end());versteh ich noch nicht

-
std::vector<Spieler> punkte_pro_spieler kannst du als array ansehen, welches fpür jeden Spieler die punkte speichert.
Jetzt kannst du den vector sortieren, damit du nicht selber sortieren muss. Dazu rufst du
std::sort(punkte.begin(), punkte.end());
Auf. Damit wird der vector (sozusagen das array) von anfang bis ende aufteigend sortiert.
-
ich versteh jetzt das mit dem operator noch nicht!!
srySpieler spieler[4]; spieler[0].norm_punkte = StrToInt(StringGrid1->Cells[1][i]); spieler[1].norm_punkte = StrToInt(StringGrid1->Cells[3][i]); spieler[2].norm_punkte=StrToInt(StringGrid1->Cells[5][i]); spieler[3].norm_punkte=StrToInt(StringGrid1->Cells[7][i]); std::vector <Spieler> norm_Punkte; std::sort(norm_Punkte.begin(), norm_Punkte.end());[C++ Fehler] _function_base.h(73): E2093 'operator<' ist im Typ 'Spieler' für Argumente desselben Typs nicht implementiert
was soll ich machen?
-
-vector erstmal initialisieren. bisher hast du ja nur einen deklariert, das ding hat keine länge keine elemente kein gar nix
-mit push_back schiebste deine ganzen spieler darein
-zum sortieren muss du n operator< definieren, geht imho so in etwa:
struct Spieler{ unsigned int spielernummer; unsigned int punkte; }; //operator < überladen, sodass du die spieler sortieren kannst: bool operator < (const Spieler& s1, const Spieler& s2){ return (s1.punkte<s2.punkte); }