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); }
// 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); }
//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 }
//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) } } } } }
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; }
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); }
// 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); }
public void instantiate(Farbe farbe, Feld feld) { this.SetFarbe(farbe); this.SetFeld(feld); // this.SetDame(false); }
// 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; } } } } }
//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); }
public override bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett) { throw new NotImplementedException(); }
public abstract List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett);
public abstract List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett);
public override Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett) { return(false); }
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); }
public override List <Feld> Schlagen(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett) { return(null); }
public abstract Boolean MoveStein(Feld vonFeld, Feld zuFeld, Spieler s, Brett brett);
public override Boolean WirdZuDame(Feld zuFeld, Spieler s) { return(false); }
public abstract Boolean WirdZuDame(Feld zuFeld, Spieler s);
public override List <Feld> GetMoves(Feld vonFeld, Spieler spieler, Brett brett) { return(null); }
// For performance public abstract bool CanTokenMove(Feld vonFeld, Spieler spieler, Brett brett);
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); }