chess/Szachownica.cs

120 lines
4.4 KiB
C#

using System.Collections.Generic;
namespace Chess
{
internal class Szachownica
{
public static Pole[,] pola = new Pole[8, 8];
public static Kolor KogoTerazTura = Kolor.WHITE;
public static Szachy Window;
public static List<PoprzedniStanSzachownicy> poprzednieRuchy = new List<PoprzedniStanSzachownicy>();
public static Figura JakaToFigura(int y, int x)
{
return pola[y, x].figura;
}
public static List<Pole> ZbierzWszystkieFiguryPola(Kolor kolor)
{
List<Pole> wszystkieFigury = new List<Pole>();
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
if (JakaToFigura(y, x).kolor == kolor)
{
wszystkieFigury.Add(pola[y, x]);
}
}
}
return wszystkieFigury;
}
public static Pole JakieToPole(RodzajFigury rodzajfigury, Kolor kolor)
{
for (byte x = 0; x < 8; x++)
{
for (byte y = 0; y < 8; y++)
{
if (JakaToFigura(y, x).rodzajfigury == rodzajfigury && JakaToFigura(y, x).kolor == kolor)
{
return pola[y, x];
}
}
}
return null;
}
public Szachownica(Szachy glowneOkno)
{
Window = glowneOkno;
byte rzedy = 0;
for (byte x = 0; x < 8; x++, rzedy++)
{
for (byte y = 0; y < 8; y++, rzedy++)
{
Pole PoprawnePole()
{
return rzedy % 2 == 0 ? new Pole(y, x, Kolor.WHITE) : new Pole(y, x, Kolor.BLACK);
}
pola[y, x] = PoprawnePole();
glowneOkno.Controls.Add(pola[y, x]);
}
}
UstawSzachownice(0, Kolor.BLACK);
UstawSzachownice(7, Kolor.WHITE);
for (int x = 0; x < 8; x++)
{
for (int y = 0; y < 8; y++)
{
if (pola[y, x].figura.rodzajfigury != RodzajFigury.EMPTY)
{
pola[y, x].FiguraObraz.BackgroundImage = Pole.FiguryObrazy[pola[y, x].figura.NazwaObrazu()];
}
}
}
}
public static bool czyMoznaWbic(int y, int x)
{
return y < 8 && y >= 0 && x < 8 && x >= 0;
}
private void UstawSzachownice(int y, Kolor kolor)
{
pola[y, 0].figura = new Figura(RodzajFigury.Rook, kolor);
pola[y, 1].figura = new Figura(RodzajFigury.Knight, kolor);
pola[y, 2].figura = new Figura(RodzajFigury.Bishop, kolor);
pola[y, 3].figura = new Figura(RodzajFigury.Queen, kolor);
pola[y, 4].figura = new Figura(RodzajFigury.King, kolor);
pola[y, 5].figura = new Figura(RodzajFigury.Bishop, kolor);
pola[y, 6].figura = new Figura(RodzajFigury.Knight, kolor);
pola[y, 7].figura = new Figura(RodzajFigury.Rook, kolor);
y += y == 0 ? 1 : -1;
for (int x = 0; x < 8; x++)
{
pola[y, x].figura = new Figura(RodzajFigury.Pawn, kolor);
}
}
}
internal struct PoprzedniStanSzachownicy
{
public Figura usunieteFigury { get; private set; }
public RuchFigury ruch { get; private set; }
public Figura figura { get; private set; }
public Lokalizacja poprzedniaLokalizacja { get; private set; }
public int indexRuchu;
public PoprzedniStanSzachownicy(Figura figura, int indexRuchu, Lokalizacja poprzedniaLokalizacja, RuchFigury ruch)
{
this.figura = figura;
this.indexRuchu = indexRuchu;
this.poprzedniaLokalizacja = poprzedniaLokalizacja;
usunieteFigury = new Figura(RodzajFigury.EMPTY);
this.ruch = ruch;
}
public PoprzedniStanSzachownicy(Figura figura, Lokalizacja lokalizacja, RuchFigury ruch, Figura usunietaFigura, int indexRuchu) : this(figura, indexRuchu, lokalizacja, ruch)
{
usunieteFigury = usunietaFigura;
}
}
}