Beispiel #1
0
 /// <summary>
 /// Erstellt einen neuen Bereich.
 /// </summary>
 /// <param name="horizontalePosition">Der horizontale Anfang des Bereichs.</param>
 /// <param name="vertikalePosition">Der vertikale Anfang des Bereichs.</param>
 /// <param name="breite">Die Breite des Bereichs.</param>
 /// <param name="höhe">Die Höhe des Bereichs.</param>
 private Bereich( GenaueZahl horizontalePosition, GenaueZahl vertikalePosition, GenaueZahl breite, GenaueZahl höhe )
 {
     // Merken
     m_größteHorizontalePosition = horizontalePosition + breite;
     m_größteVertikalePosition = vertikalePosition + höhe;
     m_kleinsteHorizontalePosition = horizontalePosition;
     m_kleinsteVertikalePosition = vertikalePosition;
 }
        /// <summary>
        /// Erstellt eine neue Geschwindigkeitsinformation.
        /// </summary>
        /// <param name="xGeschwidigkeit">Die horizontale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
        /// <param name="yGeschwindigkeit">Die vertikale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
        /// <param name="gueltigBis">Der Zeitpunkt, bis zu dem die Geschwindigkeit auf das zugehörige Element angewendet werden soll.</param>
        /// <returns>Die gewünschte Beschreibung der Geschwindigkeit.</returns>
        /// <exception cref="ArgumentOutOfRangeException">Mindestens ein Parameter ist ungültig.</exception>
        public static TemporaereGeschwindigkeit Erzeugen( GenaueZahl xGeschwidigkeit, GenaueZahl yGeschwindigkeit, TimeSpan gueltigBis )
        {
            // Prüfen
            if (gueltigBis.Ticks < 0)
                throw new ArgumentOutOfRangeException( "gueltigBis" );

            // Anlegen
            return new TemporaereGeschwindigkeit( xGeschwidigkeit, yGeschwindigkeit, gueltigBis );
        }
Beispiel #3
0
 /// <summary>
 /// Erzeugt eine neue Spielfigur.
 /// </summary>
 /// <param name="position">Die Position des Elementes auf dem Spielfeld.</param>
 /// <param name="ausdehnung">Die relative Größe des Elementes.</param>
 public Spieler( Position position, Ausdehnung ausdehnung )
     : base(position, ausdehnung, false, null)
 {
     // Initialisierung beenden
     AktuelleGeschwindigkeit = Geschwindigkeit.Erzeugen( GenaueZahl.Null, GenaueZahl.Null );
     m_sprungDauer = TimeSpan.FromMilliseconds( 100 );
     m_einfacheGeschwindigkeit = GenaueZahl.Eins / 25;
     m_maximalerGeschwindigkeitsFaktor = 5;
     m_sprungStärke = GenaueZahl.Eins / 2;
     m_maximalerSprung = 3;
     m_aktuellerFaktor = 0;
 }
Beispiel #4
0
        /// <summary>
        /// Erstellt eine neue Ausdehnung.
        /// </summary>
        /// <param name="breite">Die relative Breite.</param>
        /// <param name="höhe">Die relative Höhe.</param>
        /// <returns>Die gewünschte neue Ausdehnung.</returns>
        /// <exception cref="ArgumentOutOfRangeException">Die angegebene Ausdehung ist unzulässig.</exception>
        public static Ausdehnung Erzeugen( GenaueZahl breite, GenaueZahl höhe )
        {
            // Prüfen
            if (breite < GenaueZahl.Null)
                throw new ArgumentOutOfRangeException( "breite" );
            if (höhe < GenaueZahl.Null)
                throw new ArgumentOutOfRangeException( "höhe" );
            if (breite > GenaueZahl.Eins)
                throw new ArgumentOutOfRangeException( "breite" );
            if (höhe > GenaueZahl.Eins)
                throw new ArgumentOutOfRangeException( "höhe" );

            // Merken
            return new Ausdehnung( breite, höhe );
        }
