/// <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 ) ); }
/// <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(); }
/// <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 ); }