GrafZahl
0
... na hierauf:Ich weiß zwar nicht worauf du hinaus willst, aber gut.
ich versuche dich die fehler auf diese art selber finden zu lassen ...iUebergabe hatte übrigens nur das Gesamtergebnis des letzten Spielers ausgespuckt, weil sich cout << iUebergabe nicht in der Schleife befand..
wenn du rein routinemäßig für jeden abschnitt deines codes so eine "ablaufverfolgung" im kopf hast, oder sie anfangs evtl runterschreibst, fallen dir solche dinge sehr schnell auf...Zweiter Schleifendurchlauf:
i hat den wert 2.
Es erfolgt die Ausgabe "Spieler 2 wirft:" und i erhält den Wert 3.
iDurchgang1Spieler() wird aufgerufen und gibt (laut annahme) den wert 3 zurück.
iUebergabe erhält diesen rückgabewert.
iUebergabe erhält einen anderen Wert als iDurchgang1Spieler().
naja ... du wolltest eine bestenliste die alle ergebnisse bis zum programmende im speicher behält ... dafür wären alle werte relevant ...Wird das noch relevant? Momentan ist das doch eigentlich wurscht?!
der einfachste weg wäre nun, die liste zu füllen wenn iDurchgang1Spieler() den wert an die main() zurück geliefert hat ...
aus prozeduraler sicht gehört diese aufgabe aber nicht in die main() ... dem liegt folgender gedankengang zugrunde:
iWurf() führt würfe durch ... würfe gibts nur im kontext eines spielers, und ein spieler führt alle seine würfe am stück durch ... -> die prezedur, die alle würfe eines spielers durchführt, ist aktuell die einzige prozedur die iWurf() aufruft ...
einträge auf die bestenliste gibt es nur, wenn auch ein spieler kontext vorhanden ist ... die prozedur die alle würfe eines spielers durchführt, behandelt aktuell den gesammten kontext eines spielers ... wenn ein spieler seine würfe durchgeführt hat, wird er auch auf die bestenliste eingetragen -> um dies sicherzustellen muss der eintrag auf die bestenliste am ende dieser prozedur stehen ... (hintergrund ist: sollte ein programm mal erweitert werden, und abgesehen von der main noch eine andere prozedur iDurchgang1Spieler() benutzen, steht der teil für die bestenliste schon, und du vermeidest doppelten code zu schreiben)
im endeffekt führen viele wege nach rom, und dieses konzept stellt nur eine mögliche auslegung dar ...
wichtig ist an dieser stelle erstmal nur, dass man das ganze entsprechend einer gewissen logik in einzelne prozeduren zerlegt, und die abhänigkeiten dieser prozeduren beachtet ... wenn man dabei kein henne-ei problem baut, hat man mit dieser art überlegung eigentlich sehr schnell ein grobes strickmuster zur hand, dass dem prozeduralen ansatz folgt, und sich zu einer lösung ausbauen lässt ... nun kann es anfangs schwer fallen zu entscheiden ob etwas eine eigene prozedur ist, oder nicht ... dafür gibt es, meiner erfahrung nach, keine allgemeingültige antwort ... wenn du allerdings code schreibst, der eine andere aufgabe erfüllt als der umgebende, solltest du darüber nachdenken ...
wie solls weiter gehen? einfach oder doch eher richtung prozeduraler ansatz?
einfach:
einführung der bestenliste als array in der main ...
befüllen des arrays während der schleife in der main...
prozedural:
einführung der bestenliste als array in der main
iDurchgang1Spieler() bekommt 2 neue parameter, eine referenz auf die bestenliste, und die nummer des aktuellen spielers (identifizierendes merkmal des kontextes)
einführung einer neuen prozedur, die in die bestenliste einträgt
aufruf dieser prozedur am ende von iDurchgang1Spieler()
oder widmen wir uns einer anderen baustelle?
