예제 #1
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);
        }
예제 #2
0
파일: Spiel.cs 프로젝트: eightfour/Checkers
        // 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;
                        }
                    }
                }
            }
        }
예제 #3
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);
        }
예제 #4
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);
        }