예제 #1
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)
                        }
                    }
                }
            }
        }
예제 #2
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
        }
예제 #3
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);
        }
예제 #4
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);
        }
예제 #5
0
파일: Spiel.cs 프로젝트: eightfour/Checkers
        //wird verwendet um herauszufinden wer gewonnen hat
        public void HasWon()
        {
            Spieler gewinner = this.regelwerk.HasWon(this.spielerSpeicher, this.brett, this.aktuellerSpieler);

            if (gewinner != null)
            {
                GameObject.Find("Audio Source Victory").GetComponent <AudioSource>().Play();
                MenuBackground.SetActive(true);
                GameObject.Find("PauseMenu").SetActive(false);
                GameObject.Find("VictoryMenu").SetActive(true);
                GameObject.Find("VictoryMessage").GetComponent <Text>().text = "Glückwunsch!\n" + gewinner.GetFarbe() + " hat das Spiel gewonnen!";
            }
        }
예제 #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);
        }
예제 #7
0
파일: Spiel.cs 프로젝트: eightfour/Checkers
        public void SetAktuellerSpieler(Spieler aktuellerSpieler)
        {
            if (aktuellerSpieler == null)
            {
                throw new ArgumentException("Der aktuelle Spieler muss gesetzt werden!");
            }
            this.aktuellerSpieler = aktuellerSpieler;

            GameObject.Find("CurrentPlayerMessage").GetComponent <Text>().text = "Am Zug: " + aktuellerSpieler.GetFarbe();

            // Mark all tokens that can move this turn
            MarkMovableTokens();
        }
예제 #8
0
        // Checks if a player still has moves left
        public bool CanPlayerMove(Spieler s, Brett brett)
        {
            for (int x = 0; x < brett.GetComponent <Brett>().GetBreite(); x++)
            {
                for (int y = 0; y < brett.GetComponent <Brett>().GetHöhe(); y++)
                {
                    GameObject stein = brett.GetFelder()[x, y].GetSteinBesetzung();

                    if (stein != null)
                    {
                        // Returns true as soon as a single token has a single valid move left
                        if (CanTokenMove(stein.GetComponent <Stein>().GetFeld(), s, brett))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
예제 #9
0
파일: Spiel.cs 프로젝트: eightfour/Checkers
        public void Start()
        {
            CreateGame("Regelwerk1", 8, 8);

            if (NetworkModel.server)
            {
                netzwerk.Starten(this, OperationMode.Server);
                self = spielerSpeicher[0];
            }
            else if (NetworkModel.client)
            {
                netzwerk.Starten(this, OperationMode.Client);
                GameObject.Find("Main Camera").GetComponent <CameraControl>().SpinCamera();
                self = spielerSpeicher[1];
            }

            this.SetAktuellerSpieler(this.spielerSpeicher[0]);

            GameObject.Find("BlackCountMessage").GetComponent <Text>().text = "Schwarz: " + backCount;
            GameObject.Find("WhiteCountMessage").GetComponent <Text>().text = "Weiß: " + whiteCount;
        }
예제 #10
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);
        }
예제 #11
0
        public override Spieler HasWon(Spieler[] spielerspeicher, Brett brett, Spieler aktuellerSpieler)
        {
            Spieler next;

            if (aktuellerSpieler.GetFarbe() == spielerspeicher[0].GetFarbe())
            {
                next = spielerspeicher[1];
            }
            else
            {
                next = spielerspeicher[0];
            }
            // Nächster spieler kann nicht ziehen
            if (!CanPlayerMove(next, brett))              //haswon wird am ende des zuges geprüft somit ist der !aktuelleSpieler Zugunfähig wenn er an der Reihe ist
            {
                return(aktuellerSpieler);
            }
            // Nachfolgender spieler kann noch ziehen
            else
            {
                return(null);
            }
        }
예제 #12
0
 public override Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
 {
     return(false);
 }
예제 #13
0
 public override bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett)
 {
     throw new NotImplementedException();
 }
예제 #14
0
 public override List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett)
 {
     return(null);
 }
예제 #15
0
 public override Boolean WirdZuDame(Feld zuFeld, Spieler s)
 {
     return(false);
 }
예제 #16
0
 public abstract List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett);
예제 #17
0
 public abstract List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett);
예제 #18
0
 public abstract Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett);
예제 #19
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);
        }
예제 #20
0
 public abstract Spieler HasWon(Spieler[] spielerspeicher, Brett brett, Spieler aktuellerSpieler);
예제 #21
0
        public override Spieler HasWon(Spieler[] spielerspeicher, Brett brett, Spieler aktuellerSpieler)
        {
            Spieler s = null;

            return(s);
        }
예제 #22
0
 public abstract Boolean WirdZuDame(Feld zuFeld, Spieler s);
예제 #23
0
 public override List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett)
 {
     return(null);
 }
예제 #24
0
 // For performance
 public abstract bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett);
예제 #25
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);
        }