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