Beispiel #1
0
        public Ruch ZnajdzOptymalnyRuch(Plansza plansza, DateTime start)
        {
            var stanObecny = this.korzeń.Przeszukaj(plansza, Węzeł.Strona.przeciwnik);

            if (stanObecny == null)
            {
                return(null);
            }

            double szansa   = -1;
            Ruch   docelowy = null;

            foreach (var item in stanObecny.dzieci)
            {
                var czas = DateTime.Now - start;
                if (czas.Milliseconds > 400)
                {
                    return(null);
                }

                double szansaNaWygr = (double)item.IloscWygranych / (double)item.IloscRozegranych;

                if (szansa < szansaNaWygr)
                {
                    szansa   = szansaNaWygr;
                    docelowy = item.ruch;
                }
            }

            return(docelowy);
        }
Beispiel #2
0
        static void Start()
        {
            #region KOMUNIKACJA_WSTEPNA
            //Odbieranie komunikatu o rozmiarze planszy
            try
            {
                rozm = int.Parse(Console.ReadLine());
            }
            catch (Exception e)
            {
                //Do celów debugowania
                ZakończProgramPoBłędzie("Błąd w trakcie wczytywania rozmiaru planszy", e.ToString());
            }
            //Potwierdzenie
            Console.WriteLine("ok");

            //Odbieranie komunikatu o wstępnie zajetych polach
            try
            {
                var wstępnieZaj = Console.ReadLine();
                plansza = Komunikator.WstepneUzupelnianie(rozm, wstępnieZaj);
            }
            catch (Exception e)
            {
                //Do debugowania
                ZakończProgramPoBłędzie("Błąd wstępnego zapłęniania planszy", e.ToString());
            }
            //Potwierdzenie
            Console.WriteLine("ok");
            #endregion

            #region PETLA GŁOWNA
            //Pętla główna w której toczy sie gra
            while (true)
            {
                // Odczytywanie ruchu przychodzącego
                var ruchPrzychodzący = Console.ReadLine();

                //Sprawdzanie czy jest to pierwszy ruch, czy nie
                if (ruchPrzychodzący == "start")
                {
                    //Brak ruchu przychodzącego (mój program zaczyna)
                    Ruch ruchPrzeciwnika = null;
                }
                else
                {
                    //Ruch przychodzący od przeciwnika
                    Ruch ruchPrzeciwnika = Komunikator.OdczytajRuch(ruchPrzychodzący);
                    plansza.DodajRuchDoPlanszy(ruchPrzeciwnika);
                }

                var mojRuch = ObliczRuch();

                //Wypisywanie ruchu wychodzącego
                Console.WriteLine(mojRuch.ToString());
                plansza.DodajRuchDoPlanszy(mojRuch);
            }
            #endregion
        }
Beispiel #3
0
 public Węzeł(Ruch ruch, Węzeł ojciec, Plansza plansza, Strona strona)
 {
     this.ruch    = ruch;
     this.ojciec  = ojciec;
     this.plansza = (Plansza)plansza.Clone();
     this.strona  = strona;
     dzieci       = new List <Węzeł>();
 }
Beispiel #4
0
        public bool SaTakieSame(Ruch ruch)
        {
            Array.Sort(this.Kolumna);
            Array.Sort(ruch.Kolumna);
            Array.Sort(this.Wiersz);
            Array.Sort(ruch.Wiersz);

            if ((this.Kolumna == ruch.Kolumna) && (this.Wiersz == ruch.Wiersz))
            {
                return(true);
            }
            return(false);
        }
Beispiel #5
0
 public void DodajRuchDoPlanszy(Ruch ruch)
 {
     ZmienStanPola(ruch.Kolumna[0], ruch.Wiersz[0], false);
     ZmienStanPola(ruch.Kolumna[1], ruch.Wiersz[1], false);
 }
Beispiel #6
0
 public Plansza KopiujIWykonajRuch(Ruch ruch)
 {
     DodajRuchDoPlanszy(ruch);
     return(this);
 }