chess/Figura.cs

98 lines
3.5 KiB
C#
Raw Permalink Normal View History

2024-06-24 13:01:12 +02:00
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()];
}
}
}