Пример #1
0
        public void spielSpeichern()
        {
            Figur[,] zwSpeicher = new Figur[8, 8];
            FileStream   fs    = new FileStream("..\\..\\Speicherdaten\\Speicher.txt", FileMode.Create, FileAccess.Write, FileShare.None);
            FileStream   stat  = new FileStream("..\\..\\Speicherdaten\\Stat.txt", FileMode.Create, FileAccess.Write, FileShare.None);
            StreamWriter sw    = new StreamWriter(fs);
            StreamWriter statw = new StreamWriter(stat);

            statw.WriteLine(wpunkte);
            statw.WriteLine(spunkte);
            statw.WriteLine(WeissAmZug);
            statw.WriteLine(KoenigGeschlagen);
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if (Feld[i, j] != null)
                    {
                        sw.WriteLine(i + "-" + j + "-" + Feld[i, j].ToString() + "|" + Feld[i, j].Weiss);
                    }
                    else
                    {
                        sw.WriteLine(i + "-" + j + "-" + "null" + "|null");
                    }
                }
            }
            sw.Close();
            statw.Close();
        }
Пример #2
0
        //------------------------------ Zum testen--------------------------
        private void reset(Reset resetValue)
        {
            zurueckSetzen();
            switch (resetValue)
            {
            case Reset.Bauernumwandlung:
                startPositionierungenB();
                break;

            case Reset.enPeasant:
                startPositionierungenEn();
                break;

            case Reset.Komplett:
                startPositionierungen();
                break;

            case Reset.Rochade:
                startPositionierungenR();
                break;
            }

            rdBWeiss.Checked                = true;
            btnStart.Enabled                = true;
            grpBoxFarbeBeginnt.Enabled      = true;
            this.ausgewaehlteFigur          = null;
            this.figurAngewaehlt            = false;
            this.farbeAmZug                 = Farbe.Weiss;
            this.grpBoxFarbeAmZug.BackColor = Color.White;
            this.rTextBoxZuege.Clear();
        }
Пример #3
0
        // Bauernumwandlung
        private static Figur BauernUmwandlung(char neueFigur, Figur figur, string neuePos)
        {
            string farbe;

            if (figur.Farbe == Farbe.Weiss)
            {
                farbe = "w";
            }
            else
            {
                farbe = "s";
            }
            switch (neueFigur)
            {
            case 'B': return(new Laeufer(figur.Farbe, neuePos, farbe + "Laeufer.png", dctFigur));

            case 'Q': return(new Dame(figur.Farbe, neuePos, farbe + "Dame.png", dctFigur));

            case 'N': return(new Pferd(figur.Farbe, neuePos, farbe + "Koenig.png", dctFigur));

            case 'R': return(new Turm(figur.Farbe, neuePos, farbe + "Turm.png", dctFigur));

            default: return(figur);
            }
        }
Пример #4
0
 // bewegt sich, mehrere (gleiche) Figuren koennen den Zug durchfuehren auf gleicher Reihe (1-8)
 private static bool MehrereFigurenGleicheReiheSchmeissen(Figur figur, string zug)
 {
     return(figur.listMoeglicheFelder().Contains(zielFeld(zug)) &&
            zug.Contains("x") &&
            zug[1] != 'x' &&
            figur.AktuellePosition.EndsWith(zug[1].ToString()));
 }
Пример #5
0
        // Dictionry aktualisieren
        private void setDictionary(string key, Figur figur)
        {
            if (this.dctFigur.ContainsKey(key))
            {
                this.dctFigur.Remove(key);
            }

            this.dctFigur.Add(key, figur);
        }
Пример #6
0
        private static void setDictionary(string key, Figur figur)
        {
            if (dctFigur.ContainsKey(key))
            {
                dctFigur.Remove(key);
            }

            dctFigur.Add(key, figur);
        }
