示例#1
0
        private static string ZapytajOKoordynatyDoStrzalu(ModelGracza gracz)
        {
            Console.Write($"  {gracz.Nick}, podaj miejsce strzału: ");
            string wynik = Console.ReadLine().Trim();

            return(wynik);
        }
示例#2
0
        private static void ZapiszStrzal(ModelGracza aktywnyGracz, ModelGracza przeciwnik)
        {
            bool   czyPoprawnyStrzal = false;
            string wiersz            = "";
            int    kolumna           = 0;

            do
            {
                string strzal = ZapytajOKoordynatyDoStrzalu(aktywnyGracz);
                try
                {
                    (wiersz, kolumna) = LogikaGry.PodzialNaKolumnyIWiersze(strzal);
                    czyPoprawnyStrzal = LogikaGry.WalidacjaStrzalu(aktywnyGracz, wiersz, kolumna);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Błąd: " + ex.Message);
                    czyPoprawnyStrzal = false;
                }

                if (czyPoprawnyStrzal == false)
                {
                    Console.WriteLine("Błędne miejsce strzały. Spróbuj ponownie");
                }
            } while (czyPoprawnyStrzal == false);

            bool czyTrafiony = LogikaGry.RezultatStrzaluAktywnegoGracza(przeciwnik, wiersz, kolumna);

            LogikaGry.RezultatStrzaluPrzeciwnik(aktywnyGracz, wiersz, kolumna, czyTrafiony);

            WyswietlRezultatStrzalu(wiersz, kolumna, czyTrafiony);
        }
示例#3
0
        private static void WyswietelMiejsceStrzalu(ModelGracza aktywnyGracz)
        {
            string obecnyWiersz = aktywnyGracz.miejsceStatku[0].LiteraPola;

            foreach (var poleSiatki in aktywnyGracz.poleStrzalu)
            {
                if (poleSiatki.LiteraPola != obecnyWiersz)
                {
                    Console.WriteLine();
                    obecnyWiersz = poleSiatki.LiteraPola;
                }

                if (poleSiatki.Status == StatusPola.Pusty)
                {
                    Console.Write($" {poleSiatki.LiteraPola}{poleSiatki.NumerPola} ");
                }
                else if (poleSiatki.Status == StatusPola.Trafiony)
                {
                    Console.Write(" X  ");
                }
                else if (poleSiatki.Status == StatusPola.Pudło)
                {
                    Console.Write(" O  ");
                }
                else
                {
                    Console.Write(" ?  ");
                }
            }

            Console.WriteLine();
            Console.WriteLine();
        }
示例#4
0
        //Stworzenie siatki dla gracza
        private static void DodajPole(ModelGracza model, string litera, int numer)
        {
            ModelSiatki pole = new ModelSiatki

            {
                LiteraPola = litera,
                NumerPola = numer,
                Status = StatusPola.Pusty
            };

            model.poleStrzalu.Add(pole);
        }
示例#5
0
 // Stworzenie siatki o wymierach 5 x 5
 public static void TworzeniePola(ModelGracza model)
 {
     List<string> litery = new List<string> { "A", "B", "C", "D", "E" };
     List<int> numery = new List<int> { 1, 2, 3, 4, 5 };
     foreach (string litera in litery)
     {
         foreach (int numer in numery)
         {
             DodajPole(model, litera, numer);
         }
     }
 }
示例#6
0
        private static bool WalidacjaPola(ModelGracza model, string wiersz, int kolumna)
        {
            bool czyWlasciwaLokalizacja = false;

            foreach (var ship in model.poleStrzalu)
            {
                if (ship.LiteraPola == wiersz.ToUpper() && ship.NumerPola == kolumna)
                {
                    czyWlasciwaLokalizacja = true;
                }
            }

            return czyWlasciwaLokalizacja;
        }
示例#7
0
        // Okreslenie aktywnego gracza

        public static bool AktywnyGracz(ModelGracza gracz)
        {
            bool czyAktywny = false;

            foreach (var statek in gracz.miejsceStatku)
            {
                if (statek.Status != StatusPola.Zatopiony)
                {
                    czyAktywny = true;
                }
            }

            return czyAktywny;
        }
示例#8
0
        public static int LicznikStrzalow(ModelGracza gracz)
        {
            int licznikStrzalow = 0;

            foreach (var strzal in gracz.poleStrzalu)
            {
                if (strzal.Status != StatusPola.Pusty)
                {
                    licznikStrzalow += 1;
                }
            }

            return licznikStrzalow;
        }
示例#9
0
        public static bool RezultatStrzaluAktywnegoGracza(ModelGracza przeciwnik , string wiersz, int kolumna)
        {
            bool czyTrafiony = false;

            foreach (var statek in przeciwnik.miejsceStatku)
            {
                if (statek.LiteraPola == wiersz.ToUpper() && statek.NumerPola == kolumna)
                {
                    czyTrafiony = true;
                    statek.Status = StatusPola.Zatopiony;
                }
            }

            return czyTrafiony;
        }
