public void LosujPole_KomputerStrzelaLosowo_KolejneLosowanieZwracaInneMiejsceNaPlanszyPoTrafieniu() { //Przygotowanie L_PlanszaBitwy plansza = new L_PlanszaBitwy(); //Na poziomie łatwym komputer będzie cały czas strzelał losowo PoziomTrudnosci poziomTrudnosci = PoziomTrudnosci.Latwy; L_Komputer komputer = new L_Komputer(plansza, poziomTrudnosci); int[] ostatnieIndeksy = new int[2]; int[] noweIndeksy; bool kazdeLosowanieJestUnikalne = true; //Działanie //Wylosowanie 100 pól powinno za każdym kolejnym razem zwrócić inne pole, jeśli pole wylosowane wcześniej zostało trafione for (int i = 0; i < plansza.Pola.GetLength(0); i++) { for (int j = 0; j < plansza.Pola.GetLength(1); j++) { noweIndeksy = komputer.LosujPole(); if (i == 0 && j == 0) { ostatnieIndeksy = noweIndeksy; //Trafienie wylosowanego pola plansza.Pola[noweIndeksy[0], noweIndeksy[1]].Trafione = true; } else { //Jeśli zostały wylosowane te same indeksy, test nie zostanie zdany if (ostatnieIndeksy[0] == noweIndeksy[0] && ostatnieIndeksy[1] == noweIndeksy[1]) { kazdeLosowanieJestUnikalne = false; break; } else { ostatnieIndeksy = noweIndeksy; //Trafienie wylosowanego pola plansza.Pola[noweIndeksy[0], noweIndeksy[1]].Trafione = true; } } } } //Sprawdzenie Assert.IsTrue(kazdeLosowanieJestUnikalne); }
/// <summary> /// Konstruktor komputera /// </summary> /// <param name="planszaGracza">Logiczna plansza gracza</param> /// <param name="poziomTrudnosci">Poziom trudności, na jakim będzie się odbywać rozgrywka</param> public L_Komputer(L_PlanszaBitwy planszaGracza, PoziomTrudnosci poziomTrudnosci) { _poziomTrudnosci = poziomTrudnosci; _planszaGracza = planszaGracza; _wlasnieTrafilem = false; _wlasnieZatopilem = false; _wylosowanePole = null; _trafionePierwszePole = null; _w = -1; _k = -1; _obranyKierunek = null; _ktoryStrzal = 1; _komenda = Komendy.Losuj; }
public void LosujPole_KomputerStrzelaDookolaPoTrafieniu_PoTrafieniuKolejneLosowanePoleZnajdujeSieWBezposrednimSasiedztwie() { //Przygotowanie L_PlanszaBitwy plansza = new L_PlanszaBitwy(); //Na poziomie zaawansowanym i trudnym komputer będzie strzelał dookoła po trafieniu pola zajętego. //Tutaj wybrałem poziom trudny, ponieważ daje to większą szansę na trafienie pól zajętych. PoziomTrudnosci poziomTrudnosci = PoziomTrudnosci.Trudny; L_Komputer komputer = new L_Komputer(plansza, poziomTrudnosci); int[] indeksy = new int[2]; L_Pole trafionePole; L_Statek trafionyStatek; //Działanie //Komputer losuje pola dopóki nie trafi w pole zajęte for (int i = 0; i < plansza.Pola.GetLength(0); i++) { for (int j = 0; j < plansza.Pola.GetLength(1); j++) { indeksy = komputer.LosujPole(); trafionePole = plansza.Pola[indeksy[0], indeksy[1]]; trafionePole.Trafione = true; //Po trafieniu w pole zajęte trzeba sprawdzic, czy to pole nie należy do jednomasztowca, czyli czy statek nie został zatopiony od razu if (trafionePole.Zajete) { trafionyStatek = plansza.Statki[trafionePole.IDStatku]; trafionyStatek.SprawdzStan(); //Jeśli statek nie jest zatopiony, komputer będzie strzelał dookoła if (!trafionyStatek.Zatopiony) { komputer.SprawdzRuch(); break; } } komputer.SprawdzRuch(); } } //Indeksy po wykonaniu pętli są indeksami pierwszego pola trafionego statku //W tablicy poniżej przechowujemy kolejne indeksy z następnego losowania int[] kolejneIndeksy = komputer.LosujPole(); //Indeksy pierwszego pola int i_1 = indeksy[0]; int j_1 = indeksy[1]; //Indeksy kolejnego pola int i_2 = kolejneIndeksy[0]; int j_2 = kolejneIndeksy[1]; //Sprawdzenie //Sprawdzamy czy kolejne wylosowane pole znajduje się w bezpośrednim sąsiedztwie poprzedniego pola. (lewo, góra, prawo, dół) //Komputer najpierw strzela w lewo, ale pole po lewej stronie może nie istnieć bądź może być już pustym polem trafionym. //W takim przypadku komputer strzeli w kolejnym kierunku, który, w sytuacji jak wyżej, może zostać zmieniony. Assert.IsTrue( j_2 <j_1 || //Lewo i_2 <i_1 || //Góra j_2> j_1 || //Prawo i_2> i_1 //Dół ); }
/// <summary> /// Funkcja ustalająca poziom trudności rozgrywki. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <param name="poziomTrudnosci">Jeden z trzech poziomów: Latwy, Zaawansowany, Trudny</param> private void WybierzPoziomTrudnosci(Object sender, RoutedEventArgs e, PoziomTrudnosci poziomTrudnosci) { NowaGra(xPlanszaGracza, xPlanszaKomputera, _pierwszaGra, poziomTrudnosci); _popupTrudnosci.IsOpen = false; }
/// <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(); }
private void easyBtn_Click(object sender, EventArgs e) { trudnosc = PoziomTrudnosci.Latwy; diffMenu.Hide(); gameMenu.Show(); }
private void medBtn_Click(object sender, EventArgs e) { trudnosc = PoziomTrudnosci.Sredni; diffMenu.Hide(); gameMenu.Show(); }
/// <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; }
public bool WyruszNaWyprawe(int poziomTrudnosci, List <PrzedmiotWartosciowy> coMoznaZdobyc) { PoziomTrudnosci poziom = (PoziomTrudnosci)poziomTrudnosci; //(PoziomTrudnosci)Enum.Parse(typeof(PoziomTrudnosci), poziomTrudnosci); //SomeEnum enum = (SomeEnum)Enum.Parse(typeof(SomeEnum), "EnumValue") bool czyZepsutyPojazd = false; if (mojSzpital.WybranyPojazd?.AwariaPojazdu() == true) { Console.WriteLine($"Ups! {mojSzpital.WybranyPojazd.Nazwa} się rozklekotał! Lekarz musi odbyć tę wyprawę bez pojazdu."); czyZepsutyPojazd = true; mojSzpital.WybranyPojazd = null; } int modyfikatorTrudnosci = (mojSzpital.WybranyPojazd?.ModyfikatorTrudnosci ?? 0); int liczbaMiejscNaPacjentow = (mojSzpital.WybranyPojazd?.LiczbaMiejscNaPacjentow ?? 0); int maxIloscPacjentow = 0; int szansaUtratyLekarza = 20; if (poziom == PoziomTrudnosci.Latwy) { maxIloscPacjentow = 14; szansaUtratyLekarza = 20; } else if (poziom == PoziomTrudnosci.Normalny) { maxIloscPacjentow = 20; szansaUtratyLekarza = 30; } else if (poziom == PoziomTrudnosci.Trudny) { maxIloscPacjentow = 30; szansaUtratyLekarza = 60; } else if (poziom == PoziomTrudnosci.GetinHardocore) { maxIloscPacjentow = 100; szansaUtratyLekarza = 95; } Random losowanie = new Random(); int szansaPrzedmiot = losowanie.Next(0, 100); //OrderBy - sortowanie po tym co w nawiasie //FirtstOrDefault - znajduje pierwszy element spełniający warunek, //jeśli nic nie znajdzie, to zwraca null Przedmiot wylosowany = coMoznaZdobyc.OrderBy(p => p.SzansaTrafienia).FirstOrDefault(p => p.SzansaTrafienia <= szansaPrzedmiot); // foreach(Przedmiot p in coMoznaZdobyc) // { // if(p.SzansaTrafienia <= szansaPrzedmiot) // { // wylosowany = p; // break; // } // } if (wylosowany != null) { mojSzpital.Przedmioty.Add(wylosowany); Console.WriteLine($"Podczas wyprawy twój lekarz zdobył {wylosowany.Nazwa}. Podjarał się tym jak lampion w roraty lub tester w dzień wypłaty!"); } if (mojSzpital.IloscDostepnychLekarzy > 0 && mojSzpital.PobierzZBudzetu(50)) { //Random losowanie = new Random(); int nowiPacjenci = losowanie.Next(5, maxIloscPacjentow + liczbaMiejscNaPacjentow); mojSzpital.IloscPacjentow += nowiPacjenci; if (mojSzpital.IloscPacjentow > mojSzpital.IloscLozek) { mojSzpital.IloscPacjentow = mojSzpital.IloscLozek; } if (losowanie.Next(1, 101) > 100 - szansaUtratyLekarza + modyfikatorTrudnosci) { mojSzpital.IloscDostepnychLekarzy -= 1; Console.WriteLine($"Wyprawa udana. Niestety jeden lekarz poświęcił się dla uratowania przed straszliwym wirusem {nowiPacjenci} nowych pacjentów"); return(czyZepsutyPojazd); } else { Console.WriteLine($"Wyprawa udana, znaleziono {nowiPacjenci} nowych pacjentów. Wszyscy szczęśliwi, radośni, poobijani i z nowym kredytem wracają do domu."); return(czyZepsutyPojazd); } } else if (mojSzpital.IloscDostepnychLekarzy == 0) { Console.WriteLine("Dopadła Cię choroba Polskiego NFZ - wszyscy lekarze są na Zachodzie"); return(czyZepsutyPojazd); } else { Console.WriteLine("Zgłoś się do NFZ po fundusze, bo ten wyjazd nie będzie refundowany"); return(czyZepsutyPojazd); } // mojSzpital.IloscPacjentow += nowiPacjenci; // if (mojSzpital.IloscPacjentow > mojSzpital.IloscLozek) // { // mojSzpital.IloscPacjentow = mojSzpital.IloscLozek; // Console.WriteLine("Liczba znalezionych pacjentów przekroczyła liczbę dostępnych łóżek. Nie wszyscy mogli zostać zabrani do szpitala."); // } }