Beispiel #5
0
        /// <summary>
        /// Erstellt eine neue Position.
        /// </summary>
        /// <param name="horizontalePosition">Die horizontale Position.</param>
        /// <param name="vertikalePosition">Die vertikale Position.</param>
        /// <returns>Die gewünschte neue Position.</returns>
        /// <exception cref="ArgumentOutOfRangeException">Die Position ist ungültig.</exception>
        public static Position Erzeugen( GenaueZahl horizontalePosition, GenaueZahl vertikalePosition )
        {
            // Prüfen
            if (horizontalePosition < GenaueZahl.Null)
                throw new ArgumentOutOfRangeException( "horizontalePosition" );
            if (vertikalePosition < GenaueZahl.Null)
                throw new ArgumentOutOfRangeException( "vertikalePosition" );
            if (horizontalePosition > GenaueZahl.Eins)
                throw new ArgumentOutOfRangeException( "horizontalePosition" );
            if (vertikalePosition > GenaueZahl.Eins)
                throw new ArgumentOutOfRangeException( "vertikalePosition" );

            // Anlegen
            return new Position( horizontalePosition, vertikalePosition );
        }
        /// <summary>
        /// Erzeugt eine neue Beschreibung.
        /// </summary>
        /// <param name="fläche">Die tatsächliche Position des Elementes.</param>
        /// <param name="horizontaleVerschiebung">Die Verschiebung in horizontale Richtung.</param>
        /// <param name="vertikaleVerschiebung">Die Verschiebung in vertikale Richtung.</param>
        private ElementInBewegung( Fläche fläche, GenaueZahl horizontaleVerschiebung, GenaueZahl vertikaleVerschiebung )
        {
            // Alles merken
            HorizontaleVerschiebung = horizontaleVerschiebung;
            VertikaleVerschiebung = vertikaleVerschiebung;
            Fläche = fläche;

            // Breite und Höhe des Bewegungspfads ermitteln
            var breite = Fläche.Bereich.Breite + HorizontaleVerschiebung.Abs();
            var höhe = Fläche.Bereich.Höhe + VertikaleVerschiebung.Abs();

            // Ursprung bestimmen
            var links = Fläche.Bereich.KleinsteHorizontalePosition;
            var unten = Fläche.Bereich.KleinsteVertikalePosition;

            // Je nach Orientierung korrigieren
            if (HorizontaleVerschiebung < GenaueZahl.Null)
                links += HorizontaleVerschiebung;
            if (VertikaleVerschiebung < GenaueZahl.Null)
                unten += VertikaleVerschiebung;

            // Gesamtumfang ermitteln
            GesamterBereich = Bereich.Erzeugen( links, unten, breite, höhe );
        }
 /// <summary>
 /// Erzeugt eine neue Beschreibung.
 /// </summary>
 /// <param name="fläche">Die tatsächliche Position des Elementes.</param>
 /// <param name="horizontaleVerschiebung">Die Verschiebung in horizontale Richtung.</param>
 /// <param name="vertikaleVerschiebung">Die Verschiebung in vertikale Richtung.</param>
 /// <returns>Die gewünschte Beschreibung der Bewegung.</returns>
 public static ElementInBewegung Erzeugen( Fläche fläche, GenaueZahl horizontaleVerschiebung, GenaueZahl vertikaleVerschiebung )
 {
     // Forward
     return new ElementInBewegung( fläche, horizontaleVerschiebung, vertikaleVerschiebung );
 }
Beispiel #8
0
 /// <summary>
 /// Erstellt einen neuen Bereich.
 /// </summary>
 /// <param name="horizontalePosition">Der horizontale Anfang des Bereichs.</param>
 /// <param name="vertikalePosition">Der vertikale Anfang des Bereichs.</param>
 /// <param name="breite">Die Breite des Bereichs.</param>
 /// <param name="höhe">Die Höhe des Bereichs.</param>
 /// <returns>Der gewünschte Bereich.</returns>
 public static Bereich Erzeugen( GenaueZahl horizontalePosition, GenaueZahl vertikalePosition, GenaueZahl breite, GenaueZahl höhe )
 {
     // Erzeugen
     if (breite < GenaueZahl.Null)
         return Erzeugen( horizontalePosition + breite, vertikalePosition, -breite, höhe );
     else if (höhe < GenaueZahl.Null)
         return Erzeugen( horizontalePosition, vertikalePosition + höhe, breite, -höhe );
     else
         return new Bereich( horizontalePosition, vertikalePosition, breite, höhe );
 }
Beispiel #9
0
 /// <summary>
 /// Erstellt eine neue Geschwindigkeitsinformation.
 /// </summary>
 /// <param name="horizontaleGeschwindigkeit">Die horizontale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
 /// <param name="vertikaleGeschwindigkeit">Die vertikale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
 /// <returns>Die gewünschte Beschreibung der Geschwindigkeit.</returns>
 /// <exception cref="ArgumentOutOfRangeException">Mindestens ein Parameter ist ungültig.</exception>
 public static Geschwindigkeit Erzeugen( GenaueZahl horizontaleGeschwindigkeit, GenaueZahl vertikaleGeschwindigkeit )
 {
     // Anlegen
     return new Geschwindigkeit( horizontaleGeschwindigkeit, vertikaleGeschwindigkeit );
 }
