/// <summary> /// Funkcja, która wykonuje ruch w tablicy Bierek -> kiedy ruch możliwy, to przenosi bierkę z pola startowego na końcowe /// </summary> /// <param name="pole_startowe">Miejsce, z ktorego sie ruszamy</param> /// <param name="pole_docelowe">Miejsce, do ktorego sie ruszamy</param> public void wykonaj_ruch(int pole_startowe, int pole_docelowe) { Bierka ruszona = this.figura_na_polu(pole_startowe); if (ruszona is Krol) { czarny_krol = ruszona.ktory_gracz() == 0 ? pole_docelowe : czarny_krol; bialy_krol = ruszona.ktory_gracz() == 1 ? pole_docelowe : bialy_krol; } plansza[pole_startowe].figurka = null; plansza[pole_docelowe].figurka = ruszona; }
/// <summary> /// Funckcja bierze pole a zwraca jego graficzną reprezentację w UI /// </summary> /// <param name="value">Pole które chcemy przekonwertować na obrazek</param> /// <returns>Zwraca obrazek, który reprezentuje stan pola</returns> public BitmapImage Convert(SzachownicaPole value) { SzachownicaPole do_konwersji = (SzachownicaPole)value; string lokalizacja = ""; lokalizacja = do_konwersji.biale_pole_planszy == 1 ? "Biale" : "Czarne"; Bierka figuraWobrazek = do_konwersji.figurka; if (!(figuraWobrazek is null)) { if (figuraWobrazek is Pionek) { lokalizacja += "Pion"; } else if (figuraWobrazek is Krol) { lokalizacja += "Krol"; if (figuraWobrazek.ktory_gracz() == gracz_zaszachowany) { lokalizacja += "Szach"; } } else if (figuraWobrazek is Krolowa) { lokalizacja += "Krolowa"; } else if (figuraWobrazek is Goniec) { lokalizacja += "Goniec"; } else if (figuraWobrazek is Wieza) { lokalizacja += "Wieza"; } else if (figuraWobrazek is Skoczek) { lokalizacja += "Skoczek"; } lokalizacja += figuraWobrazek.ktory_gracz() == 1 ? "Biale" : "Czarne"; } return(new BitmapImage(new Uri($"pack://application:,,,/Images/{lokalizacja}.png"))); }
/// <summary> /// Funkcja, w której będą odbywać się wszystkie ruchy na planszy /// </summary> /// <param name="sender">W tym przypadku to kliknięty przycisk w aplikacji</param> private void Field_Click(object sender, RoutedEventArgs e) { var skadklikniete = (Button)sender; int pole_klikniete = Grid.GetRow(skadklikniete) * 8 + Grid.GetColumn(skadklikniete); //wzor na pole w tablicy -> nr pola = wiersz * 8 + kolumna #region Start Ruchu //w tym przypadku pole_klikniete to miejsce, z ktorego chcemy wykonac ruch if (!klikniete) { if (plansza.figura_na_polu(pole_klikniete) is null) { return; } if (plansza.figura_na_polu(pole_klikniete).ktory_gracz() != czyja_kolej) { return; } klikniete = true; start_ruchu = pole_klikniete; mozliwe_ruchy = (new Szachownica(plansza)).figura_na_polu(start_ruchu).ruchy_bez_szacha(pole_klikniete, plansza); pokaz_mozliwosci_na_planszy(mozliwe_ruchy); return; } #endregion Start Ruchu #region PotwierdzenieRuchu //w tym przypadku pole_klikniete to miejsce, na ktore chcemy wykonac ruch if (mozliwe_ruchy.Contains(pole_klikniete)) { Bierka ruszona = plansza.figura_na_polu(start_ruchu); if (ruszona is Pionek) { ((Pionek)ruszona).ruszono = true; } if (ruszona is Krol) { ((Krol)ruszona).ruszono = true; int ktora_strona; if (plansza.figura_na_polu(pole_klikniete) is Wieza) { ktora_strona = start_ruchu < pole_klikniete ? 1 : -1; //zaleznie od tego, gdzie znajduje sie wieza idziemy w inna strone plansza.ustaw_na_polu(new Wieza(ruszona.ktory_gracz()), start_ruchu + ktora_strona * 2 + -ktora_strona); plansza.wykonaj_ruch(start_ruchu, start_ruchu + ktora_strona * 2); } } plansza.wykonaj_ruch(start_ruchu, pole_klikniete); plansza.aktualizuj_szachowanie(); czyja_kolej = czyja_kolej == 1 ? 0 : 1; //zaznaczamy, że ruch odbył się poprawnie i zmieniamy obecnego gracza if (plansza.czy_szach(czyja_kolej)) { gracz_zaszachowany = czyja_kolej; if (plansza.czy_mat(czyja_kolej)) //jeśli jest mat to pytamy gracza czy chce zagrać jeszcze raz { aktualizuj_plansze(); string kto_wygral = czyja_kolej == 0 ? "White's" : "Black's"; MessageBoxResult wynik = MessageBox.Show(kto_wygral + " have won!\nDo you want to play again?", "New game box", MessageBoxButton.YesNo); switch (wynik) { case MessageBoxResult.Yes: NowaGra(); break; case MessageBoxResult.No: Close(); break; } } } else { gracz_zaszachowany = -1; } } else { mozliwe_ruchy = new List <int>(); //zerujemy wszystkie poprzednie możliwe ruchy, bo anulowaliśmy ruch } aktualizuj_plansze(); klikniete = false; //wracamy sprzed kliknięcia, jest to swoiste anulowanie poprzedniego kliknięcia #endregion PotwierdzenieRuchu }
/// <summary> /// Funkcja zamienia figurę danego pola na inputowaną bierkę /// </summary> /// <param name="figura">Figurka, którą chcemy ustawić</param> /// <param name="pole">Pole na którym chcemy ustawić obiekt klasy bierka</param> public void ustaw_na_polu(Bierka figura, int pole) { plansza[pole].figurka = figura; }