Exemple #1
0
        /// <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;
        }