private bool Berechnen_Packen()
        {
            // Daten zurücksetzen
            StartZelle = new Zelle()
            {
                Hoehe = GartenHoehe, Breite = GartenBreite
            };

            // Absteigend nach Flaeche ordnen
            Boxen.ForEach(x => x.Flaeche = (x.Hoehe * x.Breite));
            Boxen = Boxen.OrderByDescending(x => x.Flaeche).ToList();

            foreach (Box B in Boxen)
            {
                Zelle Z = Berechnen_Suche(StartZelle, B.Hoehe, B.Breite);
                if (Z != null)
                {
                    B.Position = Berechnen_ZelleSpalten(Z, B.Hoehe, B.Breite);
                }
                else
                {
                    return(false);
                }
            }

            return(true);
        }
Example #2
0
        //Prüft das Matrix-Zellen Arrays ob es eine mögliche kombination von Siegen gibt.
        //Hat wer gewonnen, so wid der boolean "Gewonnen" auf true gesetzt und gibt diesen zurück.
        public bool gewinnerPruefung(Zelle[,] matrix)
        {
            bool Gewonnen = false;

            //horizontale checks
            if ((matrix[0, 0].Spieler.Id == matrix[0, 1].Spieler.Id) && (matrix[0, 1].Spieler.Id == matrix[0, 2].Spieler.Id) && (matrix[0, 0].Spieler.Id != 0))
                Gewonnen = true;
            else if ((matrix[1, 0].Spieler.Id == matrix[1, 1].Spieler.Id) && (matrix[1, 1].Spieler.Id == matrix[1, 2].Spieler.Id) && (matrix[1, 0].Spieler.Id != 0))
                Gewonnen = true;
            else if ((matrix[2, 0].Spieler.Id == matrix[2, 1].Spieler.Id) && (matrix[2, 1].Spieler.Id == matrix[2, 2].Spieler.Id) && (matrix[2, 0].Spieler.Id != 0))
                Gewonnen = true;

            //vertikale checks
            else if ((matrix[0, 0].Spieler.Id == matrix[1, 0].Spieler.Id) && (matrix[1, 0].Spieler.Id == matrix[2, 0].Spieler.Id) && (matrix[0, 0].Spieler.Id != 0))
                Gewonnen = true;
            else if ((matrix[0, 1].Spieler.Id == matrix[1, 1].Spieler.Id) && (matrix[1, 1].Spieler.Id == matrix[2, 1].Spieler.Id) && (matrix[0, 1].Spieler.Id != 0))
                Gewonnen = true;
            else if ((matrix[0, 2].Spieler.Id == matrix[1, 2].Spieler.Id) && (matrix[1, 2].Spieler.Id == matrix[2, 2].Spieler.Id) && (matrix[0, 2].Spieler.Id != 0))
                Gewonnen = true;

            //diagonale checks
            if ((matrix[0, 0].Spieler == matrix[1, 1].Spieler) && (matrix[1, 1].Spieler == matrix[2, 2].Spieler) && (matrix[0, 0].Spieler.Id != 0))
                Gewonnen = true;
            else if ((matrix[0, 2].Spieler == matrix[1, 1].Spieler) && (matrix[1, 1].Spieler == matrix[2, 0].Spieler) && (matrix[0, 2].Spieler.Id != 0))
                Gewonnen = true;

            return Gewonnen;
        }
Example #3
0
        //Skalliert nach der größe des Fensters die Optimale Schriftgröße
        public float fontGroesseBerechnen(Zelle zelle)
        {
            float ClientWidthFloat = (float)zelle.Rectangle.Width;
            float ClientHeightFloat = (float)zelle.Rectangle.Height;

            float fontGroesse = (ClientWidthFloat + ClientHeightFloat) / 3.0F;

            return fontGroesse;
        }
 private Zelle Berechnen_ZelleSpalten(Zelle Z, int Hoehe, int Breite)
 {
     Z.Belegt     = true;
     Z.ZelleUnten = new Zelle {
         Y = Z.Y, X = Z.X + Breite, Hoehe = Z.Hoehe, Breite = Z.Breite - Breite
     };
     Z.ZelleRechts = new Zelle {
         Y = Z.Y + Hoehe, X = Z.X, Hoehe = Z.Hoehe - Hoehe, Breite = Breite
     };
     return(Z);
 }
