public void SelecteerVakje(Vakje nieuwVakje, Spel spel) { if (Selected != null) //alleen als er al iets is geselecteerd { Vakje clicked = nieuwVakje; //voor de singleplayer Selected.schaakstuk.Verplaats(nieuwVakje, Selected, spel); //probeer het schaakstuk te verplaatsen Selected.Pbox.update(); //update het eerste vakje nieuwVakje.Pbox.update(); //update het tweede vakje Selected = null; //niets is meer geselecteerd if (ValideZet == true) //als het schaakstuk daar heen mag { spel.Selected = clicked; //voor de singleplayer spel.VeranderSpeler(); //de andere speler is aan zet if (spel.SpelMode == "Singleplayer") { spel.ComputerSpeler.Zet(clicked); // laat de computer op de mens reageren spel.VeranderSpeler(); } // De pion voor en-passant wordt weer vergeten. EnPassantPion = null; } ValideZet = false; } }
public void Zet(Vakje _pictures) { // Deze methode wordt aangeroepen door de mens nadat hij een zet heeft gedaan, de computer begint met deze methode aan zijn zet. _vorigVakje = spel.Selected; // slaat het door de speler geselecteerde vakje op _vorigSchaakstuk = spel.Selected.schaakstuk; // slaat het door de speler geselecteerde schaakstuk op bepaalMensPositie(); }
public void voerZetUit(Vakje geselecteerdStuk, Vakje geselecteerdVakje) { // Vanuit algoritme wordt deze methode aangeroepen en wordt er een zet uitgevoerd VerplaatsingsLijst.Add(geselecteerdVakje); // slaat de positie van de computerszet in lijst op geselecteerdStuk.schaakstuk.Verplaats(geselecteerdVakje, geselecteerdStuk, spel); geselecteerdStuk.Pbox.update(); //update het eerste vakje geselecteerdVakje.Pbox.update(); //update het tweede vakje geselecteerdStuk = null; //niets is meer geselecteerd }
} //wanneer het mogelijk is om te rokeren verschijnt een melding of je wilt rokeren public Koning(string kleur, Vakje vakje, Speler speler) { this.Kleur = kleur; this.Vakje = vakje; this.Speler = speler; if (kleur == "wit") { Afbeelding = Properties.Resources.KoningWit; } else { Afbeelding = Properties.Resources.KoningZwart; } }
public void SelecteerStuk(Vakje clicked, Spel spel) { if (Selected != null) //alleen als er al een stuk is geselecteerd { if (Selected.schaakstuk is Toren && clicked.schaakstuk is Koning) { //als het eerste stuk een toren is en het tweede een koning probeer dan te rokeren (clicked.schaakstuk as Koning).Rokeren(Selected, clicked, this, spel); DeselecteerStuk(); } else if (Selected.schaakstuk is Koning && clicked.schaakstuk is Toren) { //als het eerste stuk een koning is en het tweede een toren probeer dan te rokeren (Selected.schaakstuk as Koning).Rokeren(clicked, Selected, this, spel); DeselecteerStuk(); } } if (ValideZet == false) //als hij niet gerokeerd heeft { if (clicked == Selected) //als het stuk waarop geklikt is al geselecteerd was { DeselecteerStuk(); } else { if (Selected != null) //als er al een stuk geselecteerd staat { DeselecteerStuk(); } this.Selected = clicked; //het stuk waarop geklikt is wordt geselecteerd clicked.Pbox.BackColor = _selectColor; //de kleur van het vakje veranderd } } else // als het rokeren gelukt is { spel.VeranderSpeler(); //De speler veranderd; // De pion voor en-passant wordt weer vergeten. EnPassantPion = null; } ValideZet = false; }
public override void kanStukSlaan(Algoritme algoritme, Vakje geselecteerdStuk) { // Deze methode kijkt vanuit de computer of er een pion geslagen kan worden. if (geselecteerdStuk.schaakstuk.Kleur == "zwart") { Vakje geselecteerdVak = geselecteerdStuk; if (geselecteerdVak.Buren[5] != null && geselecteerdVak.Buren[5].schaakstuk != null && geselecteerdVak.Buren[5].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[5]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[6] != null && geselecteerdVak.Buren[6].schaakstuk != null && geselecteerdVak.Buren[6].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[6]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else { } } }
public override void Verplaats(Vakje nieuwVakje, Vakje selected, Spel spel) { //Kijk of het schaakstuk het geselecteerde vakje kan vinden, //door alle vakjes waar heen bewogen mag worden te vergelijken met het geselecteerde vakje bool gevonden = false; if (selected.Buren[0] == nieuwVakje) { gevonden = true; } else if (selected.Buren[1] == nieuwVakje) { gevonden = true; } else if (selected.Buren[2] == nieuwVakje) { gevonden = true; } else if (selected.Buren[3] == nieuwVakje) { gevonden = true; } else if (selected.Buren[4] == nieuwVakje) { gevonden = true; } else if (selected.Buren[7] == nieuwVakje) { gevonden = true; } else if (selected.Buren[5] == nieuwVakje) { gevonden = true; } else if (selected.Buren[6] == nieuwVakje) { gevonden = true; } if (gevonden == true) { //Als het schaakstuk het vakje kan bereiken, wordt het schaakstuk verplaatst. //Hierna wordt gekeken of de koning schaak staat. //Als de koning schaak staat, dan wordt het schaakstuk weer terug geplaatst waar die stond. //Staat de koning niet schaak, dan is de zet definitief en is de andere speler aan de beurt. Schaakstuk temp = nieuwVakje.schaakstuk; nieuwVakje.schaakstuk = this; selected.schaakstuk = null; this.Vakje = nieuwVakje; bool checkSchaak = spel.schaakbord.CheckSchaak(spel.SpelerAanZet.koning.Vakje, spel.SpelerAanZet.koning.Kleur); if (checkSchaak == true) { selected.schaakstuk = this; nieuwVakje.schaakstuk = temp; this.Vakje = selected; } else { if (temp != null) { spel.updateAantalStukken(spel.SpelerAanZet); temp.Slaan(); } _eersteZet = true; spel.SpelerAanZet.ValideZet = true; } } }
private void controleerBurenSchaak(string richting, Vakje waarVanDaan) { bool reactie = false; string slaRichting = richting; Vakje oudVakje = waarVanDaan; Vakje volgendVakje = waarVanDaan; bool mogelijkloop = false; if (richting == "Noord") { volgendVakje = waarVanDaan.Buren[0]; } else if (richting == "Noordoost") { volgendVakje = waarVanDaan.Buren[4]; } else if (richting == "Noordwest") { volgendVakje = waarVanDaan.Buren[7]; } else if (richting == "West") { volgendVakje = waarVanDaan.Buren[3]; } else if (richting == "Zuid") { volgendVakje = waarVanDaan.Buren[2]; } else if (richting == "Zuidoost") { volgendVakje = waarVanDaan.Buren[5]; } else if (richting == "Zuidwest") { volgendVakje = waarVanDaan.Buren[6]; } else { volgendVakje = waarVanDaan.Buren[1]; } // loopt door de slaanrichting van de tegenstander en verzet een stuk zodat er niet meer geslagen kan worden while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } else { // Controleert buurnoord if (volgendVakje.Buren[0] != null && volgendVakje.Buren[0].schaakstuk != null && volgendVakje.Buren[0].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[0].schaakstuk is Pion && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[0], volgendVakje); } else if (volgendVakje.Buren[0].schaakstuk is Toren && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[0], volgendVakje); } else if (volgendVakje.Buren[0].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[0], volgendVakje); } } // Controleert buurnoordoost if (volgendVakje.Buren[4] != null && volgendVakje.Buren[4].schaakstuk != null && volgendVakje.Buren[4].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan en blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[4].schaakstuk is Loper && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[4], volgendVakje); } else if (volgendVakje.Buren[4].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[4], volgendVakje); } // slaat de tegenstander met een pion else if (oudVakje.Buren[4] != null && oudVakje.Buren[4].schaakstuk is Pion && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(oudVakje.Buren[4], oudVakje); } } // Controleert buurnoordwest if (volgendVakje.Buren[7] != null && volgendVakje.Buren[7].schaakstuk != null && volgendVakje.Buren[7].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan en blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[7].schaakstuk is Loper && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[7], volgendVakje); } else if (volgendVakje.Buren[7].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[7], volgendVakje); } // slaat de tegenstander met een pion else if (oudVakje.Buren[7] != null && oudVakje.Buren[7].schaakstuk is Pion && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(oudVakje.Buren[7], oudVakje); } } // Controleert buurwest if (volgendVakje.Buren[3] != null && volgendVakje.Buren[3].schaakstuk != null && volgendVakje.Buren[3].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[3].schaakstuk is Toren && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[3], volgendVakje); } else if (volgendVakje.Buren[3].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[3], volgendVakje); } } // Controleert buuroost if (volgendVakje.Buren[1] != null && volgendVakje.Buren[1].schaakstuk != null && volgendVakje.Buren[1].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[1].schaakstuk is Toren && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[1], volgendVakje); } else if (volgendVakje.Buren[1].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[1], volgendVakje); } } // Controleert buurzuid if (volgendVakje.Buren[2] != null && volgendVakje.Buren[2].schaakstuk != null && volgendVakje.Buren[2].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[2].schaakstuk is Toren && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[2], volgendVakje); } else if (volgendVakje.Buren[2].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[2], volgendVakje); } } // Controleert buurzuidoost if (volgendVakje.Buren[5] != null && volgendVakje.Buren[5].schaakstuk != null && volgendVakje.Buren[5].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan en blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[5].schaakstuk is Loper && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[5], volgendVakje); } else if (volgendVakje.Buren[5].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[5], volgendVakje); } } // Controleert buurzuidwest if (volgendVakje.Buren[6] != null && volgendVakje.Buren[6].schaakstuk != null && volgendVakje.Buren[6].schaakstuk.Kleur == "zwart") { // kijkt of er een schaakstuk staat die schaak kan en blokkeren en verplaats dat schaakstuk if (volgendVakje.Buren[6].schaakstuk is Loper && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[6], volgendVakje); } else if (volgendVakje.Buren[6].schaakstuk is Dame && reactie == false) { reactie = true; mogelijkloop = true; _computer.voerZetUit(volgendVakje.Buren[6], volgendVakje); } } // gaat naar het volgende vakje wanneer er niets verplaatst kan worden if (mogelijkloop == false) { // verder in de richting if (richting == "Noord") { volgendVakje = volgendVakje.Buren[0]; } else if (richting == "Noordoost") { volgendVakje = volgendVakje.Buren[4]; } else if (richting == "Noordwest") { volgendVakje = volgendVakje.Buren[7]; } else if (richting == "West") { volgendVakje = volgendVakje.Buren[3]; } else if (richting == "Oost") { volgendVakje = volgendVakje.Buren[1]; } else if (richting == "Zuid") { volgendVakje = volgendVakje.Buren[2]; } else if (richting == "Zuidoost") { volgendVakje = volgendVakje.Buren[5]; } else if (richting == "Zuidwest") { volgendVakje = volgendVakje.Buren[6]; } } } } } _computer.ZojuistSchaak = true; // voorkomt een tweede computer zet _computer.KoningVerplaats = true; }
public void reageerOpSchaak(Vakje geselecteerd) { Vakje waarVanDaan = geselecteerd; Vakje volgendVakje; bool reactie = false; // bepaal richting van het slaan bool mogelijkloop = false; volgendVakje = geselecteerd.Buren[0]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Noord"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[0]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[4]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Noordoost"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[4]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[7]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Noordwest"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[7]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[1]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Oost"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[1]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[2]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Zuid"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[2]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[5]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Zuidoost"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[5]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[6]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "Zuidwest"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[6]; } } mogelijkloop = false; volgendVakje = geselecteerd.Buren[3]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk is Koning && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; _slaanRichting = "West"; } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[3]; } } // Reageert op het schaak zetten van de computer if (reactie == false) { // sla waar mogelijk if (_koning.Vakje.Buren[0] != null && _koning.Vakje.Buren[0].schaakstuk != null && _koning.Vakje.Buren[0].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[0]); reactie = true; } else if (_koning.Vakje.Buren[4] != null && _koning.Vakje.Buren[4].schaakstuk != null && _koning.Vakje.Buren[4].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[4]); reactie = true; } else if (_koning.Vakje.Buren[7] != null && _koning.Vakje.Buren[7].schaakstuk != null && _koning.Vakje.Buren[7].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[7]); reactie = true; } else if (_koning.Vakje.Buren[3] != null && _koning.Vakje.Buren[3].schaakstuk != null && _koning.Vakje.Buren[3].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[3]); reactie = true; } else if (_koning.Vakje.Buren[2] != null && _koning.Vakje.Buren[2].schaakstuk != null && _koning.Vakje.Buren[2].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[2]); reactie = true; } else if (_koning.Vakje.Buren[5] != null && _koning.Vakje.Buren[5].schaakstuk != null && _koning.Vakje.Buren[5].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[5]); reactie = true; } else if (_koning.Vakje.Buren[1] != null && _koning.Vakje.Buren[1].schaakstuk != null && _koning.Vakje.Buren[1].schaakstuk.Kleur == "wit" && reactie == false) { _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[1]); reactie = true; } // verplaats naar een vakje waar koning niet schaak gezet kan worden if (_koning.Vakje.Buren[0] != null && _koning.Vakje.Buren[0].schaakstuk == null && _slaanRichting != "Noord" && _slaanRichting != "Zuid" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[0]); } else if (_koning.Vakje.Buren[4] != null && _koning.Vakje.Buren[4].schaakstuk == null && _slaanRichting != "Noordoost" && _slaanRichting != "Zuidwest" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[4]); } else if (_koning.Vakje.Buren[7] != null && _koning.Vakje.Buren[7].schaakstuk == null && _slaanRichting != "Noordwest" && _slaanRichting != "Zuidoost" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[7]); } else if (_koning.Vakje.Buren[3] != null && _koning.Vakje.Buren[3].schaakstuk == null && _slaanRichting != "West" && _slaanRichting != "Oost" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[3]); } else if (_koning.Vakje.Buren[1] != null && _koning.Vakje.Buren[1].schaakstuk == null && _slaanRichting != "Oost" && _slaanRichting != "West" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[1]); } else if (_koning.Vakje.Buren[2] != null && _koning.Vakje.Buren[2].schaakstuk == null && _slaanRichting != "Zuid" && _slaanRichting != "Noord" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[2]); } else if (_koning.Vakje.Buren[5] != null && _koning.Vakje.Buren[5].schaakstuk == null && _slaanRichting != "Zuidoost" && _slaanRichting != "Noordwest" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[5]); } else if (_koning.Vakje.Buren[6] != null && _koning.Vakje.Buren[6].schaakstuk == null && _slaanRichting != "Zuidwest" && _slaanRichting != "Noordoost" && reactie == false) { _computer.KoningVerplaats = true; reactie = true; _computer.voerZetUit(_koning.Vakje, _koning.Vakje.Buren[6]); } if (reactie == true) { // voorkomt dat computer twee zetten achter elkaar doet _computer.ZojuistSchaak = true; } else if (reactie == false) { controleerBurenSchaak(_slaanRichting, waarVanDaan); } } }
private void voorkomStackOverflow() { bool verplaatst = false; int teller = 0; // voorkom een stack overflow door een domme zet te doen while (verplaatst == false) { Vakje vakje = _computer.VerplaatsingsLijst[teller]; Schaakstuk schaakstuk = _computer.VerplaatsingsLijst[teller].schaakstuk; if (schaakstuk is Pion && vakje.Buren[2] != null && vakje.Buren[2].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[2]); verplaatst = true; } else if (schaakstuk is Paard) { if (vakje.Buren[4] != null && vakje.Buren[4].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[4]); verplaatst = true; } else if (vakje.Buren[7] != null && vakje.Buren[7].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[7]); verplaatst = true; } else if (vakje.Buren[5] != null && vakje.Buren[5].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[5]); verplaatst = true; } else if (vakje.Buren[6] != null && vakje.Buren[6].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[6]); verplaatst = true; } else if (vakje.Buren[3].Buren[0] != null && vakje.Buren[3].Buren[0].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[3].Buren[0]); verplaatst = true; } else if (vakje.Buren[3].Buren[2] != null && vakje.Buren[3].Buren[2].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[3].Buren[2]); verplaatst = true; } else if (vakje.Buren[1].Buren[0] != null && vakje.Buren[1].Buren[0].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[1].Buren[0]); verplaatst = true; } else if (vakje.Buren[1].Buren[2] != null && vakje.Buren[1].Buren[2].schaakstuk == null) { _computer.voerZetUit(vakje, vakje.Buren[1].Buren[2]); verplaatst = true; } } if (teller < _computer.VerplaatsingsLijst.Count) { teller++; } else { verplaatst = true; verplaatsNieuwStuk(); } } }
public abstract void kanStukSlaan(Algoritme algoritme, Vakje geselecteerdStuk);
public override void Verplaats(Vakje nieuwVakje, Vakje selected, Spel spel) { if (spel.SpelerAanZet == spel.Speler1) { Speler = spel.Speler1; } else if (spel.SpelerAanZet == spel.Speler2) { Speler = spel.Speler2; } else if (spel.SpelMode == "Singleplayer") { Speler = spel.ComputerSpeler; } //Kijk of het schaakstuk het geselecteerde vakje kan vinden, //door alle vakjes waar heen bewogen mag worden te vergelijken met het geselecteerde vakje Schaakstuk tempPion = null; bool locatie = false; bool mogelijk = false; if (Kleur == "wit") { // Witte pion een stapje naar voren if (selected.Buren[0] == nieuwVakje && nieuwVakje.schaakstuk == null) { mogelijk = true; } // Slaan naar noordoost voor een witte pion else if (selected.Buren[4] == nieuwVakje && nieuwVakje.schaakstuk != null) { mogelijk = true; } // Slaan naar noordwest voor een witte pion else if (selected.Buren[7] == nieuwVakje && nieuwVakje.schaakstuk != null) { mogelijk = true; } // Twee stappen vooruit voor een witte pion else if (eersteZet == false && selected.Buren[0].Buren[0] == nieuwVakje && selected.Buren[0].Buren[0].schaakstuk == null && selected.Buren[0].schaakstuk == null) { mogelijk = true; // Zodat de tegenstander mag en-passant slaan if (nieuwVakje.Buren[1] != null) { if (nieuwVakje.Buren[1].schaakstuk is Pion) { // Als er oost een pion staat dan onthoudt de tegenstander dat hij deze pion en-passant mag slaan (nieuwVakje.Buren[1].schaakstuk as Pion).Speler.EnPassantPion = this; } } if (nieuwVakje.Buren[3] != null) { if (nieuwVakje.Buren[3].schaakstuk is Pion) { // Als er west een pion staat dan onthoudt de tegenstander dat hij deze pion en-passant mag slaan (nieuwVakje.Buren[3].schaakstuk as Pion).Speler.EnPassantPion = this; } } } else if (selected.Buren[1] != null) { //en-passant slaan naar noordoost if (selected.Buren[4] == nieuwVakje && base.Speler.EnPassantPion == selected.Buren[1].schaakstuk && base.Speler.EnPassantPion != null) { spel.updateAantalStukken(spel.SpelerAanZet); tempPion = selected.Buren[1].schaakstuk; locatie = false; selected.Buren[1].schaakstuk.Slaan(); selected.Buren[1].schaakstuk = null; //De andere pion verdwijnt selected.Buren[1].Pbox.update(); // update deze pbox zodat je de pion niet meer ziet mogelijk = true; } } if (selected.Buren[3] != null) { //en-passant slaan naar noordwest if (selected.Buren[7] == nieuwVakje && base.Speler.EnPassantPion == selected.Buren[3].schaakstuk && base.Speler.EnPassantPion != null) { spel.updateAantalStukken(spel.SpelerAanZet); tempPion = selected.Buren[3].schaakstuk; locatie = true; selected.Buren[3].schaakstuk.Slaan(); selected.Buren[3].schaakstuk = null; //De andere pion verdwijnt selected.Buren[3].Pbox.update(); //update deze pbox zodat je de pion niet meer ziet mogelijk = true; } } } else if (Kleur == "zwart") { // Zwarte pion een stapje naar voren if (selected.Buren[2] == nieuwVakje && nieuwVakje.schaakstuk == null) { mogelijk = true; } // Slaan naar zuidoost voor een zwarte pion else if (selected.Buren[5] == nieuwVakje && Kleur == "zwart" && nieuwVakje.schaakstuk != null) { mogelijk = true; } // Slaan naar zuidwest voor een zwarte pion else if (selected.Buren[6] == nieuwVakje && nieuwVakje.schaakstuk != null) { mogelijk = true; } // Twee stappen vooruit voor een zwarte pion else if (eersteZet == false && selected.Buren[2].Buren[2] == nieuwVakje && selected.Buren[2].Buren[2].schaakstuk == null && selected.Buren[2].schaakstuk == null) { mogelijk = true; // Zodat de tegenstander mag en-passant slaan if (nieuwVakje.Buren[1] != null) { if (nieuwVakje.Buren[1].schaakstuk is Pion) { // Als er oost een pion staat dan onthoudt de tegenstander dat hij deze pion en-passant mag slaan (nieuwVakje.Buren[1].schaakstuk as Pion).Speler.EnPassantPion = this; } } if (nieuwVakje.Buren[3] != null) { if (nieuwVakje.Buren[3].schaakstuk is Pion) { // Als er west een pion staat dan onthoudt de tegenstander dat hij deze pion en-passant mag slaan (nieuwVakje.Buren[3].schaakstuk as Pion).Speler.EnPassantPion = this; } } } else if (selected.Buren[1] != null) { //en-passant slaan naar zuidoost if (selected.Buren[5] == nieuwVakje && base.Speler.EnPassantPion == selected.Buren[1].schaakstuk && base.Speler.EnPassantPion != null) { spel.updateAantalStukken(spel.SpelerAanZet); locatie = false; tempPion = selected.Buren[1].schaakstuk; selected.Buren[1].schaakstuk.Slaan(); selected.Buren[1].schaakstuk = null; //De andere pion verdwijnt selected.Buren[1].Pbox.update(); // update deze pbox zodat je de pion niet meer ziet mogelijk = true; } } if (spel.SpelMode == "Multiplayer") { if (selected.Buren[3] != null) { //en-passant slaan naar zuidwest if (selected.Buren[6] == nieuwVakje && base.Speler.EnPassantPion == selected.Buren[3].schaakstuk && base.Speler.EnPassantPion != null) { spel.updateAantalStukken(spel.SpelerAanZet); locatie = true; tempPion = selected.Buren[3].schaakstuk; selected.Buren[3].schaakstuk.Slaan(); selected.Buren[3].schaakstuk = null; //De andere pion verdwijnt selected.Buren[3].Pbox.update(); // update deze pbox zodat je de pion niet meer ziet mogelijk = true; } } } } if (mogelijk == true) { //Als het schaakstuk het vakje kan bereiken, wordt het schaakstuk verplaatst. //Hierna wordt gekeken of de koning schaak staat. //Als de koning schaak staat, dan wordt het schaakstuk weer terug geplaatst waar die stond. //Staat de koning niet schaak, dan is de zet definitief en is de andere speler aan de beurt. Schaakstuk temp = nieuwVakje.schaakstuk; nieuwVakje.schaakstuk = this; selected.schaakstuk = null; this.Vakje = nieuwVakje; bool checkSchaak; checkSchaak = spel.schaakbord.CheckSchaak(spel.SpelerAanZet.koning.Vakje, spel.SpelerAanZet.koning.Kleur); if (checkSchaak == true) { selected.schaakstuk = this; nieuwVakje.schaakstuk = temp; this.Vakje = selected; if (tempPion != null) { if (locatie == false) { selected.Buren[1].schaakstuk = tempPion; selected.Buren[1].Pbox.update(); } else { selected.Buren[3].schaakstuk = tempPion; selected.Buren[3].Pbox.update(); } } } else { if (temp != null) { temp.Slaan(); spel.updateAantalStukken(spel.SpelerAanZet); } eersteZet = true; Speler.ValideZet = true; } } //De pion wil promoveren wanneer hij op de eerste of laatste rij komt te staan if (Vakje.Buren[0] == null || Vakje.Buren[2] == null) { if (spel.SpelMode != "Singleplayer") { nieuwVakje.Pbox.update(); selected.Pbox.update(); Vakje.schaakstuk = new Dame(Kleur, Vakje, base.Speler); PromoveerForm promoveerform = new PromoveerForm(this, Kleur); promoveerform.ShowDialog(); } else { if (spel.SpelerAanZet == spel.ComputerSpeler) { nieuwVakje.Pbox.update(); selected.Pbox.update(); Vakje.schaakstuk = new Dame(Kleur, Vakje, base.Speler); } else { nieuwVakje.Pbox.update(); selected.Pbox.update(); Vakje.schaakstuk = new Dame(Kleur, Vakje, base.Speler); PromoveerForm promoveerform = new PromoveerForm(this, Kleur); promoveerform.ShowDialog(); } } } }
public override void Verplaats(Vakje nieuwVakje, Vakje selected, Spel spel) { bool mogelijk = false; bool mogelijkloop = false; Vakje vorige = selected; //Kijk of het schaakstuk het geselecteerde vakje kan vinden, //door alle vakjes waar heen bewogen mag worden te vergelijken met het geselecteerde vakje while (mogelijkloop == false) { if (vorige.Buren[0] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[0] == null || vorige.Buren[0].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[0]; } mogelijkloop = false; vorige = selected; if (mogelijk == false) { while (mogelijkloop == false) { if (vorige.Buren[1] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[1] == null || vorige.Buren[1].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[1]; } } mogelijkloop = false; vorige = selected; if (mogelijk == false) { while (mogelijkloop == false) { if (vorige.Buren[2] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[2] == null || vorige.Buren[2].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[2]; } } mogelijkloop = false; vorige = selected; if (mogelijk == false) { while (mogelijkloop == false) { if (vorige.Buren[3] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[3] == null || vorige.Buren[3].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[3]; } } mogelijkloop = false; vorige = selected; while (mogelijkloop == false) { if (vorige.Buren[4] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[4] == null || vorige.Buren[4].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[4]; } mogelijkloop = false; vorige = selected; if (mogelijk == false) { while (mogelijkloop == false) { if (vorige.Buren[7] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[7] == null || vorige.Buren[7].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[7]; } } mogelijkloop = false; vorige = selected; if (mogelijk == false) { while (mogelijkloop == false) { if (vorige.Buren[5] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[5] == null || vorige.Buren[5].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[5]; } } mogelijkloop = false; vorige = selected; if (mogelijk == false) { while (mogelijkloop == false) { if (vorige.Buren[6] == nieuwVakje) { mogelijk = true; mogelijkloop = true; } else if (vorige.Buren[6] == null || vorige.Buren[6].schaakstuk != null) { mogelijkloop = true; } vorige = vorige.Buren[6]; } } //Als het schaakstuk het vakje kan bereiken, wordt het schaakstuk verplaatst. //Hierna wordt gekeken of de koning schaak staat. //Als de koning schaak staat, dan wordt het schaakstuk weer terug geplaatst waar die stond. //Staat de koning niet schaak, dan is de zet definitief en is de andere speler aan de beurt. if (mogelijk == true) { Schaakstuk temp = nieuwVakje.schaakstuk; nieuwVakje.schaakstuk = this; selected.schaakstuk = null; this.Vakje = nieuwVakje; bool checkSchaak = spel.schaakbord.CheckSchaak(spel.SpelerAanZet.koning.Vakje, spel.SpelerAanZet.koning.Kleur); if (checkSchaak == true) { selected.schaakstuk = this; nieuwVakje.schaakstuk = temp; this.Vakje = selected; } else { if (temp != null) { spel.updateAantalStukken(spel.SpelerAanZet); temp.Slaan(); } spel.SpelerAanZet.ValideZet = true; } } }
public override void kanStukSlaan(Algoritme algoritme, Vakje geselecteerdStuk) { // Deze methode kijkt vanuit de computer of er een dame geslagen kan worden. if (geselecteerdStuk.schaakstuk.Kleur == "zwart") { // Kijkt of er noordwest geslagen kan worden bool mogelijkloop = false; Vakje volgendVakje = geselecteerdStuk.Buren[7]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[7]; } } // Kijkt of er noordoost geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[4]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[4]; } } // Kijkt of er Zuidwest geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[6]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[6]; } } // Kijkt of er Zuidoost geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[5]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[5]; } } // Kijkt of er Noord geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[0]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[0]; } } // Kijkt of er West geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[3]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[3]; } } // Kijkt of er Zuid geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[2]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[2]; } } // Kijkt of er Oost geslagen kan worden mogelijkloop = false; volgendVakje = geselecteerdStuk.Buren[1]; while (mogelijkloop == false) { if (volgendVakje == null) { mogelijkloop = true; } else { if (volgendVakje != null && volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "wit") { mogelijkloop = true; algoritme.slaanmogelijkheden.Add(volgendVakje); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (volgendVakje.schaakstuk != null && volgendVakje.schaakstuk.Kleur == "zwart") { mogelijkloop = true; } volgendVakje = volgendVakje.Buren[1]; } } } }
public void Rokeren(Vakje vakjeToren, Vakje vakjeKoning, Mens speler, Spel spel) { Vakje toren1 = vakjeToren; Vakje koning1 = vakjeKoning; bool rokeerwest = true; Schaakstuk tempToren = vakjeToren.schaakstuk; Vakje _Randoost; Vakje vorige = vakjeKoning; bool checkschaak = false; // Rokeren voor klassieke schaakvariant if (spel.Variant == "Klassiek") { _wilRokeren = false; bool magrokeren = true; if (vakjeToren.Buren[1] == null) // Als het gaat om de rechter toren. { //check of rokeren mogelijk is door te kijken of alle vakjes leeg zijn, en de koning en toren nog geen zet gedaan hebben. if (_eersteZet == false && (vakjeToren.schaakstuk as Toren)._eersteZet == false && vakjeToren.Buren[3].schaakstuk == null && vakjeToren.Buren[3].Buren[3].schaakstuk == null) { while (vorige != null) { //voor elk vakje van de koning tot en met de toren moet gekeken worden dat dit vakje niet geraakt kan worden. checkschaak = spel.schaakbord.CheckSchaak(vorige, speler.koning.Kleur); if (checkschaak == true) { magrokeren = false; } vorige = vorige.Buren[1]; } if (magrokeren == true) { // popup voor rokeren Rokerenmelding _Rokerenmelding = new Rokerenmelding(this); _Rokerenmelding.ShowDialog(); } } if (_wilRokeren == true) { this.Vakje = vakjeKoning.Buren[1].Buren[1]; vakjeKoning.Buren[1].Buren[1].schaakstuk = this; tempToren.Vakje = vakjeKoning.Buren[1]; vakjeKoning.Buren[1].schaakstuk = tempToren; vakjeKoning.schaakstuk = null; vakjeToren.schaakstuk = null; this.Vakje.Pbox.update(); this.Vakje.Buren[3].Buren[3].Pbox.update(); this.Vakje.Buren[3].Pbox.update(); this.Vakje.Buren[1].Pbox.update(); speler.ValideZet = true; _eersteZet = true; if (spel.SpelMode == "Singleplayer") { spel.ComputerSpeler.Zet(tempToren.Vakje); // laat de computer op de mens reageren spel.VeranderSpeler(); } } } else if (vakjeToren.Buren[3] == null) //Als het gaat om de linker toren. { //check of rokeren mogelijk is door te kijken of alle vakjes leeg zijn, en de koning en toren nog geen zet gedaan hebben. if (_eersteZet == false && (vakjeToren.schaakstuk as Toren)._eersteZet == false && vakjeToren.Buren[1].schaakstuk == null && vakjeToren.Buren[1].Buren[1].schaakstuk == null && vakjeToren.Buren[1].Buren[1].Buren[1].schaakstuk == null) { while (vorige != null) { //voor elk vakje van de koning tot en met de toren moet gekeken worden dat dit vakje niet geraakt kan worden. checkschaak = spel.schaakbord.CheckSchaak(vorige, speler.koning.Kleur); if (checkschaak == true) { magrokeren = false; } vorige = vorige.Buren[3]; } if (magrokeren == true) { // popup voor rokeren Rokerenmelding _Rokerenmelding = new Rokerenmelding(this); _Rokerenmelding.ShowDialog(); spel.VeranderSpeler(); } } if (_wilRokeren == true) { this.Vakje = vakjeKoning.Buren[3].Buren[3]; vakjeKoning.Buren[3].Buren[3].schaakstuk = this; tempToren.Vakje = vakjeKoning.Buren[3]; vakjeKoning.Buren[3].schaakstuk = tempToren; vakjeToren.Buren[1].schaakstuk = null; vakjeKoning.schaakstuk = null; vakjeToren.schaakstuk = null; this.Vakje.Pbox.update(); this.Vakje.Buren[3].Buren[3].Pbox.update(); this.Vakje.Buren[3].Pbox.update(); this.Vakje.Buren[1].Pbox.update(); this.Vakje.Buren[1].Buren[1].Pbox.update(); speler.ValideZet = true; _eersteZet = true; } } } // Rokeren voor 960 schaakvariant else if (spel.Variant == "Chess960") { if (_eersteZet == false && (vakjeToren.schaakstuk as Toren)._eersteZet == false) { rokeerwest = false; bool vakjesleeg = false; int aantalplaatsenwest = 0; // aantal plaatsen tussen koning en linker toren int aantalplaatsenoost = 0; // aantal plaatsen tussen koning en rechter toren int i = 0; int west = 0; Vakje _vorigWest = vakjeKoning.Buren[3]; Vakje _vorigVakje = vakjeKoning.Buren[3]; while (_vorigWest != null) //bepaald locatie van de koning a.d.v. het aantal buren links { west++; if (_vorigWest.schaakstuk is Toren) { aantalplaatsenwest = west; } if (_vorigWest.Buren[3] != null) { _vorigWest = _vorigWest.Buren[3]; } else { break; } } Vakje _randWest = _vorigWest; Vakje _vorigOost = _randWest; _Randoost = _randWest.Buren[1].Buren[1].Buren[1].Buren[1].Buren[1].Buren[1].Buren[1]; Vakje koningnieuw_W = _randWest.Buren[1].Buren[1]; Vakje torennieuw_W = _randWest.Buren[1].Buren[1].Buren[1]; Vakje koningnieuw_O = _Randoost.Buren[3]; Vakje torennieuw_O = _Randoost.Buren[3].Buren[3]; // voor west vakjesleeg = true; if (vakjeKoning.Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3] == vakjeToren) { aantalplaatsenwest = 1; rokeerwest = true; while (i <= aantalplaatsenwest) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } else if (vakjeKoning.Buren[3].Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3].Buren[3] == vakjeToren) { aantalplaatsenwest = 2; rokeerwest = true; while (i < aantalplaatsenwest - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } else if (vakjeKoning.Buren[3].Buren[3].Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3].Buren[3].Buren[3] == vakjeToren) { rokeerwest = true; aantalplaatsenwest = 3; while (i < aantalplaatsenwest - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } else if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3] == vakjeToren) { rokeerwest = true; aantalplaatsenwest = 4; while (i < aantalplaatsenwest - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } else if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].Buren[3] == vakjeToren) { rokeerwest = true; aantalplaatsenwest = 5; while (i < aantalplaatsenwest - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } else if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].Buren[3] == vakjeToren) { rokeerwest = true; aantalplaatsenwest = 6; while (i < aantalplaatsenwest - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } else if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].schaakstuk is Toren) { if (vakjeKoning.Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].Buren[3].Buren[3] == vakjeToren) { rokeerwest = true; aantalplaatsenwest = 7; while (i < aantalplaatsenwest - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[3]; if (koningnieuw_W.schaakstuk == null || koningnieuw_W == vakjeKoning || koningnieuw_W == vakjeToren) { if (torennieuw_W.schaakstuk == null || torennieuw_W == vakjeKoning || torennieuw_W == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } if (rokeerwest == false) { _vorigVakje = vakjeKoning.Buren[1]; // voor oost vakjesleeg = true; if (vakjeKoning.Buren[1] == vakjeToren) { rokeerwest = false; _magRokeren = true; while (i <= aantalplaatsenoost) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } else if (vakjeKoning.Buren[1].Buren[1] == vakjeToren) { rokeerwest = false; aantalplaatsenoost = 2; while (i < aantalplaatsenoost - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } else if (vakjeKoning.Buren[1].Buren[1].Buren[1] == vakjeToren) { rokeerwest = false; aantalplaatsenoost = 3; while (i < aantalplaatsenoost - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } else if (vakjeKoning.Buren[1].Buren[1].Buren[1].Buren[1] == vakjeToren) { rokeerwest = false; aantalplaatsenoost = 4; while (i < aantalplaatsenoost - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } else if (vakjeKoning.Buren[1].Buren[1].Buren[1].Buren[1].Buren[1] == vakjeToren) { rokeerwest = false; aantalplaatsenoost = 5; while (i < aantalplaatsenoost - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } else if (vakjeKoning.Buren[1].Buren[1].Buren[1].Buren[1].Buren[1].Buren[1] == vakjeToren) { rokeerwest = false; aantalplaatsenoost = 6; while (i < aantalplaatsenoost - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } else if (vakjeKoning.Buren[1].Buren[1].Buren[1].Buren[1].Buren[1].Buren[1].Buren[1] == vakjeToren) { rokeerwest = false; aantalplaatsenoost = 7; while (i < aantalplaatsenoost - 1) { if (_vorigVakje.schaakstuk == null || _vorigVakje.schaakstuk is Toren) { _vorigVakje = _vorigVakje.Buren[1]; if (koningnieuw_O.schaakstuk == null || koningnieuw_O.schaakstuk is Koning || koningnieuw_O == vakjeToren) { if (torennieuw_O.schaakstuk == null || torennieuw_O.schaakstuk is Koning || torennieuw_O == vakjeToren) { vakjesleeg = true; } else { vakjesleeg = false; } } else { vakjesleeg = false; } } else { vakjesleeg = false; } i++; } _magRokeren = true; } } if (_magRokeren == true) { if (vakjesleeg == true) { Rokerenmelding _Rokerenmelding = new Rokerenmelding(this); _Rokerenmelding.ShowDialog(); } } if (_wilRokeren == true && _magRokeren == true) { if (vakjesleeg == true) { // ROKEREN NAAR OOST KANT if (rokeerwest == false) { Vakje _torenOud = vakjeToren; Vakje _koningOud = vakjeKoning; Schaakstuk Tempkoning = vakjeKoning.schaakstuk; _Randoost.Buren[3].Buren[3].schaakstuk = tempToren; _Randoost.Buren[3].schaakstuk = Tempkoning; _Randoost.Buren[3].Pbox.update(); _Randoost.Buren[3].Pbox.update(); _koningOud.schaakstuk = null; _torenOud.schaakstuk = null; vakjeToren.schaakstuk = null; this.Vakje.Pbox.update(); vakjeToren.Pbox.update(); _torenOud.Pbox.update(); _Randoost.Buren[3].schaakstuk = Tempkoning; _Randoost.Buren[3].Pbox.update(); _Randoost.Buren[3].Buren[3].schaakstuk = tempToren; _Randoost.Buren[3].Buren[3].Pbox.update(); _eersteZet = true; } else // ROKEREN NAAR WEST KANT { Vakje _torenOud = vakjeToren; Vakje _koningOud = vakjeKoning; Schaakstuk Tempkoning = vakjeKoning.schaakstuk; _randWest.Buren[1].Buren[1].Buren[1].schaakstuk = tempToren; _randWest.Buren[1].Buren[1].schaakstuk = Tempkoning; _randWest.Buren[1].Pbox.update(); _randWest.Buren[1].Buren[1].schaakstuk = null; _randWest.Buren[1].Buren[1].Pbox.update(); _koningOud.schaakstuk = null; _torenOud.schaakstuk = null; vakjeToren.schaakstuk = null; this.Vakje.Pbox.update(); vakjeToren.Pbox.update(); _torenOud.Pbox.update(); _randWest.Buren[1].Buren[1].schaakstuk = Tempkoning; _randWest.Buren[1].Buren[1].Pbox.update(); _randWest.Buren[1].Buren[1].Buren[1].schaakstuk = tempToren; _randWest.Buren[1].Buren[1].Buren[1].Pbox.update(); _eersteZet = true; } } speler.ValideZet = true; _eersteZet = true; } } } }
public override void kanStukSlaan(Algoritme algoritme, Vakje geselecteerdStuk) { // Deze methode kijkt vanuit de computer of er een koning geslagen kan worden. if (geselecteerdStuk.schaakstuk.Kleur == "zwart") { Vakje geselecteerdVak = geselecteerdStuk; // noord if (geselecteerdVak.Buren[7] != null && geselecteerdVak.Buren[7].schaakstuk != null && geselecteerdVak.Buren[7].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[7]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[0] != null && geselecteerdVak.Buren[0].schaakstuk != null && geselecteerdVak.Buren[0].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[0]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[4] != null && geselecteerdVak.Buren[4].schaakstuk != null && geselecteerdVak.Buren[4].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[4]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } // west else if (geselecteerdVak.Buren[3].Buren[0] != null && geselecteerdVak.Buren[3].Buren[0].schaakstuk != null && geselecteerdVak.Buren[3].Buren[0].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[3].Buren[0]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[3] != null && geselecteerdVak.Buren[3].schaakstuk != null && geselecteerdVak.Buren[3].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[3]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[3].Buren[2] != null && geselecteerdVak.Buren[3].Buren[2].schaakstuk != null && geselecteerdVak.Buren[3].Buren[2].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[3].Buren[2]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } // zuid else if (geselecteerdVak.Buren[6] != null && geselecteerdVak.Buren[6].schaakstuk != null && geselecteerdVak.Buren[6].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[6]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[2] != null && geselecteerdVak.Buren[2].schaakstuk != null && geselecteerdVak.Buren[2].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[2]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[5] != null && geselecteerdVak.Buren[5].schaakstuk != null && geselecteerdVak.Buren[5].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[5]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } // oost else if (geselecteerdVak.Buren[1].Buren[0] != null && geselecteerdVak.Buren[1].Buren[0].schaakstuk != null && geselecteerdVak.Buren[1].Buren[0].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[1].Buren[0]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[1] != null && geselecteerdVak.Buren[1].schaakstuk != null && geselecteerdVak.Buren[1].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[1]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else if (geselecteerdVak.Buren[1].Buren[2] != null && geselecteerdVak.Buren[1].Buren[2].schaakstuk != null && geselecteerdVak.Buren[1].Buren[2].schaakstuk.Kleur == "wit") { algoritme.slaanmogelijkheden.Add(geselecteerdVak.Buren[1].Buren[2]); algoritme.slaanmogelijkhedenVanaf.Add(geselecteerdStuk); } else { } } }
public abstract void Verplaats(Vakje nieuwVakje, Vakje selected, Spel spel);