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); }
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 }
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ł>(); }
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); }
public void DodajRuchDoPlanszy(Ruch ruch) { ZmienStanPola(ruch.Kolumna[0], ruch.Wiersz[0], false); ZmienStanPola(ruch.Kolumna[1], ruch.Wiersz[1], false); }
public Plansza KopiujIWykonajRuch(Ruch ruch) { DodajRuchDoPlanszy(ruch); return(this); }