/// <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(); }
/// <summary> /// Konstruktor Planszy Bitwy /// </summary> /// <param name="grid">Grid, w którym zostanie stworzona siatka 10x10</param> public G_PlanszaBitwy(Grid grid, L_PlanszaBitwy planszaLogiczna, bool czyPlanszaGracza, bool czyPierwszaGra) { _grid = grid; _planszaLogiczna = planszaLogiczna; _czyPlanszaGracza = czyPlanszaGracza; if (czyPierwszaGra) { TworzSiatke(); } WypelnijPolami(); }
public void DodajStatek_DodanoJedenStatek() { //Przygotowanie L_PlanszaBitwy plansza = new L_PlanszaBitwy(); List <L_Statek> listaStatkow = plansza.Statki; int poprzedniaDlugosc = listaStatkow.Count; L_Statek statek = new L_Statek(); //Działanie plansza.DodajStatek(statek); //Sprawdzenie Assert.IsTrue(listaStatkow.Count > poprzedniaDlugosc); }
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 WypelnijPustePola_NieMaPolOwartosciNull() { //Przygotowanie L_PlanszaBitwy plansza = new L_PlanszaBitwy(); L_Pole[,] pola = plansza.Pola; //Działanie bool polaSaPuste = true; for (int i = 0; i < pola.GetLength(0); i++) { for (int j = 0; j < pola.GetLength(1); j++) { if (pola[i, j] == null) { polaSaPuste = false; } } } //Sprawdzenie Assert.IsTrue(polaSaPuste); }
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> /// 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; }
/// <summary> /// Konstruktor nowej gry. /// </summary> public L_Gra() { _planszaGracza = new L_PlanszaBitwy(); _planszaKomputera = new L_PlanszaBitwy(); }
/// <summary> /// Sędzia kalosz /// </summary> /// <param name="gra">obecna gra</param> public L_Sedzia(L_Gra gra) { _gra = gra; _planszaGracza = _gra.PlanszaGracza; _planszaKomputera = _gra.PlanszaKomputera; }