Пример #1
0
        /// <summary>
        /// Funkcja rozpoczynająca nową grę.
        /// Najpierw tworzy nową grę w kontrolerze logicznym, a potem pobiera z niego plansze logiczne i na ich podstawie buduje plansze z przycisków.
        /// </summary>
        /// <param name="xPlanszaGracza"></param>
        /// <param name="xPlanszaKomputera"></param>
        /// <param name="czyPierwszaGra"></param>
        /// <param name="poziomTrudnosci"></param>
        private void NowaGra(Grid xPlanszaGracza, Grid xPlanszaKomputera, bool czyPierwszaGra, PoziomTrudnosci poziomTrudnosci)
        {
            _kontroler.NowaGra();

            if (_pierwszaGra)
            {
                _pierwszaGra = false;
            }
            else
            {
                WyczyscPlansze();
            }
            _komunikat.Text = $"Rozpocznij!";

            lPlanszaGracza    = _kontroler.ObecnaGra.PlanszaGracza;
            lPlanszaKomputera = _kontroler.ObecnaGra.PlanszaKomputera;

            gPlanszaGracza    = new G_PlanszaBitwy(xPlanszaGracza, lPlanszaGracza, true, czyPierwszaGra);
            gPlanszaKomputera = new G_PlanszaBitwy(xPlanszaKomputera, lPlanszaKomputera, false, czyPierwszaGra);

            _komputer = new G_Komputer(this, lPlanszaGracza, gPlanszaGracza, poziomTrudnosci);

            _pierwszyRuch = true;

            ZmienAktywnaPlansze(_kontroler.CzyTuraGracza);

            NasluchujKlikniec();
        }
Пример #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;
            }
        }
Пример #3
0
 /// <summary>
 /// Konstruktor komputera.
 /// </summary>
 /// <param name="kontroler">Kontroler graficzny gry</param>
 /// <param name="lPlanszaGracza">Plansza logiczna gracza</param>
 /// <param name="gPlanszaGracza">Plansza graficzna gracza</param>
 /// <param name="poziomTrudnosci">Poziom trudnościu komputera logicznego</param>
 public G_Komputer(G_KontrolaGry kontroler, L_PlanszaBitwy lPlanszaGracza, G_PlanszaBitwy gPlanszaGracza, PoziomTrudnosci poziomTrudnosci)
 {
     _gPlanszaGracza = gPlanszaGracza;
     _lKomputer      = new L_Komputer(lPlanszaGracza, poziomTrudnosci);
     _kontroler      = kontroler;
 }