Пример #7
0
        public void spielLaden()
        {
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    Feld[i, j] = null;
                }
            }
            Figur[,] zwSpeicher = new Figur[8, 8];
            FileStream   fs    = new FileStream("..\\..\\Speicherdaten\\Speicher.txt", FileMode.Open, FileAccess.Read, FileShare.None);
            FileStream   stat  = new FileStream("..\\..\\Speicherdaten\\Stat.txt", FileMode.Open, FileAccess.Read, FileShare.None);
            StreamReader sr    = new StreamReader(fs);
            StreamReader statr = new StreamReader(stat);

            string[] tmp1 = new string[4];
            for (int i = 0; i < 4; i++)
            {
                tmp1[i] = statr.ReadLine();
            }
            wpunkte          = Convert.ToInt32(tmp1[0]);
            wpunkte          = Convert.ToInt32(tmp1[1]);
            WeissAmZug       = Convert.ToBoolean(tmp1[2].ToLower());
            KoenigGeschlagen = Convert.ToBoolean(tmp1[3].ToLower());
            string[,] tmp    = new string[8, 8];
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    tmp[i, j] = sr.ReadLine();
                    switch (tmp[i, j].Substring(4, tmp[i, j].IndexOf("|") - 4))
                    {
                    case "Schach.Bauer": this.FigurHinzufuegen(new Bauer(Convert.ToBoolean(tmp[i, j].Substring(tmp[i, j].IndexOf("|") + 1).ToLower()), Convert.ToInt32(tmp[i, j].Substring(2, 1)), Convert.ToInt32(tmp[i, j].Substring(0, 1)), true, ref Feld)); break;

                    case "Schach.Turm": this.FigurHinzufuegen(new Turm(Convert.ToBoolean(tmp[i, j].Substring(tmp[i, j].IndexOf("|") + 1).ToLower()), Convert.ToInt32(tmp[i, j].Substring(2, 1)), Convert.ToInt32(tmp[i, j].Substring(0, 1)), true, ref Feld)); break;

                    case "Schach.Koenig": this.FigurHinzufuegen(new Koenig(Convert.ToBoolean(tmp[i, j].Substring(tmp[i, j].IndexOf("|") + 1).ToLower()), Convert.ToInt32(tmp[i, j].Substring(2, 1)), Convert.ToInt32(tmp[i, j].Substring(0, 1)), true, ref Feld)); break;

                    case "Schach.Dame": this.FigurHinzufuegen(new Dame(Convert.ToBoolean(tmp[i, j].Substring(tmp[i, j].IndexOf("|") + 1).ToLower()), Convert.ToInt32(tmp[i, j].Substring(2, 1)), Convert.ToInt32(tmp[i, j].Substring(0, 1)), true, ref Feld)); break;

                    case "Schach.Springer": this.FigurHinzufuegen(new Springer(Convert.ToBoolean(tmp[i, j].Substring(tmp[i, j].IndexOf("|") + 1).ToLower()), Convert.ToInt32(tmp[i, j].Substring(2, 1)), Convert.ToInt32(tmp[i, j].Substring(0, 1)), true, ref Feld)); break;

                    case "Schach.Bischhof": this.FigurHinzufuegen(new Bischhof(Convert.ToBoolean(tmp[i, j].Substring(tmp[i, j].IndexOf("|") + 1).ToLower()), Convert.ToInt32(tmp[i, j].Substring(2, 1)), Convert.ToInt32(tmp[i, j].Substring(0, 1)), true, ref Feld)); break;

                    case "null": Feld[i, j] = null; break;

                    default: break;
                    }
                }
            }
            sr.Close();
            statr.Close();
            aktualisiereBitmap();
        }
Пример #8
0
 public Rochade(string feldTurm, string zielFeldTurmRochade,
                string feldKoenig, string zielFeldKoenigRochade,
                Figur turm, Figur koenig)
 {
     this.feldTurm              = feldTurm;
     this.zielFeldTurmRochade   = zielFeldTurmRochade;
     this.feldKoenig            = feldKoenig;
     this.zielFeldKoenigRochade = zielFeldKoenigRochade;
     this.turm   = turm;
     this.koenig = koenig;
 }
Пример #9
0
 public Figur FigurEntfernen(int sp, int zeile)
 {
     try
     {
         Figur tmp = Feld[sp - 1, zeile - 1];
         Feld[sp - 1, zeile - 1] = null;
         aktualisiereBitmap();
         return(tmp);
     }
     catch
     {
         return(null);
     }
 }
Пример #10
0
 public void FigurHinzufuegen(Figur e)
 {
     try
     {
         if (e != null)
         {
             //e.sch = this;
         }
         Feld[e.Spalte, e.Zeile] = e;
         aktualisiereBitmap();
     }
     catch (Exception)
     {
         return;
     }
 }
