Exemple #1
0
        public override List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
        {
            schlagFlag          = false;
            doppelDameFlag      = false;
            zuSchlagendeFelder  = new List <Feld>();
            startSteinBesetzung = null;


            // Nur was machen, wenn auf dem startfeld wirklich ein stein liegt und auf dem Ziel keiner liegt
            if (vonFeld.GetSteinBesetzung() != null && zuFeld.GetSteinBesetzung() == null)
            {
                startSteinBesetzung = vonFeld.GetSteinBesetzung();
                this.Search(vonFeld, zuFeld, s, brett); //setzt zuSchlagendeFelder
                doppelDameFlag = false;
            }

            if (zuSchlagendeFelder.Count < 1 || zuSchlagendeFelder[0] == null)
            {
                zuSchlagendeFelder = null;
            }
            startSteinBesetzung = null;


            return(zuSchlagendeFelder);
        }
Exemple #2
0
        // Gets all possible moves for one token
        public override List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett)
        {
            List <Feld> moves = new List <Feld>();          // List of possible targets

            Feld[,] felder = brett.GetFelder();             // All fields on the board

            List <Feld> ziele = new List <Feld>();          // All black fields on the board

            // Ineffiziente billig-Methode
            // 1. Fügt alle schwarzen felder der Ziel-Liste hinzu
            for (int i = 0; i < felder.GetLength(0); i++)
            {
                for (int j = 0; j < felder.GetLength(1); j++)
                {
                    if ((((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1))) && felder[i, j].GetSteinBesetzung() == null)
                    {
                        ziele.Add(felder[i, j]);
                    }
                }
            }

            // 2. Testet alle Zielfelder, ob mit diesem startfeld ein Zug gültig ist
            for (int i = 0; i < ziele.Count; i++)
            {
                // Wenn ein normaler zug oder schlagen möglich ist, ist dies ein gültiger zug.
                if (MoveStein(vonFeld, ziele[i], spieler, brett) || Schlagen(vonFeld, ziele[i], spieler, brett) != null)
                {
                    // 3. Gültige Züge werden der moves-Liste hinzugefügt.
                    moves.Add(ziele[i]);
                }
            }

            // can be empty
            return(moves);
        }
Exemple #3
0
        //Gibt Liste mit Felder zurueck, welche nach einem Schlag von einem Feld erreicht werden koennen
        public List <Feld> GetSchlagZielfelder(Feld vonFeld, Spieler s, Brett brett)
        {
            List <Feld> felder = new List <Feld>(); //alle schwarzen Felder
            List <Feld> ziel   = new List <Feld>(); //alle möglichen ziel Felder welche durch schlagen erreicht werden können

            //setzen der schwarzen Felder
            for (int x = 0; x < brett.GetBreite(); x++)
            {
                for (int y = 0; y < brett.GetHöhe(); y++)
                {
                    if (brett.GetFelder()[x, y].GetFarbe() == Farbe.Schwarz)
                    {
                        felder.Add(brett.GetFelder()[x, y]);
                    }
                }
            }

            //finden der möglichen zielfelder
            foreach (Feld zuFeld in felder)
            {
                // Nur was machen, wenn auf dem Ziel keiner liegt
                if (zuFeld.GetSteinBesetzung() == null)
                {
                    bool temp = doppelDameFlag;
                    Feld f    = this.Schlag(vonFeld, zuFeld, s, brett); //Gibt Feld zurück welches geschlagen wird von vonFeld zu zuFeld
                    doppelDameFlag = temp;
                    if (f != null)
                    {
                        ziel.Add(zuFeld);   //adde das Feld welches erreicht werden kann
                    }
                }
            }

            return(ziel);    //Liste mit den Feldern auf, welche man ziehen kann
        }
