示例#1
0
        /// <summary>
        /// Erstellt eine neue Präsentation.
        /// </summary>
        /// <param name="hintergrundBild">Der relative Pfad zu dem Hintergrundbild.</param>
        /// <param name="verloren">Das Bild, das angezeigt wird, wenn das Spiel verloren wurde.</param>
        /// <param name="gewonnen">Das Bild, das angezeigt wird, wenn das Spiel gewonnen wurde.</param>
        /// <param name="figur">Optional die Spielfigur selbst.</param>
        /// <param name="elemente">Alle Elemente dieses Spielfelds - mit Ausnahme der Spielfigur selbst.</param>
        /// <param name="ergebnisse">Die Verwaltung der Spielergebnisse.</param>
        internal Spielfeld( string hintergrundBild, string verloren, string gewonnen, Element figur, IEnumerable<Element> elemente, Ergebnisse ergebnisse )
        {
            // Prüfen
            if (string.IsNullOrEmpty( hintergrundBild ))
                throw new ArgumentNullException( "hintergrundBild" );
            if (ergebnisse == null)
                throw new ArgumentNullException( "ergebnisse" );

            // Bilder setzen
            if (!string.IsNullOrEmpty( verloren ))
                BildVerloren = new EinzelBild( verloren );
            if (!string.IsNullOrEmpty( gewonnen ))
                BildGewonnen = new EinzelBild( gewonnen );

            // Auslesen
            m_hintergrund = new EinzelBild( hintergrundBild );
            Ergebnisse = ergebnisse;

            // Auf Änderungen reagieren
            m_hintergrund.PropertyChanged += ( s, a ) => ElementeAktualisieren();
            m_hintergrund.PropertyChanged += ( s, a ) => VerfügbarkeitNeuPrüfen( EinzelBild._IstVerfügbar, a.PropertyName );

            // Alle Elemente abbilden
            m_elemente = elemente.ToList();

            // Spielfigur ergänzen, sofern bekannt - immer als letztes, damit diese immer sichtbar bleibt
            m_elemente.Add( figur );

            // Alle Elemente überwachen
            m_elemente.ForEach( element => element.PropertyChanged += ( s, a ) => VerfügbarkeitNeuPrüfen( Element._IstVerfügbar, a.PropertyName ) );

            // Erstmalig aufsetzen
            ElementeAktualisieren();
        }
        /// <summary>
        /// Erstellt die Präsentation eines Spielfeldes.
        /// </summary>
        /// <param name="spielfeld">Die Konfiguration des Spielfelds.</param>
        /// <param name="spielfigur">Optional eine Spielfigur, die auf dem Spielfeld platziert werden soll.</param>
        /// <returns>Die zugehörige Repräsentation des Spielfelds.</returns>
        /// <exception cref="ArgumentNullException">Es wurde kein Spielfeld angegeben.</exception>
        public static Spielfeld ErzeugePräsentation( this Ablage.Spielfeld spielfeld, Element spielfigur )
        {
            // Prüfen
            if (spielfeld == null)
                throw new ArgumentNullException( "spielfeld" );

            // Erzeugen
            return
                new Spielfeld
                (
                    spielfeld.Bild,
                    spielfeld.BildVerloren,
                    spielfeld.BildGewonnen,
                    spielfigur,
                    spielfeld.Elemente.Select( ErzeugePräsentation ),
                    new Ergebnisse( spielfeld.Ergebnisse )
                );
        }
示例#3
0
        /// <summary>
        /// Erstellt eine neue Konfiguration.
        /// </summary>
        /// <param name="breite">Die Breite des Sichtfensters.</param>
        /// <param name="höhe">Die Höhe des Sichtfensters.</param>
        /// <param name="spielfeld">Das zugehörige Spielfeld.</param>
        /// <param name="spielfigur">Optional die zu verwendende Spielfigur.</param>
        /// <param name="umgebungAufsetzen">Wird aufgerufen, um die Spielumgebung aufzusetzen.</param>
        private Spiel( double breite, double höhe, Spielfeld spielfeld, Element spielfigur, Action<Spiel> umgebungAufsetzen )
        {
            // Initialisierung abschliessen
            Steuerung = new Steuerung( spielfeld );

            // Merken
            m_umgebungAufsetzen = umgebungAufsetzen;

            // Spielfeld und -figur als erstes übernehmen
            Spielfigur = spielfigur;
            m_Spielfeld = spielfeld;

            // Änderungen überwachen
            m_Spielfeld.Hintergrund.PropertyChanged += HintergrundBildWurdeVerändert;
            m_Spielfeld.PropertyChanged += SpielfeldWurdeVerändert;
            Spielfigur.PropertyChanged += SpielfigurZentrieren;

            // Übernehmen
            Breite = breite;
            Hoehe = höhe;

            // Schauen wir mal, ob wie schon loslegen können
            AufSpielumgebungPrüfen();
        }
示例#4
0
        /// <summary>
        /// Erstellt eine neue Konfiguration.
        /// </summary>
        /// <param name="breite">Die Breite des Sichtfensters.</param>
        /// <param name="höhe">Die Höhe des Sichtfensters.</param>
        /// <param name="spielfeld">Das zugehörige Spielfeld.</param>
        /// <param name="spielfigur">Optional die zu verwendende Spielfigur.</param>
        /// <param name="umgebungAufsetzen">Wird aufgerufen, um die Spielumgebung aufzusetzen.</param>
        internal static Spiel Erzeugen( double breite, double höhe, Spielfeld spielfeld, Element spielfigur, Action<Spiel> umgebungAufsetzen )
        {
            // Prüfen
            if (breite <= 0)
                throw new ArgumentOutOfRangeException( "breite" );
            if (höhe <= 0)
                throw new ArgumentOutOfRangeException( "höhe" );
            if (spielfeld == null)
                throw new ArgumentNullException( "spielfeld" );
            if (umgebungAufsetzen == null)
                throw new ArgumentNullException( "umgebungAufsetzen" );

            // Durchreichen
            return new Spiel( breite, höhe, spielfeld, spielfigur, umgebungAufsetzen );
        }