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
        /// <summary>
        /// Metoda pozwala na stworzenie wstępnie uzupełnionej planszy gry
        /// </summary>
        /// <param name="rozm"> Rozmiar planszy z zakresu 15-51 </param>
        /// <param name="wejscie"> String z danymi wcześniej zapełnionych pól </param>
        /// <returns>Uzupełniona wstepnie plansza gry</returns>
        public static Plansza WstepneUzupelnianie(int rozm, string wejscie)
        {
            //Dzielenie stringa na poledyncze ruchy
            var zajetePoSplit = wejscie.Split(',').ToList();
            var zajete        = new List <Koordynaty>();

            //Usuwanie klamer i odzielanie współrzędnych
            foreach (var ciag in zajetePoSplit)
            {
                var temp = ciag.Replace("{", string.Empty);
                temp = temp.Replace("}", string.Empty);
                var koordynaty = temp.Split(';').ToArray();
                zajete.Add(new Koordynaty(int.Parse(koordynaty[0]), int.Parse(koordynaty[1])));
            }

            //Tworzenie planszy
            var plansza = new Plansza(rozm);

            //Zapełnianie planszy predefiniowanymi elementami
            foreach (var item in zajete)
            {
                plansza.ZmienStanPola(item.kolumna, item.wiersz, false);
            }

            return(plansza);
        }
Beispiel #3
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 #4
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 #5
0
        public Węzeł Przeszukaj(Plansza plansza, Węzeł.Strona strona)
        {
            if (this.plansza.CzyTakieSamePlansze(plansza) == true && this.strona == strona)
            {
                return(this);
            }

            foreach (var item in this.dzieci)
            {
                item.Przeszukaj(plansza, strona);
            }

            return(null);
        }
Beispiel #6
0
 public bool CzyTakieSamePlansze(Plansza plansza)
 {
     for (int i = 0; i < plansza.Rozm; i++)
     {
         for (int j = 0; j < plansza.Rozm; j++)
         {
             if (this.plansza[i, j].puste != plansza.plansza[i, j].puste)
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Beispiel #7
0
        public Plansza SkopiujPole(Plansza plansza)
        {
            var pl = new Plansza();

            pl.Rozm    = plansza.Rozm;
            pl.plansza = new Pole[pl.Rozm, pl.Rozm];
            for (int i = 0; i < plansza.Rozm; i++)
            {
                for (int j = 0; j < plansza.Rozm; j++)
                {
                    pl.plansza[i, j]       = new Pole();
                    pl.plansza[i, j].puste = plansza.plansza[i, j].puste;
                }
            }
            return(pl);
        }