Пример #11
0
        public Rochade Rochade(string feldKoordinaten)
        {
            int   neuePosKoenig = 1;
            int   neuePosTurm   = 2;
            int   richtung      = 1;
            Figur turm          = turmFuerRochade(feldKoordinaten);

            if (turm == null)
            {
                return(null);
            }
            // DIE POSITION IST VOM KOENIG AUSGEHEND!
            // --> 'a' ist die grosse Rochade
            if (turm.AktuellePosition[0] == 'h')
            {
                neuePosKoenig = 2;
                neuePosTurm   = 1;
            }
            // Grosse Rochade
            if (turm.AktuellePosition[0] == 'a')
            {
                neuePosKoenig = -2;
                neuePosTurm   = -1;
                richtung      = -1;
            }

            if (this.ersterZug && turm != null && turm.Farbe == this.farbe)
            {
                // Pruefen, ob eine Figur im Weg ist, bzw der Koenig auf den Feldern bedroht wird
                foreach (KeyValuePair <string, Figur> figur in dctFigur)
                {
                    if (figurImWeg(richtung))
                    {
                        return(null);
                    }
                    if (figur.Value.Farbe != this.farbe &&
                        rochadeFeldBedroht(figur.Value, richtung))
                    {
                        return(null);
                    }
                }
            }

            return(new Rochade(turm.AktuellePosition, linienFeldVerschiebung(neuePosTurm), this.aktuellePosition,
                               linienFeldVerschiebung(neuePosKoenig), turm, this));
        }
Пример #12
0
        /*
         * Beim Anklicken einer Figur werden Felder hervorgehoben, die die moeglichen Zuege darstellen
         */
        private void felderMarkieren(Figur neueFigur)
        {
            foreach (string t in neueFigur.listMoeglicheFelder())
            {
                Control c = this.Controls.Find(t, true).First();
                try
                {
                    moeglicheFelder.Add(c);
                }catch (Exception e)
                {
                    Debug.WriteLine(e.Message);
                }


                c.Paint += panel_PaintBorder;
                c.Invalidate();
            }
        }
Пример #13
0
        public void Waehle(int zeile, int spalte)
        {
            Console.WriteLine(zeile + " " + spalte);
            if (this.auswahlSpalte > -1 &&
                this.auswahlZeile > -1 &&
                Feld[this.auswahlSpalte, this.auswahlZeile] != null &&
                (Feld[this.auswahlSpalte, this.auswahlZeile].Weiss == this.WeissAmZug || this.isDebug) &&
                Feld[this.auswahlSpalte, this.auswahlZeile].kannBetreten(zeile, spalte) && !KoenigGeschlagen)
            {
                Feld[this.auswahlSpalte, this.auswahlZeile].FirstMove = false;
                Feld[this.auswahlSpalte, this.auswahlZeile].Spalte    = spalte;
                Feld[this.auswahlSpalte, this.auswahlZeile].Zeile     = zeile;

                Figur alteFigur = Feld[spalte, zeile];
                Feld[spalte, zeile] = Feld[this.auswahlSpalte, this.auswahlZeile];
                Feld[this.auswahlSpalte, this.auswahlZeile] = null;

                if (alteFigur != null)
                {
                    this.figurGeschlagen(alteFigur);
                }

                this.auswahlSpalte = -1;
                this.auswahlZeile  = -1;

                this.WeissAmZug = !this.WeissAmZug;
                this.werdeZurDame();
            }
            else if (this.auswahlSpalte == spalte && this.auswahlZeile == zeile)
            {
                this.auswahlSpalte = -1;
                this.auswahlZeile  = -1;
            }
            else if ((Feld[spalte, zeile] != null &&
                      Feld[spalte, zeile].Weiss == this.WeissAmZug) || this.isDebug)
            {
                this.auswahlSpalte = spalte;
                this.auswahlZeile  = zeile;
            }

            aktualisiereBitmap();
        }
Пример #14
0
        public void figurGeschlagen(Figur f)
        {
            if (!f.Weiss)
            {
                switch (f.ToString())
                {
                case "Schach.Bauer": wpunkte += 1; break;

                case "Schach.Turm": wpunkte += 5; break;

                case "Schach.Koenig": wpunkte += 15; this.ende(!f.Weiss, wpunkte, spunkte); break;

                case "Schach.Dame": wpunkte += 9; break;

                case "Schach.Springer": wpunkte += 3; break;

                case "Schach.Bischhof": wpunkte += 3; break;

                default: break;
                }
            }
            else
            {
                switch (f.ToString())
                {
                case "Schach.Bauer": spunkte += 1; break;

                case "Schach.Turm": spunkte += 5; break;

                case "Schach.Koenig": spunkte += 15; this.ende(!f.Weiss, wpunkte, spunkte); break;

                case "Schach.Dame": spunkte += 9; break;

                case "Schach.Springer": spunkte += 3; break;

                case "Schach.Bischhof": spunkte += 3; break;

                default: break;
                }
            }
        }
