Пример #1
0
        /// <summary>
        /// Funkcja sprawdzająca, czy wszystkie pola statku są trafione. Jeśli tak, statek został zatopiony.
        /// </summary>
        /// <param name="IDStatku">ID Statku do sprawdzenia</param>
        /// <returns></returns>
        private bool CzyZatopilemStatek(int IDStatku)
        {
            List <L_Statek> statkiGracza   = _planszaGracza.Statki;
            L_Statek        trafionyStatek = statkiGracza[IDStatku];

            trafionyStatek.SprawdzStan();

            return(trafionyStatek.Zatopiony);
        }
Пример #2
0
        /// <summary>
        /// Funkcja obsługująca kliknięcie przycisku i zaznaczająca trafienie na planszy logicznej.
        /// </summary>
        /// <param name="button">Trafiony przycisk</param>
        public async void KliknieciePrzycisku(Button button)
        {
            //Jeśli gra jest skończona, zablokuj klikanie
            if (_kontroler.GraSkonczona)
            {
                return;
            }

            int i = Grid.GetRow(button);
            int j = Grid.GetColumn(button);

            Grid buttonParent = (Grid)button.Parent;

            L_Pole[,] polaPlanszy;
            L_PlanszaBitwy plansza;

            //Tura gracza
            if (_kontroler.CzyTuraGracza)
            {
                if (buttonParent == xPlanszaGracza)
                {
                    return;
                }
                else
                {
                    plansza = lPlanszaKomputera;
                }
            }
            //Tura komputera
            else
            {
                if (buttonParent == xPlanszaKomputera)
                {
                    return;
                }
                else
                {
                    plansza = lPlanszaGracza;
                }
            }

            polaPlanszy = plansza.Pola;

            bool   trafionoStatek  = false;
            bool   zatopionoStatek = false;
            L_Pole pole            = polaPlanszy[i, j];

            //Jeżeli pole już zostało trafione, nic się nie dzieje
            if (pole.Trafione)
            {
                return;
            }

            //Oznaczenie pola w zależności od tego czy jest zajęte, czy nie
            if (pole.Zajete)
            {
                button.Background = G_PlanszaBitwy.KolorZHex("#AA0000", 0.9);
                pole.Trafione     = true;
                trafionoStatek    = true;

                //Sprawdzenie stanu statku po trafieniu
                L_Statek statek = plansza.Statki[pole.IDStatku];
                statek.SprawdzStan();

                if (statek.Zatopiony)
                {
                    zatopionoStatek = true;
                }
            }
            else
            {
                button.Background = G_PlanszaBitwy.KolorZHex("#AAAAAA", 0.9);
                pole.Trafione     = true;
            }

            //Kontroler sprawdza stan gry po trafieniu pola
            _kontroler.SprawdzRuch(trafionoStatek);

            ZmienKomunikat(trafionoStatek, zatopionoStatek);

            //Zakończenie gry
            if (_kontroler.GraSkonczona)
            {
                _kontroler.ZakonczGre();

                _komunikat.Text = $"Grę wygrał {_kontroler.ObecnaGra.zwyciezca} w {_kontroler.LicznikTur} turach!";
            }
            //Komputer wykonuje ruch, jeśli właśnie kończy się tura gracza
            else if (!_kontroler.CzyTuraGracza)
            {
                await Task.Delay(1000);

                _komputer.WykonajRuch();
            }

            //Jeżeli gra nie jest skończona, zmień aktywną planszę
            if (!_kontroler.GraSkonczona)
            {
                ZmienAktywnaPlansze(_kontroler.CzyTuraGracza);
                _pierwszyRuch = false;
            }
        }