Ejemplo n.º 1
0
        /*
         * Hier werden die verschiedenen Moeglichkeiten bei der Figurauswahl ausgewertet
         * 1) Keine Figur ausgewaehl, und Feld ist leer
         * 2) Keine Figur ausgewaehlt, auf dem Feld ist eine Figur
         * 3) Figur ist ausgewaehlt, aber andere Figur wird ausgewaehlt (kein schmeissen, da eigene Farbe)
         * 4) Figur ist ausgewaehlt, und Feld ohne Figur / mit Gegner Figur wird angeklickt
         */
        private void panel_Click(object sender, EventArgs e)
        {
            Figur figur = (Figur)((Panel)sender).Tag;
            Panel panel = ((Panel)sender);


            // 1) Ist keine Figur angewaehlt und das Feld ist leer --> return
            if (figur == null && !figurAngewaehlt)
            {
                return;
            }



            // 2) keine Figur angewaehlt, das Feld ist nicht leer --> Felder markieren und Figur merken
            // Figurfarbe muss der FarbeAmZug entsprechen.
            if (figur != null && !figurAngewaehlt && figur.Farbe == farbeAmZug)
            {
                this.ausgewaehlteFigur = figur;

                if (ausgewaehlteFigur.listMoeglicheFelder() == null)
                {
                    ausgewaehlteFigur = null;
                    figurAngewaehlt   = false;
                    return;
                }

                felderMarkieren(figur);
                figurAngewaehlt = true;
                return;
            }

            // 3) Figur ist angewaehlt, andere Figur wird ausgewaehlt (kein moeglicher Zug)
            // --> Es ist eine Figur angewaehlt, und das Panel was angeklickt wird,
            // faellt nicht unter die Liste der moeglichen Zuege.
            // Figurfarbe muss der FarbeAmZug entsprechen.
            if (figurAngewaehlt && figur != null &&
                !Figur.zugMoeglich(panel.Name, ausgewaehlteFigur.listMoeglicheFelder()) &&
                figur.Farbe == farbeAmZug
                )
            {
                // Falls keine moeglichen Zuege, figur abwaehlen und abbrechen
                if (ausgewaehlteFigur.listMoeglicheFelder() == null)
                {
                    ausgewaehlteFigur = null;
                    figurAngewaehlt   = false;
                    return;
                }

                zurueckSetzenBorder();
                ausgewaehlteFigur = figur;
                felderMarkieren(figur);
                return;
            }

            // 4) Figur ist angewaehlt --> pruefen ob Feld in moegliche Zuege, und dann ziehen, ansonsten
            // Figur angewaehlt lassen
            if (figurAngewaehlt &&
                Figur.zugMoeglich(panel.Name, ausgewaehlteFigur.listMoeglicheFelder()))
            {
                // Keine Zuege moeglich (z.B. Turm ganz am Anfang, wenn noch Bauern drum stehen)
                // --> Figuren abwaehlen --> Pruefen!
                if (ausgewaehlteFigur.listMoeglicheFelder() == null)
                {
                    figurAngewaehlt   = false;
                    ausgewaehlteFigur = null;
                    return;
                }

                // Rochade
                //--------------------------------------------------------------
                if (ausgewaehlteFigur.GetType() == typeof(Koenig))
                {
                    // Ist das angeklickte Feld ein Turm, mit dem eine Rochade moeglich ist?
                    if (((Koenig)ausgewaehlteFigur).Rochade(panel.Name) != null)
                    {
                        Rochade rochade = ((Koenig)ausgewaehlteFigur).Rochade(panel.Name);
                        Debug.WriteLine("Feld Koenig " + rochade.FeldKoenig + " Feld Turm " + rochade.FeldTurm +
                                        " Zielfeld Koenig  " + rochade.ZielFeldKoenigRochade + "Zielfeld Turm " + rochade.ZielFeldTurmRochade);
                        rochadeZug(rochade);

                        figurAngewaehlt = false;
                        zurueckSetzenBorder();
                        this.farbeAmZug = farbeAmZugAendern();

                        return;
                    }
                }



                //--------------------------------------------------------------
                // Die Figur an das angeklickte Panel verschieben
                figurVerschieben(this.Controls.Find(panel.Name, true).First());


                // Figur vom alten Panel "entfernen
                figureVonPanelEntfernen(this.Controls.Find(ausgewaehlteFigur.AktuellePosition, true).First());

                // Position vom Objekt aktualisieren
                ausgewaehlteFigur.AktuellePosition = panel.Name;
                if (ausgewaehlteFigur.GetType() == typeof(Bauer) &&
                    ((Bauer)ausgewaehlteFigur).EntfernterKey != String.Empty)
                {
                    setControlNull(this.Controls.Find(((Bauer)ausgewaehlteFigur).EntfernterKey, true).First());
                }
                // Bauernumwandlung
                if (ausgewaehlteFigur.GetType() == typeof(Bauer) &&
                    ((Bauer)ausgewaehlteFigur).spielFeldEndeEreicht())
                {
                    frmBauernumwandlung bauernumWandlung = new frmBauernumwandlung(ausgewaehlteFigur.Farbe, ausgewaehlteFigur.AktuellePosition, dctFigur);

                    if (bauernumWandlung.ShowDialog() == DialogResult.OK)
                    {
                        removeVonDictionary(bauernumWandlung.NeueFigur.AktuellePosition);
                        setControlNull(this.Controls.Find(bauernumWandlung.NeueFigur.AktuellePosition, true).First());
                        setControl(bauernumWandlung.NeueFigur, this.Controls.Find(bauernumWandlung.NeueFigur.AktuellePosition, true).First());
                    }
                }

                figurAngewaehlt = false;
                zurueckSetzenBorder();

                this.farbeAmZug = farbeAmZugAendern();
            }
        }