Пример #15
0
        private void btn_Click(object sender, EventArgs e)
        {
            Button tmpSender = (Button)sender;

            switch (tmpSender.Name)
            {
            case "btnDame":
                neueFigur = new Dame(this.farbe, this.position, tmpSender.Tag.ToString(), dctFigur);
                return;

            case "btnLaeufer":
                neueFigur = new Laeufer(this.farbe, this.position, tmpSender.Tag.ToString(), dctFigur);
                return;

            case "btnPferd":
                neueFigur = new Pferd(this.farbe, this.position, tmpSender.Tag.ToString(), dctFigur);
                return;

            case "btnTurm":
                neueFigur = new Turm(this.farbe, this.position, tmpSender.Tag.ToString(), dctFigur);
                return;
            }
        }
Пример #16
0
 // bewegt sich, mehrere (gleiche) Figuren koennen den Zug durchfuehren auf gleicher Reihe (1-8)
 private static bool MehrereFigurenGleicheReiheBewegen(Figur figur, string zug)
 {
     return(figur.listMoeglicheFelder().Contains(zielFeld(zug)) &&
            zug.Length > 3 &&
            figur.AktuellePosition.EndsWith(zug[1].ToString()));
 }
Пример #17
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>());
        }
Пример #18
0
 /**
  * Dem Panel werden die Figuren als Tags hinzugefuegt, weiterhin wird jede Figur
  * mit dem Key (Spielfeldname) in ein Dictionary geschrieben
  **/
 private void addFigur(Figur figur, Panel p)
 {
     p.Tag             = figur;
     p.BackgroundImage = figur.FigurBild;
     this.dctFigur.Add(p.Name, figur);
 }
Пример #19
0
 // Setzen des Tags und des Bildes des Panels
 private void setControl(Figur figur, Control c)
 {
     c.Tag             = figur;
     c.BackgroundImage = figur.FigurBild;
 }
Пример #20
0
 // Figur geht zu Feld --> Nc3 (N=Pferd, c3 = Zielfeld)
 private static bool Bewegen(Figur figur, string zug)
 {
     return(figur.listMoeglicheFelder().Contains(zielFeld(zug)) &&
            zug.Length == 3);
 }
Пример #21
0
        // Die Zuege der Rochade machen --> loeschen der Figur vom Feld, setzen der Figur aufs neue Feld
        // Position aktualisieren
        private void rochadeDictUndFigurAktualisieren(string aktuellesFeld, string zielFeld, Figur figur)
        {
            Control c = this.Controls.Find(zielFeld, true).First();

            setControl(figur, c);
            setControlNull(this.Controls.Find(aktuellesFeld, true).First());
            setDictionary(zielFeld, figur);
            removeVonDictionary(figur.AktuellePosition);
            figur.AktuellePosition = zielFeld;
        }
Пример #22
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();
            }
        }
Пример #23
0
 // Ist eines der RochadeFelder bedroht? (um die Uebersicht zu wahren in einer Extra Funktion
 // da die Abfrage sonst extrem lang wird)
 // ---------------------------------------------------------------------------------------
 private bool rochadeFeldBedroht(Figur figur, int richtung)
 {
     return(figur.listMoeglicheFelder().Contains(linienFeldVerschiebung(1 * richtung)) ||
            figur.listMoeglicheFelder().Contains(linienFeldVerschiebung(2 * richtung)) ||
            figur.listMoeglicheFelder().Contains(this.aktuellePosition));
 }
Пример #24
0
 private static Rochade getRochade(Figur figur, string zug)
 {
     return(((Koenig)figur).Rochade(zug));
 }
Пример #25
0
 // Fgiur schmeisst, ohne das andere (gleiche) Figur der gleichen Farbe schmeissen kann
 // Nxe4 --> x = schmeissen, e4 = Zielfeld
 // x steht immer an der 2ten Stelle
 private static bool Schmeissen(Figur figur, string zug)
 {
     return(figur.listMoeglicheFelder().Contains(zielFeld(zug)) &&
            zug[1] == 'x');
 }