120 lines
4.4 KiB
C#
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;
|
|
}
|
|
}
|
|
} |