Ejemplo n.º 2
0
 private void rochadeZug(Rochade rochade)
 {
     rochadeDictUndFigurAktualisieren(rochade.FeldKoenig, rochade.ZielFeldKoenigRochade, rochade.Koenig);
     rochadeDictUndFigurAktualisieren(rochade.FeldTurm, rochade.ZielFeldTurmRochade, rochade.Turm);
 }
Ejemplo n.º 3
0
        private static KeyValuePair <string, Figur> figurErmitteln(string zug, Farbe farbe)
        {
            switch (zug[0])
            {
            // Rochade

            case 'O':
                Rochade rochade = null;
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Koenig)))
                    {
                        if (zug == "O-O")
                        {
                            rochade = getRochade(figur.Value, linienFeldVerschiebung(figur.Value.AktuellePosition, +3));
                        }
                        else
                        {
                            rochade = getRochade(figur.Value, linienFeldVerschiebung(figur.Value.AktuellePosition, -4));
                        }
                    }
                }
                try
                {
                    setDictionary(rochade.ZielFeldKoenigRochade, rochade.Koenig);
                    setDictionary(rochade.ZielFeldTurmRochade, rochade.Turm);
                    removeVonDictionary(rochade.FeldKoenig);
                    removeVonDictionary(rochade.FeldTurm);
                    rochade.Turm.AktuellePosition   = rochade.ZielFeldTurmRochade;
                    rochade.Koenig.AktuellePosition = rochade.ZielFeldKoenigRochade;
                } catch (Exception e) { Debug.WriteLine("Rochade: " + e.Message); }

                break;

            case 'P':

                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Bauer)))
                    {
                        // Ist beim Bauernzug ein "=" enthalten, wird eine Bauernumwandlung durchgefuehrt
                        // Das heisst, das aus dem Bauer eine neue FIgur entshtet
                        // bsp e8=Q --> Bauer wird zur Dame
                        if (zug.Contains("="))
                        {
                            string tmpZielFeld = zug.Substring(1, 2);

                            if (Bewegen(figur.Value, zug.Substring(0, 3)))
                            {
                                Debug.WriteLine("--------------Anfang-----------------------");
                                foreach (KeyValuePair <string, Figur> miau in dctFigur)
                                {
                                    Debug.WriteLine("Key: " + miau.Key + " figur" + miau.Value);
                                }
                                Debug.WriteLine("-------------------------------------------");
                                Figur neueFigur = BauernUmwandlung(zug[zug.Length - 1], figur.Value, tmpZielFeld);
#if true
                                Debug.WriteLine("neue Figur:" + neueFigur + " aktPos " + neueFigur.AktuellePosition + "Bildname " + neueFigur.BildName);
                                Debug.WriteLine("alte Figur:" + figur.Value + " aktPos " + figur.Value.AktuellePosition + "Bildname " + figur.Value.BildName);
#endif
                                setDictionary(tmpZielFeld, neueFigur);
                                removeVonDictionary(figur.Value.AktuellePosition);
                                break;
                            }
                            // Den Rest ueberspringen, weil nicht relevant
                            continue;
                        }

                        if (Bewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                        // Pferd schmeisst, ohne das anderes Pferd der gleichen Farbe schmeissen kann
                        // Nxe4 --> x = schmeissen, e4 = Zielfeld
                        // x steht immer an der 2ten Stelle
                        if (Schmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheLinieSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheLinieBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheReiheSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheReiheBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                    }
                }
                break;

            case 'K':
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Koenig)))
                    {
                        if (Bewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                        // Pferd schmeisst, ohne das anderes Pferd der gleichen Farbe schmeissen kann
                        // Nxe4 --> x = schmeissen, e4 = Zielfeld
                        // x steht immer an der 2ten Stelle
                        if (Schmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheLinieSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheLinieBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                    }
                }
                break;

            case 'Q':
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Dame)))
                    {
                        if (Bewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                        // Pferd schmeisst, ohne das anderes Pferd der gleichen Farbe schmeissen kann
                        // Nxe4 --> x = schmeissen, e4 = Zielfeld
                        // x steht immer an der 2ten Stelle
                        if (Schmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheLinieSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheLinieBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                    }
                }
                break;

            case 'B':
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Laeufer)))
                    {
                        if (Bewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                        // Pferd schmeisst, ohne das anderes Pferd der gleichen Farbe schmeissen kann
                        // Nxe4 --> x = schmeissen, e4 = Zielfeld
                        // x steht immer an der 2ten Stelle
                        if (Schmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheLinieSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheLinieBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                    }
                }
                break;

            case 'N':
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Pferd)))
                    {
                        if (Bewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                        // Pferd schmeisst, ohne das anderes Pferd der gleichen Farbe schmeissen kann
                        // Nxe4 --> x = schmeissen, e4 = Zielfeld
                        // x steht immer an der 2ten Stelle
                        if (Schmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheLinieSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheLinieBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheReiheSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheReiheBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                    }
                }
                break;

            case 'R':
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figur.Value.Farbe == farbe && (figur.Value.GetType() == typeof(Turm)))
                    {
                        if (Bewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                        // Pferd schmeisst, ohne das anderes Pferd der gleichen Farbe schmeissen kann
                        // Nxe4 --> x = schmeissen, e4 = Zielfeld
                        // x steht immer an der 2ten Stelle
                        if (Schmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheLinieSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheLinieBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        if (MehrereFigurenGleicheReiheSchmeissen(figur.Value, zug))
                        {
                            return(figur);
                        }

                        // bewegt sich, mehrere Figuren koennen den Zug durchfuehren
                        if (MehrereFigurenGleicheReiheBewegen(figur.Value, zug))
                        {
                            return(figur);
                        }
                    }
                }
                break;
            }

            return(new KeyValuePair <string, Figur>());
        }