Exemple #4
0
        //setzt zuSchlagendeFelder
        void Search(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
        {
            List <Feld> moeglicheFelder = this.GetSchlagZielfelder(vonFeld, s, brett); // auf welche Felder kann man von vonFeld Schlagen?

            if (moeglicheFelder != null)
            {
                foreach (Feld f in moeglicheFelder)
                {
                    Feld geschlagenesFeld = this.Schlag(vonFeld, f, s, brett);  //welches Feld wird geschlagen
                    zuSchlagendeFelder.Add(geschlagenesFeld);

                    if (f == zuFeld)
                    {
                        schlagFlag = true;  // wenn zuFeld gefunden wurd setze Flagge
                    }
                    else
                    {
                        this.Search(f, zuFeld, s, brett);
                        if (!schlagFlag)
                        {
                            doppelDameFlag = false;
                            zuSchlagendeFelder.RemoveAt(zuSchlagendeFelder.Count - 1);   //wenn zuFeld noch nicht gefunden wurde lösche alle Felderbis zur letzten Abzweigung (nehme nöchstes foreach)
                        }
                    }
                }
            }
        }
Exemple #5
0
 public void SetFeld(Feld feld)
 {
     if (feld != null && feld.GetFarbe() != Farbe.Schwarz)
     {
         throw new ArgumentException("Steine können nur auf Schwarzen Feldern laufen");
     }
     this.feld = feld;
 }
Exemple #6
0
        public override Boolean WirdZuDame(Feld zuFeld, Spieler s)      //TODO: Werte müssen bei flexibler Brettgroesse angepasst werden
        {
            bool wirdDame = false;

            //Debug.Log("Wird Stein Dame?");
            if (s.GetFarbe() == Farbe.Weiß && zuFeld.GetPositionY() == 7 ||
                s.GetFarbe() == Farbe.Schwarz && zuFeld.GetPositionY() == 0)
            {
                wirdDame = true;
            }

            return(wirdDame);
        }
Exemple #7
0
        // Returns true if there is even one move available for this token
        // Verbesserte performanz mit Damen
        public override bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett)
        {
            Feld[,] felder = brett.GetFelder();             // All fields on the board

            // Ineffiziente billig-Methode
            // 1. Fügt alle schwarzen felder der Ziel-Liste hinzu
            for (int i = 0; i < felder.GetLength(0); i++)
            {
                for (int j = 0; j < felder.GetLength(1); j++)
                {
                    if ((((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1))) && felder[i, j].GetSteinBesetzung() == null)
                    {
                        if (MoveStein(vonFeld, felder[i, j], spieler, brett) || Schlagen(vonFeld, felder[i, j], spieler, brett) != null)
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Exemple #8
0
 public void instantiate(Farbe farbe, Feld feld)
 {
     this.SetFarbe(farbe);
     this.SetFeld(feld);
     //  this.SetDame(false);
 }
Exemple #9
0
        // Mouse clicked on the Board. Make clicked field either the start or target
        void OnMouseDown()
        {
            // Only react on Mouse click if the Pause menu is not open
            if (!MenuBackground.activeSelf && (self == null || (self.GetFarbe() == aktuellerSpieler.GetFarbe())))
            {
                float hitdistance = 0.0f;
                Ray   ray         = Camera.main.ScreenPointToRay(Input.mousePosition);
                Plane plane       = new Plane(transform.up, transform.position);

                if (plane.Raycast(ray, out hitdistance))
                {
                    Vector3 hitPoint = ray.GetPoint(hitdistance);
                    Feld    newFeld  = this.brett.GetFelder()[(int)(hitPoint.x + 4), (int)(hitPoint.z + 4)];

                    // 1. Start noch nicht ausgewählt
                    if (vonFeld == null)
                    {
                        if (newFeld != null)
                        {
                            vonFeld = newFeld;

                            // 1.1 Start enthät stein
                            if (vonFeld.GetSteinBesetzung() != null)
                            {
                                if (vonFeld.GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == aktuellerSpieler.GetFarbe())
                                {
                                    Debug.Log("Startfeld gesetzt.");
                                    // Mark respective fields (Visual feedback)
                                    List <Feld> moves = this.regelwerk.GetMoves(vonFeld, this.GetAktuellerSpieler(), this.brett);
                                    MarkFields(new List <Feld> {
                                        vonFeld
                                    }, Tag.Start);                                                   // Starting field
                                    MarkFields(moves, Tag.Ziel);                                     // Target fields

                                    // Lösche Marker (gelb)
                                    foreach (var marker in GameObject.FindGameObjectsWithTag("MarkerAvailable"))
                                    {
                                        Destroy(marker);
                                    }
                                }
                                else
                                {
                                    Debug.Log("Dies ist kein gültiges Feld.");
                                    vonFeld = null;
                                }
                            }
                            // 1.2 Start enthält keinen Stein
                            else
                            {
                                Debug.Log("Auf diesem Feld befindet sich kein Spielstein.");
                                vonFeld = null;
                            }
                        }
                        else
                        {
                            Debug.Log("Auswahl ungültig.");
                        }
                    }

                    // 2. Start ausgewählt, aber neue Auswahl == alte auswahl
                    else if (newFeld.GetPositionX() == vonFeld.GetPositionX() && newFeld.GetPositionY() == vonFeld.GetPositionY())
                    {
                        vonFeld = null;
                        Debug.Log("Auswahl deselektiert.");

                        // Lösche Marker (grün, cyan)
                        foreach (var marker in GameObject.FindGameObjectsWithTag("MarkerSelect"))
                        {
                            Destroy(marker);
                        }

                        // Erzeuge Marker (gelb)
                        MarkMovableTokens();
                    }

                    // 3. Start ausgewählt, Ziel noch nicht ausgewählt
                    else if (zuFeld == null)
                    {
                        zuFeld = this.brett.GetFelder()[(int)(hitPoint.x + 4), (int)(hitPoint.z + 4)];

                        // 3.1 Ziel enthält keinen anderen Stein
                        if (zuFeld.GetSteinBesetzung() == null)
                        {
                            if (zuFeld.GetFarbe() == Farbe.Schwarz)
                            {
                                Debug.Log("Zielfeld gesetzt.");
                                if (MoveStein(vonFeld, zuFeld))
                                {
                                    netzwerk.Send("move;" + vonFeld.GetPositionX() + "" + vonFeld.GetPositionY() + "" + zuFeld.GetPositionX() + "" + zuFeld.GetPositionY());

                                    vonFeld = zuFeld = null;

                                    // Lösche Marker (grün, cyan)
                                    foreach (var marker in GameObject.FindGameObjectsWithTag("MarkerSelect"))
                                    {
                                        Destroy(marker);
                                    }
                                }
                                else
                                {
                                    zuFeld = null;
                                }
                            }
                            else
                            {
                                Debug.Log("Dies ist kein gültiges Feld.");
                                zuFeld = null;
                            }
                        }

                        // 3.2 Ziel enthält einen Stein
                        else
                        {
                            Debug.Log("Auf diesem Feld befindet sich bereits ein Spielstein.");
                            zuFeld = null;
                        }
                    }
                }
            }
        }
Exemple #10
0
        //wird verwendet um seinen Stein zu bewegen
        public Boolean MoveStein(Feld vonFeld, Feld zuFeld)
        {
            bool        b        = false;   //boolean zum ziehen
            List <Feld> c        = null;    //boolean zum schlagen
            bool        wirdDame = false;

            /*
             *      if(vonFeldX<0||vonFeldX>this.brett.GetBreite() ||
             *         vonFeldY<0||vonFeldY>this.brett.GetHöhe() ||  unnötig
             *         zuFeldX<0||zuFeldX>this.brett.GetBreite() ||
             *         zuFeldY<0||zuFeldY>this.brett.GetHöhe()){
             *              b = false;  //Koordinaten stimmen nicht
             *
             *      }else{ }
             */


            /* TODO AUSKOMMENTIEREN      wird in regelwerk geregelt
             * if (this.aktuellerSpieler.GetFarbe() != vonFeld.GetSteinBesetzung().GetComponent<Stein>().GetFarbe())
             * {
             *      b = false;    //Spieler besitzt den Stein nicht bzw. den Stein auf diesem Feld gibt es nicht
             * }
             * else
             * { }
             */
            c = this.regelwerk.Schlagen(vonFeld, zuFeld, this.aktuellerSpieler, this.brett); //darf bzw. will ich schlagen?
            if (c != null)                                                                   //schlagen des Gegners
            {
                b = true;                                                                    //stein wird nachher verlegt
                GameObject.Find("Audio Source Jump").GetComponent <AudioSource>().Play();
            }
            else                //sonst muss man prüfen ob es ein normaler zug war
            {
                b = this.regelwerk.MoveStein(vonFeld, zuFeld, this.aktuellerSpieler, this.brett);
                if (b)
                {
                    GameObject.Find("Audio Source Move").GetComponent <AudioSource>().Play();
                }
            }

            if (b)                                                                  //verlegen des Steins   //gueltiger Zug
            {
                zuFeld.SetSteinBesetzung(vonFeld.GetSteinBesetzung());              //setze Stein auf neues Feld
                vonFeld.GetSteinBesetzung().GetComponent <Stein>().SetFeld(zuFeld); //setze neues Feld im Stein
                vonFeld.SetSteinBesetzung(null);                                    //loesche Stein von altem Feld
                if (c != null)
                {
                    foreach (Feld f in c)
                    {
                        if (f.GetSteinBesetzung() != null)
                        {
                            //Debug.Log("Geschlagener Stein wird entfernt");
                            if (f.GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Schwarz)
                            {
                                GameObject.Find("BlackCountMessage").GetComponent <Text>().text = "Schwarz: " + --this.backCount;
                            }
                            else
                            {
                                GameObject.Find("WhiteCountMessage").GetComponent <Text>().text = "Weiß: " + --this.whiteCount;
                            }

                            f.GetSteinBesetzung().GetComponent <Stein>().SetFeld(null);                 //loeschen des Feldes des Steins
                            Destroy(f.GetSteinBesetzung().GetComponent <Stein>().transform.gameObject); // loeschen des Gameobjects
                            f.SetSteinBesetzung(null);                                                  //loeschen des Steins auf dem Feld

                            //Debug.Log("Geschlagener Stein wurde entfernt");
                        }
                    }
                }
                wirdDame = this.regelwerk.WirdZuDame(zuFeld, this.aktuellerSpieler);
                if (wirdDame)
                {
                    if (zuFeld.GetSteinBesetzung().GetComponent <Stein>().IsDame())
                    {
                        Debug.Log("Stein ist bereits Dame");
                    }
                    else
                    {
                        Debug.Log("Stein wird zu Dame");
                        zuFeld.GetSteinBesetzung().GetComponent <Stein>().SetDame();

                        GameObject.Find("Audio Source Dame").GetComponent <AudioSource>().Play();

                        /*/ ALTERNATIVE: Beim erstellen der Steine auch gleich allen ein Dame-Modell geben, dieses dann hier sichtbar schalten
                         * Stein steinSkript = zuFeld.GetSteinBesetzung().GetComponent<Stein>(); // get old script
                         * GameObject dame = Instantiate(Resources.Load("Dame")) as GameObject; // load new model
                         * dame.AddComponent<Stein>(); // add old script to new model
                         * dame.GetComponent<Stein>().instantiate(steinSkript.GetFarbe(), steinSkript.GetFeld());
                         * dame.GetComponent<Stein>().SetDame(true);
                         * Destroy(zuFeld.GetSteinBesetzung()); // delete old model (and script)
                         * zuFeld.SetSteinBesetzung(null);
                         * zuFeld.SetSteinBesetzung(dame); // put model on the board
                         */
                    }
                }



                this.HasWon();
                this.EndTurn();

                // Will break with board > 10
                // Example: move;7564
            }
            else
            {
                Debug.Log("Ungueltiger Zug");
            }

            return(b);
        }
Exemple #11
0
 public override bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett)
 {
     throw new NotImplementedException();
 }
Exemple #12
0
 public abstract List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett);
Exemple #13
0
 public abstract List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett);
Exemple #14
0
 public override Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
 {
     return(false);
 }
Exemple #15
0
        public Feld Schlag(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
        {
            Feld zuSchlagen = null;


            if (!doppelDameFlag && startSteinBesetzung.GetComponent <Stein>().IsDame() &&
                s.GetFarbe() == startSteinBesetzung.GetComponent <Stein>().GetFarbe())       //gehoert Stein zu aktuellem Spieler?
            {
                Debug.Log("Feld ist rechts oben");
                for (int counter = 1; counter < brett.GetBreite(); counter++)
                {
                    //rechts oben
                    if (vonFeld.GetPositionX() + counter < brett.GetBreite() &&
                        vonFeld.GetPositionY() + counter < brett.GetBreite() &&
                        brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() + counter].GetSteinBesetzung() != null &&
                        brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() + counter].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() != s.GetFarbe())
                    {
                        if (zuFeld.GetPositionX() == vonFeld.GetPositionX() + counter + 1 &&   //Stimmen zuFeldKoordinaten?
                            zuFeld.GetPositionY() == vonFeld.GetPositionY() + counter + 1 &&
                            (brett.GetFelder()[vonFeld.GetPositionX() + counter - 1, vonFeld.GetPositionY() + counter - 1].GetSteinBesetzung() == null ||
                             brett.GetFelder()[vonFeld.GetPositionX() + counter - 1, vonFeld.GetPositionY() + counter - 1].GetSteinBesetzung() == startSteinBesetzung))
                        {
                            Debug.Log("Dame schlägt");
                            zuSchlagen     = brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() + counter];
                            doppelDameFlag = true;
                        }
                        break;
                    }
                }
                for (int counter = 1; counter < brett.GetBreite(); counter++)
                {
                    //links unten
                    if (vonFeld.GetPositionX() - counter > 0 &&
                        vonFeld.GetPositionY() - counter > 0 &&
                        brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() - counter].GetSteinBesetzung() != null &&
                        brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() - counter].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() != s.GetFarbe())
                    {
                        if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - counter - 1 &&   //Stimmen zuFeldKoordinaten?
                            zuFeld.GetPositionY() == vonFeld.GetPositionY() - counter - 1 &&
                            (brett.GetFelder()[vonFeld.GetPositionX() - counter + 1, vonFeld.GetPositionY() - counter + 1].GetSteinBesetzung() == null ||
                             brett.GetFelder()[vonFeld.GetPositionX() - counter + 1, vonFeld.GetPositionY() - counter + 1].GetSteinBesetzung() == startSteinBesetzung))
                        {
                            Debug.Log("Dame schlägt");
                            zuSchlagen     = brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() - counter];
                            doppelDameFlag = true;
                        }
                        break;
                    }
                }

                for (int counter = 1; counter < brett.GetBreite(); counter++)
                {
                    //links oben
                    if (vonFeld.GetPositionX() - counter > 0 &&
                        vonFeld.GetPositionY() + counter < brett.GetBreite() &&
                        brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() + counter].GetSteinBesetzung() != null &&
                        brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() + counter].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() != s.GetFarbe())
                    {
                        if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - counter - 1 &&   //Stimmen zuFeldKoordinaten?
                            zuFeld.GetPositionY() == vonFeld.GetPositionY() + counter + 1 &&
                            (brett.GetFelder()[vonFeld.GetPositionX() - counter + 1, vonFeld.GetPositionY() + counter - 1].GetSteinBesetzung() == null ||
                             brett.GetFelder()[vonFeld.GetPositionX() - counter + 1, vonFeld.GetPositionY() + counter - 1].GetSteinBesetzung() == startSteinBesetzung))
                        {
                            Debug.Log("Dame schlägt");
                            zuSchlagen     = brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() + counter];
                            doppelDameFlag = true;
                        }
                        break;
                    }
                }

                for (int counter = 1; counter < brett.GetBreite(); counter++)
                {
                    //rechts unten
                    if (vonFeld.GetPositionX() + counter < brett.GetBreite() &&
                        vonFeld.GetPositionY() - counter > 0 &&
                        brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() - counter].GetSteinBesetzung() != null &&
                        brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() - counter].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() != s.GetFarbe())
                    {
                        if (zuFeld.GetPositionX() == vonFeld.GetPositionX() + counter + 1 &&   //Stimmen zuFeldKoordinaten?
                            zuFeld.GetPositionY() == vonFeld.GetPositionY() - counter - 1 &&
                            (brett.GetFelder()[vonFeld.GetPositionX() + counter - 1, vonFeld.GetPositionY() - counter + 1].GetSteinBesetzung() == null ||
                             brett.GetFelder()[vonFeld.GetPositionX() + counter - 1, vonFeld.GetPositionY() - counter + 1].GetSteinBesetzung() == startSteinBesetzung))
                        {
                            Debug.Log("Dame schlägt");
                            zuSchlagen     = brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() - counter];
                            doppelDameFlag = true;
                        }
                        break;
                    }
                }
            }

            else if (s.GetFarbe() == Farbe.Weiß &&
                     startSteinBesetzung.GetComponent <Stein>().GetFarbe() == Farbe.Weiß)
            {
                if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - 2 &&
                    zuFeld.GetPositionY() == vonFeld.GetPositionY() + 2 &&                                                                                            //das Feld links oben
                    brett.GetFelder()[vonFeld.GetPositionX() - 1, vonFeld.GetPositionY() + 1].GetSteinBesetzung() != null &&
                    brett.GetFelder()[vonFeld.GetPositionX() - 1, vonFeld.GetPositionY() + 1].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Schwarz) //ist dazwischen ein Gegner?
                {
                    Debug.Log("Weiß schlägt links oben");
                    zuSchlagen = brett.GetFelder()[vonFeld.GetPositionX() - 1, vonFeld.GetPositionY() + 1];
                }
                else if (zuFeld.GetPositionX() == vonFeld.GetPositionX() + 2 &&
                         zuFeld.GetPositionY() == vonFeld.GetPositionY() + 2 &&                                                                                            // das Feld rechts oben
                         brett.GetFelder()[vonFeld.GetPositionX() + 1, vonFeld.GetPositionY() + 1].GetSteinBesetzung() != null &&
                         brett.GetFelder()[vonFeld.GetPositionX() + 1, vonFeld.GetPositionY() + 1].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Schwarz) //ist dazwischen ein Gegner?
                {
                    Debug.Log("Weiß schlägt rechts oben");
                    zuSchlagen = brett.GetFelder()[vonFeld.GetPositionX() + 1, vonFeld.GetPositionY() + 1];
                }
            }
            else if (s.GetFarbe() == Farbe.Schwarz &&
                     startSteinBesetzung.GetComponent <Stein>().GetFarbe() == Farbe.Schwarz)
            {
                if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - 2 &&
                    zuFeld.GetPositionY() == vonFeld.GetPositionY() - 2 &&                                                                                         //das Feld links unten
                    brett.GetFelder()[vonFeld.GetPositionX() - 1, vonFeld.GetPositionY() - 1].GetSteinBesetzung() != null &&
                    brett.GetFelder()[vonFeld.GetPositionX() - 1, vonFeld.GetPositionY() - 1].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Weiß) //ist dazwischen ein Gegner?
                {
                    Debug.Log("Schwarz schlägt links unten");
                    zuSchlagen = brett.GetFelder()[vonFeld.GetPositionX() - 1, vonFeld.GetPositionY() - 1];
                }
                else if (zuFeld.GetPositionX() == vonFeld.GetPositionX() + 2 &&
                         zuFeld.GetPositionY() == vonFeld.GetPositionY() - 2 &&                                                                                         // das Feld rechts unten
                         brett.GetFelder()[vonFeld.GetPositionX() + 1, vonFeld.GetPositionY() - 1].GetSteinBesetzung() != null &&
                         brett.GetFelder()[vonFeld.GetPositionX() + 1, vonFeld.GetPositionY() - 1].GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Weiß) //ist dazwischen ein Gegner?
                {
                    Debug.Log("Schwarz schlägt rechts unten");
                    zuSchlagen = brett.GetFelder()[vonFeld.GetPositionX() + 1, vonFeld.GetPositionY() - 1];
                }
            }

            return(zuSchlagen);
        }
