using System.Linq; namespace Chess { public enum RodzajFigury { King, Queen, Pawn, Bishop, Knight, Rook, EMPTY } public struct Figura { public bool pierwszyRuch { get; set; } public bool ruchODwaPola; public RodzajFigury rodzajfigury { get; private set; } public Kolor kolor; private Pole[] polaAtakujace; private void atak(Pole figuraPole) { Posuniecie posuniecie = new Posuniecie(figuraPole); polaAtakujace = new Pole[posuniecie.mozliweRuchy.Length]; for (int ruch = 0; ruch < posuniecie.mozliweRuchy.Length; ruch++) { if (posuniecie.mozliweRuchy[ruch] == null) { continue; } if (figuraPole.figura.rodzajfigury == RodzajFigury.Pawn) { if (ruch == 0 || ruch == 1) { continue; } } Szachownica.pola[(int)posuniecie.mozliweRuchy[ruch]?.y, (int)posuniecie.mozliweRuchy[ruch]?.x].UstawAtak(figuraPole.figura); polaAtakujace[ruch] = Szachownica.pola[(int)posuniecie.mozliweRuchy[ruch]?.y, (int)posuniecie.mozliweRuchy[ruch]?.x]; } } public static void WyszyscPoprzednieAtaki() { for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { Szachownica.pola[y, x].UsunAtak(); } } } public static void ZaaktualizujWszystkieAtaki() { WyszyscPoprzednieAtaki(); for (int x = 0; x < 8; x++) { for (int y = 0; y < 8; y++) { if (Szachownica.pola[y, x].jestZajete() && Szachownica.pola[y, x].figura.kolor != Szachownica.KogoTerazTura) { Szachownica.pola[y, x].figura.atak(Szachownica.pola[y, x]); } } } } public string NazwaObrazu() { string name = ""; if (kolor != Kolor.NONE) { name = kolor == Kolor.BLACK ? "B" : "W"; } return name + rodzajfigury.ToString(); } public Figura(RodzajFigury rodzajfigury = RodzajFigury.EMPTY, Kolor kolor = Kolor.NONE, bool ruchODwaPola = false, bool pierwszyRuch = false) { polaAtakujace = new Pole[32]; this.pierwszyRuch = true; this.ruchODwaPola = ruchODwaPola; this.rodzajfigury = rodzajfigury; this.kolor = kolor; if (rodzajfigury == RodzajFigury.EMPTY) { this.pierwszyRuch = pierwszyRuch; } } public Figura(string key, Pole pole) : this(RodzajFigury.Queen) { kolor = key.First() == 'B' ? Kolor.BLACK : Kolor.WHITE; key = key.Remove(0, 1); switch (key) { case "Bishop": rodzajfigury = RodzajFigury.Bishop; break; case "Rook": rodzajfigury = RodzajFigury.Rook; break; case "Queen": rodzajfigury = RodzajFigury.Queen; break; case "Knight": rodzajfigury = RodzajFigury.Knight; break; } pole.FiguraObraz.BackgroundImage = Pole.FiguryObrazy[NazwaObrazu()]; } } }