98 lines
3.5 KiB
C#
98 lines
3.5 KiB
C#
|
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()];
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|