示例#1
0
        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
        }