public WspolnyInterfejs.Komendy OdbierzKomende() { byte[] polecenie = new byte[sizeof(int)]; _networkStream.Read(polecenie, 0, sizeof(int)); Komendy komenda = (Komendy)BitConverter.ToInt32(polecenie); Console.WriteLine("Get command: " + komenda); return(komenda); }
/// <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; }
/// <summary> /// Komputer po każdym wykonanym ruchu sprawdza co ten ruch spowodował i zależnie od tego podejmuje kolejną akcję. /// </summary> public void SprawdzRuch() { //Jeśli poziom trudności jest ustawiony na łatwy, strzelaj na ślepo if (_poziomTrudnosci == PoziomTrudnosci.Latwy) { _komenda = Komendy.Losuj; return; } #region Trafione pole było zajęte if (_wylosowanePole.Zajete) { _wlasnieZatopilem = CzyZatopilemStatek(_wylosowanePole.IDStatku); //Jeżeli dany strzał zatopił statek if (_wlasnieZatopilem) { _wlasnieTrafilem = false; _ktoryStrzal = 1; _komenda = Komendy.Losuj; } else { //Jeżeli dany strzał trafił kolejne pole statku if (_wlasnieTrafilem) { _komenda = Komendy.StrzelajWTymKierunku; _ktoryStrzal = 1; } else { //Jeżeli dany strzał trafił pierwsze pole statku _wlasnieTrafilem = true; _obranyKierunek = null; _ktoryStrzal = 1; _trafionePierwszePole = _wylosowanePole; _w_1 = _w; _k_1 = _k; _komenda = Komendy.SzukajDookola; } } } #endregion #region Trafione pole było puste //Jeżeli trafiło się kolejne pole statku, po czym spudłowało, ale statek statek nie został zatopiony. //Np. Kiedy trafiono w lewą stronę 3 pola 4-masztowca, ale jego ostatnie pole jest po prawej. else if (_komenda == Komendy.StrzelajWTymKierunku) { _ktoryStrzal = 1; _wlasnieZatopilem = false; //Zamień obecny kierunek na przeciwny if (_obranyKierunek == Kierunki.Dol) { _obranyKierunek = Kierunki.Gora; } else if (_obranyKierunek == Kierunki.Gora) { _obranyKierunek = Kierunki.Dol; } else if (_obranyKierunek == Kierunki.Lewo) { _obranyKierunek = Kierunki.Prawo; } else if (_obranyKierunek == Kierunki.Prawo) { _obranyKierunek = Kierunki.Lewo; } } //Jeżeli komputer szuka kolejnego pola statku dookoła, to następnym razem strzeli w kolejnym kierunku else if (_komenda == Komendy.SzukajDookola) { _wlasnieZatopilem = false; _ktoryStrzal++; } //Jeżeli nie trafił losowo, strzela dalej else { _wlasnieTrafilem = false; } #endregion }