Example #1
0
        /// <summary>
        /// Fuegt der Mauer eine neue Reihe hinzu, wenn noch Platz ist
        /// </summary>
        /// <param name="newReihe">Die Reihe, die hinzugefuegt werden soll</param>
        public Mauer AddReihe(Reihe newReihe)
        {
            if (newReihe == null)
            {
                return(this);
            }
            for (var i = 0; i < Reihen.Length; i++)
            {
                if (Reihen[i] == null)
                {
                    Reihen[i] = newReihe;

                    BesetzteFugen.UnionWith(newReihe.BesetzteFugen);

                    if (i == Reihen.Length - 1) // Letzte Reihe wurde gesetzt. Mauer ist voll
                    {
                        Fertig = true;
                    }

                    return(this);
                }
            }

            return(this);
        }
Example #2
0
        /// <summary>
        /// Erzeugt eine neues <see cref="Mauer"/> Objekt
        /// </summary>
        /// <param name="mauer">Die Mauer, die "geklont" wird</param>
        public Mauer(Mauer mauer)
        {
            BesetzteFugen = new HashSet <byte>();
            Reihen        = new Reihe[mauer.Reihen.Length];
            Fertig        = false;

            for (var i = 0; i < mauer.Reihen.Length; i++)
            {
                if (mauer.Reihen[i] != null)
                {
                    AddReihe(mauer.Reihen[i]);
                }
            }
        }
Example #3
0
        /// <summary>
        /// Ueberprueft ob zwei Reihen kompatibel sind
        /// </summary>
        /// <param name="a">Die erste Reihe</param>
        /// <param name="b">Die zweite Reihe</param>
        /// <param name="matrix">Die bisher gebildete Reihen Matrix</param>
        /// <returns>True wenn die Reihen kompatibel sind</returns>
        public static bool ReihenSindKompatibel(Reihe a, Reihe b, ref byte[][] matrix)
        {
            if (a == null)
            {
                return(true);                                  // Weil die Mauer ja direkt die maximal Hoehe hat
            }
            var indexA = a.Id;
            var indexB = b.Id;

            if (matrix[indexA] != null && matrix[indexA][indexB] != 0)  // Bereits eingetragen
            {
                return(matrix[indexA][indexB] == 2);
            }
            if (matrix[indexB] != null && matrix[indexB][indexA] != 0)  // Bereits eingetragen (gespiegelt)
            {
                return(matrix[indexB][indexA] == 2);
            }

            // Noch nicht eingetragen
            if (matrix[indexA] == null)
            {
                matrix[indexA] = new byte[matrix.Length];
            }

            // Reihen checken
            var fugenUeberlappungen = a.BesetzteFugen.Intersect(b.BesetzteFugen);
            var kompatibel          = !fugenUeberlappungen.Any();

            // Reihen eintragen
            if (kompatibel)
            {
                matrix[indexA][indexB] = 2;
            }
            else
            {
                matrix[indexA][indexB] = 1;
            }

            return(kompatibel);
        }
Example #4
0
 /// <summary>
 /// Erzeugt ein neues <see cref="Mauer"/> Objekt
 /// </summary>
 /// <param name="maxHoehe">Die maximale Hoehe der Mauer</param>
 public Mauer(int maxHoehe)
 {
     BesetzteFugen = new HashSet <byte>();
     Reihen        = new Reihe[maxHoehe];
     Fertig        = false;
 }