/// <summary> /// Rekonstruiert ein Spielergebnis aus der Ablage. /// </summary> /// <param name="datei">Die zu verwendende Ablage.</param> /// <returns>Das rekonstruierte Ergebnis.</returns> internal static Spielergebnis Laden( BinaryReader datei ) { // Ergebnis anlegen var ergebnis = new Spielergebnis(); // Auslesen ergebnis.Endzeitpunkt = new DateTime( datei.ReadInt64() ); ergebnis.Punkte = datei.ReadUInt32(); ergebnis.Restenergie = datei.ReadUInt32(); // Melden return ergebnis; }
/// <summary> /// Erweitert die Spielergebnisse und aktualisiert die Ablage. /// </summary> /// <param name="punkte">Die gesammelten Punkte.</param> /// <param name="restEnergie">Die noch verbleibende Energie.</param> /// <returns>Das Gesamtergebnis - egal, ob dieses übernommen wurde oder nicht.</returns> public Spielergebnis NeuesErgebnis( uint punkte, uint restEnergie ) { // Zählen Restenergie += restEnergie; Punkte += punkte; Anzahl += 1; // Neues Ergebnis anlegen var ergebnis = new Spielergebnis { Endzeitpunkt = DateTime.UtcNow, Punkte = punkte, Restenergie = restEnergie }; var vergleich = ergebnis.Gesamtergebnis; // Einfügeposition ermitteln var neuerIndex = 0; // Beste Position ermitteln for (; neuerIndex < BesteErgebnisse.Count; neuerIndex++) if (vergleich >= BesteErgebnisse[neuerIndex].Gesamtergebnis) break; // Einfügen BesteErgebnisse.Insert( neuerIndex, ergebnis ); // Abschneiden if (BesteErgebnisse.Count > 5) BesteErgebnisse.RemoveRange( 5, BesteErgebnisse.Count - 5 ); // Ablage aktualisieren AblageNutzen( false, datei => { // Die Datei wird binär beschrieben using (var schreiber = new BinaryWriter( datei )) { // Unsere Daten schreiber.Write( Anzahl ); schreiber.Write( Punkte ); schreiber.Write( Restenergie ); schreiber.Write( BesteErgebnisse.Count ); // Alle Ergebnisse BesteErgebnisse.ForEach( bestes => bestes.Speichern( schreiber ) ); } } ); // Melden return ergebnis; }