public RuchDrzewo(Bierka b, Point ruch, int wartosc, bool bicie) { this.czyBicie = bicie; this.bierka = b; this.ile = wartosc; this.punkt = ruch; }
/// <summary> /// Konstruktor kopiujący -> taki, który tworzy nowe figurki /// </summary> /// <param name="inp">Pole do skopiowania</param> public SzachownicaPole(SzachownicaPole inp) { this.biale_pole_planszy = inp.biale_pole_planszy; Bierka pom = inp.figurka; if (pom is Pionek) { this.figurka = new Pionek((Pionek)pom); } else if (pom is Krol) { this.figurka = new Krol((Krol)pom); } else if (pom is Goniec) { this.figurka = new Goniec((Goniec)pom); } else if (pom is Krolowa) { this.figurka = new Krolowa((Krolowa)pom); } else if (pom is Skoczek) { this.figurka = new Skoczek((Skoczek)pom); } else if (pom is Wieza) { this.figurka = new Wieza((Wieza)pom); } else { this.figurka = null; } }
// ustawianie bierki, czyli narysowanie odpowiedniego obrazka na szachownicy (dokładniej to na panelu) private void ustawBierke(Bierka b) { Panel p = tableLayoutPanel1.GetControlFromPosition(b.pozycjaX, b.pozycjaY) as Panel; if (p != null) { p.BackgroundImage = b.grafika; } }
public Form1() { // wykonanie kilku niezbędnych na początku operacji InitializeComponent(); podpiszSzachownice(); RysujSiatke(bialy, czarny); kompletujPiony(); Bierka.przeliczWszystieRuchy(); odswiezLabelKolejka(); }
private void btnMalaRoszada_Click(object sender, EventArgs e) { btnMalaRoszada.Enabled = false; // szukanie odpowiednich figur Bierka wieza = Bierka.getBierkaByPos(7, 7, Gra.bierkiBiale, Gra.bierkiCzarne); Bierka krol = Bierka.getBierkaByPos(4, 7, Gra.bierkiBiale, Gra.bierkiCzarne); // wykonanie roszady - zostało wcześniej sprawdzone, czy można to zrobić. Bierka.roszada(wieza, krol, Enums.Roszada.Krotka); zrobResztePoRoszadzie(); }
public static List <Bierka> klonujBierki(List <Bierka> bb) { List <Bierka> ret = new List <Bierka>(); foreach (Bierka b in bb) { Bierka nowa = (Bierka)b.Clone(); ret.Add(nowa); } return(ret); }
// zbiór funkcji do obsługi ruchu wykonywanego przez komputer private void wykonajRuchPC() { if (uzywajSI) { RuchDrzewo rd = new RuchDrzewo(); do { // mechanizm losujący bierki przekazywane do funkcji obliczającej List <Bierka> listaBiale = new List <Bierka>(); listaBiale = Tools.klonujBierki(Gra.bierkiBiale); List <Bierka> listaCzarne = new List <Bierka>(); listaCzarne = Tools.klonujBierki(Gra.bierkiCzarne); listaBiale = LosujBierki.zwrocListe(ileLosowac, listaBiale); listaCzarne = LosujBierki.zwrocListe(ileLosowac, listaCzarne); // zwrócenie najlepszego ruchu rd = Gracz_Komputer.obliczRuchAI(listaBiale, listaCzarne); }while (rd.bierka == null); Bierka bi = Bierka.getBierkaByPos(rd.bierka.pozycjaX, rd.bierka.pozycjaY, Gra.bierkiBiale, Gra.bierkiCzarne); if (rd.czyBicie) { try // tutaj niestety czasem coś się psuje. { // komputer ma w którymś miejscu nieaktualną listę pionów (prawdopodobnie) bi.zbij(Bierka.getBierkaByPos(bi.mozliweBicia[0].X, bi.mozliweBicia[0].Y, Gra.bierkiBiale, Gra.bierkiCzarne)); } catch { MessageBox.Show("Wystąpił problem z mechanizmem SI. PC Oddaje ruch graczowi"); } Gra.kolejka = Enums.czyjaKolej.Osoba; } else { bi.przesun(rd.punkt.X, rd.punkt.Y, true); Gra.kolejka = Enums.czyjaKolej.Osoba; } } else { if (!Gracz_Komputer.Zrob_RuchLosowy()) { MessageBox.Show("Wygrałeś !!"); } } }
// jedna funkcja uzywana przy obu roszadach - bo po kazdej trzeba przegenerowac ruchy i zmienic kolejke private void zrobResztePoRoszadzie() { WyczyscPanele(); foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } odswiezLabelKolejka(); Bierka.przeliczWszystieRuchy(); Gra.kolejka = Enums.czyjaKolej.Komputer; wykonajRuchPC(); WyczyscPanele(); Bierka.przeliczWszystieRuchy(); // moze niepotrzebne foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } odswiezLabelKolejka(); }
public static void wczytajGre() { string linijka = string.Empty; Gra.bierkiBiale.Clear(); Gra.bierkiCzarne.Clear(); OpenFileDialog okienko = new OpenFileDialog(); okienko.Filter = "Stany gry BasicBlue(chess)|*.chess"; if (okienko.ShowDialog() == DialogResult.OK) { MessageBox.Show("Wybrano plik: " + okienko.FileName); } System.IO.StreamReader file = new System.IO.StreamReader(okienko.FileName); // odczyt i przetwarzanie każdej linii pliku osobno while ((linijka = file.ReadLine()) != null) { string[] tab = linijka.Split(';'); if (tab.Length == 5) { string typBierki = tab[1]; string kolor = tab[0]; int x = int.Parse(tab[2]); int y = int.Parse(tab[3]); string ruch = tab[4]; Enums.Kolor_pionków k = Enums.Kolor_pionków.Biale; bool bylRuch = false; if (ruch == "True") { bylRuch = true; } if (kolor == "Czarne") { k = Enums.Kolor_pionków.Czarne; } else if (kolor == "Biale") { k = Enums.Kolor_pionków.Biale; } if (typBierki == "Pionek") { if (k == Enums.Kolor_pionków.Biale) { Gra.bierkiBiale.Add(new Pionek(k, x, y, bylRuch)); } else { Gra.bierkiCzarne.Add(new Pionek(k, x, y, bylRuch)); } } else if (typBierki == "Wieza") { if (k == Enums.Kolor_pionków.Biale) { Gra.bierkiBiale.Add(new Wieza(k, x, y, bylRuch)); } else { Gra.bierkiCzarne.Add(new Wieza(k, x, y, bylRuch)); } } else if (typBierki == "Skoczek") { if (k == Enums.Kolor_pionków.Biale) { Gra.bierkiBiale.Add(new Skoczek(k, x, y, bylRuch)); } else { Gra.bierkiCzarne.Add(new Skoczek(k, x, y, bylRuch)); } } else if (typBierki == "Goniec") { if (k == Enums.Kolor_pionków.Biale) { Gra.bierkiBiale.Add(new Goniec(k, x, y, bylRuch)); } else { Gra.bierkiCzarne.Add(new Goniec(k, x, y, bylRuch)); } } else if (typBierki == "Hetman") { if (k == Enums.Kolor_pionków.Biale) { Gra.bierkiBiale.Add(new Hetman(k, x, y, bylRuch)); } else { Gra.bierkiCzarne.Add(new Hetman(k, x, y, bylRuch)); } } else if (typBierki == "Krol") { if (k == Enums.Kolor_pionków.Biale) { Gra.bierkiBiale.Add(new Krol(k, x, y, bylRuch)); } else { Gra.bierkiCzarne.Add(new Krol(k, x, y, bylRuch)); } } } else if (linijka.Contains("1.")) { Gra.pgnString = linijka; } } file.Close(); Bierka.przeliczWszystieRuchy(); Gra.kolejka = Enums.czyjaKolej.Osoba; }
private void panel_Click(object sender, EventArgs e) { if (Gra.kolejka == Enums.czyjaKolej.Osoba) { TableLayoutPanelCellPosition pos = Tools.GetCellPosotion(tableLayoutPanel1); Bierka b = Bierka.getBierkaByPos(pos.Column, pos.Row, Gra.bierkiBiale, Gra.bierkiCzarne); if (wybrana == null && b != null && b.kolor == Enums.Kolor_pionków.Czarne) { return; } if (wybrana != null && b == null) { if (!wybrana.przesun(pos.Column, pos.Row, true)) { MessageBox.Show("ruch niedozwolony"); } else { WyczyscPanele(); foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } Gra.kolejka = Enums.czyjaKolej.Komputer; odswiezLabelKolejka(); Bierka.przeliczWszystieRuchy(); wykonajRuchPC(); WyczyscPanele(); // Bierka.przeliczWszystieRuchy(); // moze niepotrzebne foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } odswiezLabelKolejka(); } } else if (wybrana != null && b != null && wybrana.kolor != b.kolor) // bicie { if (!wybrana.zbij(b)) { MessageBox.Show("bicie niedozwolone"); } else { WyczyscPanele(); foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } Gra.kolejka = Enums.czyjaKolej.Komputer; odswiezLabelKolejka(); Bierka.przeliczWszystieRuchy(); wykonajRuchPC(); WyczyscPanele(); Bierka.przeliczWszystieRuchy(); // moze niepotrzebne foreach (Bierka bi in Gra.bierkiBiale.Union(Gra.bierkiCzarne)) { ustawBierke(bi); } odswiezLabelKolejka(); } } else { wybrana = b; } if (b == null) { label3.Text = "Puste pole " + pos.Column + " " + pos.Row; } else { label3.Text = b.ToString() + " kolor: " + b.kolor + "(X,Y)=(" + b.pozycjaX + "," + b.pozycjaY + ")"; //b.generujMozliweRuchy(); Bierka.przeliczWszystieRuchy(); label4.Text = "możliwe ruchy: " + b.mozliweRuchy.Count() + Environment.NewLine + "możliwe bicia: " + b.mozliweBicia.Count(); } } txtPgn.Text = Gra.pgnString; sprawdzMozliwoscRoszady(); }
/// <summary> /// Konstruktor przyjmujacy bierkę /// </summary> /// <param name="bierka">Figura, która stoi na polu </param> public SzachownicaPole(Bierka bierka) { this.figurka = bierka; this.biale_pole_planszy = 0; }