/* * 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(); } }
private void rochadeZug(Rochade rochade) { rochadeDictUndFigurAktualisieren(rochade.FeldKoenig, rochade.ZielFeldKoenigRochade, rochade.Koenig); rochadeDictUndFigurAktualisieren(rochade.FeldTurm, rochade.ZielFeldTurmRochade, rochade.Turm); }
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>()); }