Beispiel #10
0
 /// <summary>
 /// Erstellt eine neue Geschwindigkeitsinformation.
 /// </summary>
 /// <param name="horizontaleGeschwindigkeit">Die horizontale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
 /// <param name="vertikaleGeschwindigkeit">Die vertikale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
 protected Geschwindigkeit( GenaueZahl horizontaleGeschwindigkeit, GenaueZahl vertikaleGeschwindigkeit )
 {
     // Merken
     m_horizontaleGeschwindigkeit = horizontaleGeschwindigkeit;
     m_vertikaleGeschwindigkeit = vertikaleGeschwindigkeit;
 }
Beispiel #11
0
 /// <summary>
 /// Erstellt eine neue Ausdehung.
 /// </summary>
 /// <param name="breite">Die Breite der Fläche.</param>
 /// <param name="höhe">Die Höhe der Fläche.</param>
 private Ausdehnung( GenaueZahl breite, GenaueZahl höhe )
 {
     // Merken
     m_breite = breite;
     m_hoehe = höhe;
 }
Beispiel #12
0
 /// <summary>
 /// Erstellt eine neue Position.
 /// </summary>
 /// <param name="horizontalePosition">Die horizontale Position.</param>
 /// <param name="vertikalePosition">Die vertikale Position.</param>
 /// <returns>Die gewünschte neue Position.</returns>
 public static Position SicherErzeugen( GenaueZahl horizontalePosition, GenaueZahl vertikalePosition )
 {
     // Anlegen
     return Erzeugen( horizontalePosition.ZwischenNullUndEins(), vertikalePosition.ZwischenNullUndEins() );
 }
Beispiel #13
0
 /// <summary>
 /// Erstellt eine neue Position auf dem Spielfeld.
 /// </summary>
 /// <param name="horizontalePosition">Die horizonatale Koordinate.</param>
 /// <param name="vertikalePosition">Die vertikale Koordinate.</param>
 private Position( GenaueZahl horizontalePosition, GenaueZahl vertikalePosition )
 {
     // Merken
     m_horizontalePosition = horizontalePosition;
     m_vertikalePosition = vertikalePosition;
 }
 /// <summary>
 /// Erstellt eine neue Geschwindigkeitsinformation.
 /// </summary>
 /// <param name="xGeschwidigkeit">Die horizontale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
 /// <param name="yGeschwindigkeit">Die vertikale Geschwindigkeit, wobei <i>1</i> bedeutet, dass das gesamte Spielfeld in einer Sekunden abgelaufen wird.</param>
 /// <param name="gueltigBis">Der Zeitpunkt, bis zu dem die Geschwindigkeit auf das zugehörige Element angewendet werden soll.</param>
 protected TemporaereGeschwindigkeit( GenaueZahl xGeschwidigkeit, GenaueZahl yGeschwindigkeit, TimeSpan gueltigBis )
     : base(xGeschwidigkeit, yGeschwindigkeit)
 {
     // Merken
     m_anwendenBis = gueltigBis;
 }
            /// <summary>
            /// Erzeugt eine neue Beschreibung.
            /// </summary>
            /// <param name="element">Das zugehörige Element.</param>
            /// <param name="spielZeit">Die bisher verstrichene Spielzeit.</param>
            /// <param name="sekunden">Die Anzahl der Sekunden seit der letzten Berechnung.</param>
            public BewegungsInformation( GrundElement element, TimeSpan spielZeit, decimal sekunden )
            {
                // Nicht nutzbar
                if (element.IstDeaktiviert)
                    return;

                // Merken
                m_verbleibendeSchritte = (int) Math.Round( 1000m * sekunden );
                Element = element;

                // Geschwindigkeit auslesen
                var geschwindigkeit = element.GeschwindigkeitsRegel.AktuelleGeschwindigkeitBerechnen( spielZeit );
                if (geschwindigkeit == null)
                    return;

                // Anfangsposition auslesen
                var aktuellePosition = element.Position;

                // Endposition berechnen
                var xEnde = (aktuellePosition.HorizontalePosition + geschwindigkeit.HorizontaleGeschwindigkeit * sekunden).ZwischenNullUndEins();
                var yEnde = (aktuellePosition.VertikalePosition + geschwindigkeit.VertikaleGeschwindigkeit * sekunden).ZwischenNullUndEins();

                // Ziel und Geschwindigkeit merken
                Geschwindigkeit = geschwindigkeit;

                // Schrittweiten berechnen
                m_xSchritt = (xEnde - aktuellePosition.HorizontalePosition) / m_verbleibendeSchritte;
                m_ySchritt = (yEnde - aktuellePosition.VertikalePosition) / m_verbleibendeSchritte;

                // Es witd sich nichts verändern
                if (m_xSchritt == GenaueZahl.Null)
                    if (m_ySchritt == GenaueZahl.Null)
                        return;

                // Dem Element mitteilen, dass es nun losgeht
                element.Bewegen( aktuellePosition );
            }