Example #5
0
    //Funktion um die erstellten Wände zu Zellen zusammenzuführen
    void ErzeugeZellen()
    {
        alleZellen   = xSeite * ySeite;
        letzteZellen = new List <int>();
        letzteZellen.Clear();
        //Ermitteln wie viele Unterpunkte es gibt
        int children = Wandspeicher.transform.childCount;

        GameObject[] gesamteWaende = new GameObject[children];

        Zellen = new Zelle[xSeite * ySeite];

        int Wandablauf    = 0;
        int Kindablauf    = 0;
        int LaufzeitCount = 0;

        //Die ganzen Wände in einer Variable speichern
        for (int a = 0; a < children; a++)
        {
            gesamteWaende[a] = Wandspeicher.transform.GetChild(a).gameObject;
        }

        //Wände den Zellen zuweisen
        for (int Zellzuweisung = 0; Zellzuweisung < Zellen.Length; Zellzuweisung++)
        {
            Zellen[Zellzuweisung] = new Zelle();

            //Die erste Wand der Y Seite ermitteln - passiert unmittelbar nach starten des Programms, da die erste Wand eine Wand der Y Seite ganz unten links ist
            Zellen[Zellzuweisung].links = gesamteWaende[Wandablauf];

            //Die erste Wand der X Seite ermitteln - nach dem alle Wände der Y Seite von unten nach oben, Reihe für Reihe in dem Klonprozess gespawnt werden, wird auch die erste Wand der X Seite unten links gespawnt
            Zellen[Zellzuweisung].unten = gesamteWaende[Kindablauf + (xSeite + 1) * ySeite];

            if (LaufzeitCount == xSeite)
            {
                Wandablauf++;
                Wandablauf++;
                LaufzeitCount = 0;
            }
            else
            {
                Wandablauf++;
            }

            LaufzeitCount++;
            Kindablauf++;
            Zellen[Zellzuweisung].rechts = gesamteWaende[Wandablauf];
            Zellen[Zellzuweisung].oben   = gesamteWaende[(Kindablauf + (xSeite + 1) * ySeite) + xSeite - 1];
        }

        ErstelleLabyrinth();
    }
Example #6
0
        public bool IsNeighbor(Zelle zelle, int xMax, int yMax)
        {
            int left  = this._x - 1 == 0 ? xMax : this._x - 1;
            int right = this._x == xMax ? 1 : this._x + 1;
            int up    = this._y - 1 == 0 ? yMax : this._y - 1;
            int down  = this._y == yMax ? 1 : this._y + 1;

            if (left == zelle.X && up == zelle.Y)
            {
                return(true);
            }
            if (this._x == zelle.X && up == zelle.Y)
            {
                return(true);
            }
            if (right == zelle.X && up == zelle.Y)
            {
                return(true);
            }
            if (left == zelle.X && this._y == zelle.Y)
            {
                return(true);
            }
            if (right == zelle.X && this._y == zelle.Y)
            {
                return(true);
            }
            if (left == zelle.X && down == zelle.Y)
            {
                return(true);
            }
            if (this._x == zelle.X && down == zelle.Y)
            {
                return(true);
            }
            if (right == zelle.X && down == zelle.Y)
            {
                return(true);
            }
            return(false);
        }
 /// <summary>
 /// Gibt die Bubble Matrix ohne Animationanhand des aktuellen Spielstands aus
 /// Die Matrix wird immer komplett neu gezeichnet
 /// </summary>
 public void BubblesAnzeigen()
 {
     _bubbles = new Ellipse[_matrix.Zeilen, _matrix.Spalten];
     _canvas.Children.Clear();
     _fokusAn = false;
     for (int i = 0; i < _matrix.Zeilen; i++)
     {
         for (int j = 0; j < _matrix.Spalten; j++)
         {
             Zelle zelle = _matrix.ZelleDerAdresse(i, j);
             if (zelle.Status == ZellStatus.Belegt)
             {
                 Tuple <double, double> ZeileSpalte = ZelleNachZeileSpalte(i, j);
                 _bubbles[i, j] = ErzeugeBubble(zelle.Farbe);
                 Canvas.SetTop(_bubbles[i, j], ZeileSpalte.Item1);
                 Canvas.SetLeft(_bubbles[i, j], ZeileSpalte.Item2);
                 _canvas.Children.Add(_bubbles[i, j]);
             }
         }
     }
 }
        private Zelle Berechnen_Suche(Zelle Start, int Hoehe, int Breite)
        {
            if (Start.Belegt)
            {
                Zelle ZelleNeu = Berechnen_Suche(Start.ZelleUnten, Hoehe, Breite);

                if (ZelleNeu == null)
                {
                    ZelleNeu = Berechnen_Suche(Start.ZelleRechts, Hoehe, Breite);
                }

                return(ZelleNeu);
            }
            else if (Breite <= Start.Breite && Hoehe <= Start.Hoehe)
            {
                return(Start);
            }
            else
            {
                return(null);
            }
        }