示例#10
0
        public static bool WalidacjaStrzalu(ModelGracza gracz, string wiersz, int kolumna)
        {
            bool czyPoprawny = false;

            foreach (var poleSiatki in gracz.poleStrzalu)
            {
                if (poleSiatki.LiteraPola == wiersz.ToUpper() && poleSiatki.NumerPola == kolumna)
                {
                    if (poleSiatki.Status == StatusPola.Pusty)
                    {
                        czyPoprawny = true;
                    }
                }
            }

            return czyPoprawny;
        }
示例#11
0
        public static void RezultatStrzaluPrzeciwnik(ModelGracza gracz, string wiersz, int kolumna, bool czyTrafiony )
        {

            foreach (var poleSiatki in gracz.poleStrzalu)
            {
                if (poleSiatki.LiteraPola == wiersz.ToUpper() && poleSiatki.NumerPola == kolumna)
                {
                    if (czyTrafiony)
                    {
                        poleSiatki.Status = StatusPola.Trafiony;
                    }
                    else
                    {
                        poleSiatki.Status = StatusPola.Pudło;
                    }
                }
            }

        }
示例#12
0
        // Tworzenie środowiska dla gracza
        public static ModelGracza TworzenieGracza(string nazwaGracza)
        {
            ModelGracza output = new ModelGracza();

            Console.WriteLine($"  Informacje o graczu {nazwaGracza}");

            // Pytanie o nick
            output.Nick = ZapytajONick();

            // Wczytanie siatki
            LogikaGry.TworzeniePola(output);

            // Pytanie o koordynaty dla statkow

            RozstawianieStatkow(output);


            Console.Clear();

            return(output);
        }
示例#13
0
        // Umieszczanie statkow na planszy wraz  z walidacja 
        public static bool UmiescStatek(ModelGracza model, string lokalizacja)
        {
            bool wynik = false;
            (string wiersz, int kolumna) = PodzialNaKolumnyIWiersze(lokalizacja);

            bool czyWlasciwaLokalizacjaPola = WalidacjaPola(model, wiersz, kolumna);
            bool czyWolnePole = WalidacjaPolozeniaStatku(model, wiersz, kolumna);

            if (czyWlasciwaLokalizacjaPola && czyWolnePole)
            {
                model.miejsceStatku.Add(new ModelSiatki
                {
                    LiteraPola = wiersz.ToUpper(),
                    NumerPola = kolumna,
                    Status = StatusPola.Statek
                });

                wynik = true;
            }

            return wynik;
        }
示例#14
0
        static void Main(string[] args)
        {
            StyleGry.StatkiTytułStart();
            EkranKonsoli.WiadomoscPowitalna();

            ModelGracza aktywnyGracz = EkranKonsoli.TworzenieGracza("Gracz 1");
            ModelGracza przeciwnik   = EkranKonsoli.TworzenieGracza("Gracz 2");
            ModelGracza zwyciezca    = null;

            do
            {
                WyswietelMiejsceStrzalu(aktywnyGracz);

                ZapiszStrzal(aktywnyGracz, przeciwnik);

                bool czyGraDalejTrwa = LogikaGry.AktywnyGracz(przeciwnik);

                if (czyGraDalejTrwa == true)
                {
                    // Zamiana aktywnego gracza
                    (aktywnyGracz, przeciwnik) = (przeciwnik, aktywnyGracz);
                }
                else
                {
                    zwyciezca = aktywnyGracz;
                }
            } while (zwyciezca == null);

            ZidentyfikujWygranego(zwyciezca);

            Console.ForegroundColor = ConsoleColor.Blue;

            WyswietelMiejsceStrzalu(zwyciezca);

            StyleGry.StatkiTytułKoniec();

            Console.ReadLine();
        }
示例#15
0
        // Rozstawianie statków na planszy
        private static void RozstawianieStatkow(ModelGracza model)
        {
            do
            {
                Console.Write($"  Gdzie chcesz umiescic statek nr {model.miejsceStatku.Count + 1}: ");
                string miejsce = Console.ReadLine().Trim();

                bool czyDobreMiejsce = false;

                try
                {
                    czyDobreMiejsce = LogikaGry.UmiescStatek(model, miejsce);
                }
                catch (Exception x)
                {
                    Console.WriteLine("  Bład: " + x.Message);
                }

                if (czyDobreMiejsce == false)
                {
                    Console.WriteLine("  To nie jest poprawna lokalizacja.  Sprubój ponownie.");
                }
            } while (model.miejsceStatku.Count < 5);
        }
示例#16
0
        // prywatne metody

        private static void ZidentyfikujWygranego(ModelGracza zwyciezca)
        {
            Console.WriteLine($"  Gratulacje dla {zwyciezca.Nick} za wygraną!");
            Console.WriteLine($"  {zwyciezca.Nick} potrzebował {LogikaGry.LicznikStrzalow(zwyciezca)} strzałów.");
            Console.WriteLine();
        }