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); }
// 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; } } } } }
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); }