Exemple #16
0
 public override List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
 {
     return(null);
 }
Exemple #17
0
 public abstract Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett);
Exemple #18
0
 public override Boolean WirdZuDame(Feld zuFeld, Spieler s)
 {
     return(false);
 }
Exemple #19
0
 public abstract Boolean WirdZuDame(Feld zuFeld, Spieler s);
Exemple #20
0
 public override List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett)
 {
     return(null);
 }
Exemple #21
0
 // For performance
 public abstract bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett);
Exemple #22
0
        public override Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
        {
            bool b = false;

            //Debug.Log("Ist Dame: " + vonFeld.GetSteinBesetzung().GetComponent<Stein>().IsDame());


            if (zuFeld.GetFarbe() == Farbe.Schwarz)                 //ist Zielfeld ueberhaupt Schwarz?
            {
                //DamenMove:
                if (vonFeld.GetSteinBesetzung().GetComponent <Stein>().IsDame() &&              //ist Stein Dame?
                    s.GetFarbe() == vonFeld.GetSteinBesetzung().GetComponent <Stein>().GetFarbe())                           //gehoert Stein zu aktuellem Spieler?
                {
                    Debug.Log("Dame darf ziehen");
                    for (int counter = 1; counter <= brett.GetBreite(); counter++)                       //Zaehle Felder ab falls jemand dazwischen TODO: 8 muss noch an flexible Brettlaenge angepasst werden
                    {
                        Debug.Log("zaehlt: " + counter);

                        /*if (vonFeld.GetPositionX() - counter < 0 || vonFeld.GetPositionY() - counter < 0
                        || vonFeld.GetPositionX() - counter > 8 || vonFeld.GetPositionY() - counter > 8)    //ist Zaehler noch auf dem Brett TODO: Brettgroesse
                        || {
                        || Debug.Log("Counter aus dem Zaehlerbereich");
                        || break;
                        || }*/
                        if (zuFeld.GetPositionX() < vonFeld.GetPositionX() && zuFeld.GetPositionY() < vonFeld.GetPositionY())                           //ist Feld links unten?
                        {
                            Debug.Log("Feld ist links unten");
                            if (vonFeld.GetPositionX() - counter >= 0 &&
                                vonFeld.GetPositionY() - counter >= 0 &&
                                brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() - counter].GetSteinBesetzung() == null) //ist etwas im Weg?
                            {
                                if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - counter &&                                                   //Stimmen zuFeldKoordinaten?
                                    zuFeld.GetPositionY() == vonFeld.GetPositionY() - counter)
                                {
                                    Debug.Log("Dame zieht");
                                    b = true;
                                    break;
                                }
                            }
                            else
                            {
                                Debug.Log("Stein im Weg");
                                break;
                            }
                        }
                        if (zuFeld.GetPositionX() > vonFeld.GetPositionX() && zuFeld.GetPositionY() > vonFeld.GetPositionY())                           //ist Feld rechts oben?
                        {
                            Debug.Log("Feld ist rechts oben");
                            if (vonFeld.GetPositionX() + counter < brett.GetBreite() &&
                                vonFeld.GetPositionY() + counter < brett.GetBreite() &&
                                brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() + counter].GetSteinBesetzung() == null) //ist etwas im Weg?
                            {
                                if (zuFeld.GetPositionX() == vonFeld.GetPositionX() + counter &&                                                   //Stimmen zuFeldKoordinaten?
                                    zuFeld.GetPositionY() == vonFeld.GetPositionY() + counter)
                                {
                                    Debug.Log("Dame zieht");
                                    b = true;
                                    break;
                                }
                            }
                            else
                            {
                                Debug.Log("Stein im Weg");
                                break;
                            }
                        }
                        else if (zuFeld.GetPositionX() < vonFeld.GetPositionX() && zuFeld.GetPositionY() > vonFeld.GetPositionY())                           //ist Feld links oben?
                        {
                            Debug.Log("Feld ist links oben");
                            if (vonFeld.GetPositionX() - counter >= 0 &&
                                vonFeld.GetPositionY() + counter < brett.GetBreite() &&
                                brett.GetFelder()[vonFeld.GetPositionX() - counter, vonFeld.GetPositionY() + counter].GetSteinBesetzung() == null) //ist etwas im Weg?
                            {
                                if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - counter &&                                                   //Stimmen zuFeldKoordinaten?
                                    zuFeld.GetPositionY() == vonFeld.GetPositionY() + counter)
                                {
                                    Debug.Log("Dame zieht");
                                    b = true;
                                    break;
                                }
                            }
                            else
                            {
                                Debug.Log("Stein im Weg");
                                break;
                            }
                        }
                        else if (zuFeld.GetPositionX() > vonFeld.GetPositionX() && zuFeld.GetPositionY() < vonFeld.GetPositionY())                           //ist Feld rechts unten?
                        {
                            Debug.Log("Feld ist rechts unten");
                            if (vonFeld.GetPositionX() + counter < brett.GetBreite() &&
                                vonFeld.GetPositionY() - counter >= 0 &&
                                brett.GetFelder()[vonFeld.GetPositionX() + counter, vonFeld.GetPositionY() - counter].GetSteinBesetzung() == null) //ist etwas im Weg?
                            {
                                if (zuFeld.GetPositionX() == vonFeld.GetPositionX() + counter &&                                                   //Stimmen zuFeldKoordinaten?
                                    zuFeld.GetPositionY() == vonFeld.GetPositionY() - counter)
                                {
                                    Debug.Log("Dame zieht");
                                    b = true;
                                    break;
                                }
                            }
                            else
                            {
                                Debug.Log("Stein im Weg");
                                break;
                            }
                        }
                    }
                }

                //NormalerStein Move:
                else if (s.GetFarbe() == Farbe.Weiß &&
                         vonFeld.GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Weiß)                   //fuer weissen Stein
                {
                    if (zuFeld.GetSteinBesetzung() == null)
                    {
                        if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - 1 && zuFeld.GetPositionY() == vonFeld.GetPositionY() + 1 || zuFeld.GetPositionX() == vonFeld.GetPositionX() + 1 && zuFeld.GetPositionY() == vonFeld.GetPositionY() + 1)                           // das Feld links oben oder rechts oben
                        {
                            //Debug.Log("Weiß zieht");
                            b = true;
                        }
                    }
                }
                else if (s.GetFarbe() == Farbe.Schwarz &&
                         vonFeld.GetSteinBesetzung().GetComponent <Stein>().GetFarbe() == Farbe.Schwarz)                     //fuer schwarzen Stein
                {
                    if (zuFeld.GetSteinBesetzung() == null)
                    {
                        if (zuFeld.GetPositionX() == vonFeld.GetPositionX() - 1 && zuFeld.GetPositionY() == vonFeld.GetPositionY() - 1 || zuFeld.GetPositionX() == vonFeld.GetPositionX() + 1 && zuFeld.GetPositionY() == vonFeld.GetPositionY() - 1)                           // das Feld links unten oder rechts unten
                        {
                            //Debug.Log("Schwarz zieht");
                            b = true;
                        }
                    }
                }
            }
            return(b);
        }