private static string ZapytajOKoordynatyDoStrzalu(ModelGracza gracz) { Console.Write($" {gracz.Nick}, podaj miejsce strzału: "); string wynik = Console.ReadLine().Trim(); return(wynik); }
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); }
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(); }
//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); }
// 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); } } }
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; }
// 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; }
public static int LicznikStrzalow(ModelGracza gracz) { int licznikStrzalow = 0; foreach (var strzal in gracz.poleStrzalu) { if (strzal.Status != StatusPola.Pusty) { licznikStrzalow += 1; } } return licznikStrzalow; }
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; }
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; }
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; } } } }
// 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); }
// 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; }
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(); }
// 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); }
// 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(); }