Example #9
0
 // Use this for initialization
 void Start()
 {
     Score = GetComponent <Text>();
     zelle = GameObject.FindGameObjectWithTag("Zelle").GetComponent <Zelle>();
 }
        private void wechselSpielerZugAnzeige(Zelle zelle)
        {
            if (zelle != null && zelle.geklickt == false)
            {
                if (this.Spielsteuerung.Zug)
                {
                    spielStatistikBS1.fokusSpielerZwei();
                }
                else
                {
                    spielStatistikBS1.fokusSpielerEins();
                }

            }
        }
Example #11
0
 //Hier bekommt die Zelle ihre Punkte zur richtigen Positonierung in der View
 private void gebeZelleKoordinaten(Zelle Zelle, int x, int y, int breite ,int hoehe)
 {
     Zelle.Rectangle.X = x;
     Zelle.Rectangle.Y = y;
     Zelle.Rectangle.Height = hoehe;
     Zelle.Rectangle.Width = breite;
 }
Example #12
0
        public string[] rundenAuswertung(Zelle geklickteZelle, Spielfeld spielfeld)
        {
            string[] ErgebnisArray = { "Rundenstatus", "Spielstatus", "Spielername"};

            if (geklickteZelle != null && geklickteZelle.geklickt == false)
            {
                this.welcherSpieler(geklickteZelle);

                if (ZugZaehler < 9)
                {
                    if (this.gewinnerPruefung(spielfeld.Matrix))
                    {
                        return hatGewonnen(geklickteZelle, ErgebnisArray);
                    }
                    ZugZaehler++;

                }
                else
                {

                    if (this.gewinnerPruefung(spielfeld.Matrix))
                    {

                        return hatGewonnen(geklickteZelle, ErgebnisArray);
                    }

                    istUntentschieden(ErgebnisArray);

                    return ErgebnisArray;

                }
            }
            return ErgebnisArray;
        }
Example #13
0
        //Setzt der Zelle die als Parameter reingeladen wird einen Spieler zu, und ersetzt die Weiße default farbe einer Zelle mit der, des Spielers der Geklickt hat.
        //Fügt zu der eigenschaft "Spieler" in der Zelle ein Symbol Hinzu was dann angezeigt wird in der View.
        private void setzeSpielerInZelle(Zelle zelle)
        {
            if (Zug)
            {
                zelle.Spieler = this.SpielerEins;
                zelle.DefaultPinsel.Color = this.SpielerEins.ZellenPinsel.Color;
                zelle.Spieler.Figur = "X";
            }

            else
            {
                zelle.Spieler = this.SpielerZwei;
                zelle.DefaultPinsel.Color = this.SpielerZwei.ZellenPinsel.Color;
                zelle.Spieler.Figur = "O";
            }
        }
Example #14
0
        //gibt bei einem Sieg ein Sieg array raus
        private string[] hatGewonnen(Zelle zelle, string[] ErgebnisArray)
        {
            ZugZaehler = 1;

            ErgebnisArray[0] = "true";
            ErgebnisArray[1] = "Sieg";
            ErgebnisArray[2] = zelle.Spieler.Name;
            spielErgebnis(zelle.Spieler);

            return ErgebnisArray;
        }
Example #15
0
 //Setzt in de Zelle die eigenschaft " geklickt" auf true damit diese object von außen nicht mehr ansprechbar ist und weist
 // der Zelle einen Spieler zu.
 public void welcherSpieler(Zelle zelle)
 {
     zelle.geklickt = true;
     setzeSpielerInZelle(zelle);
     wechselZug();
 }