Beispiel #1
0
        //static readonly char sep = Path.DirectorySeparatorChar;
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}Provincial{sep}data{sep}kingdoms{sep}";
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}";

        static void Main(string[] args)
        {
            string     directoryPath = BuyAgenda.DirectoryPath;
            List <int> numbers       = new List <int> {
                -1, 2, 4, 7, 10
            };

            foreach (var item in new Subsets(numbers, 2))
            {
                WriteLine(item.Aggregate("", (e, f) => e + " " + f.ToString()));
            }

            List <Card> cards = PresetGames.Get(Games.BigMoney);

            string first       = "Tens";
            var    firstAgenda = new SimpleManager(directoryPath, "Tens_").LoadBest(cards);

            User getFirst() => new ProvincialAI(firstAgenda, first);

            string second       = "Fives";
            var    secondAgenda = new CachedManager(directoryPath, 5, "Fives_").LoadBest(cards);

            User getSecond() => new ProvincialAI(secondAgenda, second);

            Game game    = new Game(new User[] { getFirst(), getSecond() }, cards.GetKingdom(2), new MyLogger());
            var  task    = game.Play();
            var  results = task.Result;

            ReadLine();
        }
Beispiel #2
0
        void StartButton_Click(object sender, EventArgs e)
        {
            GamePanel.Show();
            SetKingdomPanel.Hide();
            SettingsPanel.Hide();
            LogTextBox.Text          = "";
            StartGameButton.Text     = "Restart";
            SetKingdomButton.Enabled = false;
            SettingsButton.Enabled   = false;
            PlayAreaPanel.Controls.Clear();
            PhaseLabel.Text       = "Loading";
            PhaseDescription.Text = "Please wait, game will be ready as soon as possible.";

            gameParams.Save();

            if (tokenSource != null)
            {
                tokenSource.Cancel();
                tokenSource = new CancellationTokenSource();
            }

            Task.Run(() =>
            {
                var human = new Human(PlayCard, GainCard, Choice, AlternativeChoice, job, gameParams.User1Name);
                BuyAgendaManager manager = null;

                switch (gameParams.AIType)
                {
                case AIType.Tens:
                    manager = new SimpleManager(directoryPath, "Tens_");
                    break;

                case AIType.Fives:
                    manager = new CachedManager(directoryPath, 5, "Fives_");
                    break;

                case AIType.Threes:
                    manager = new CachedManager(directoryPath, 3, "Threes43_");     // TODO
                    break;

                default:
                    break;
                }

                var agenda = manager.LoadBest(gameParams.Cards);
                if (agenda == null)
                {
                    Action function = () =>
                    {
                        MessageBox.Show("There is no suitable opponent for this kingdom. \n Please try different cards or" +
                                        " different type of opponent.");
                        StopButton_Click(sender, e);
                    };
                    this.Invoke(function);
                    return;
                }

                var ai = new ProvincialAI(agenda, gameParams.AIType.ToString());

                var source = new CancellationTokenSource();

                Game game = new Game(new User[] { ai, human }, gameParams.Cards.GetKingdom(2), new WindowLogger(Log), tokenSource);
                game.Play(int.MaxValue).ContinueWith((results) => EnableNextGame(results));
            });
        }
Beispiel #3
0
        //static readonly char sep = Path.DirectorySeparatorChar;
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}Provincial{sep}data{sep}kingdoms{sep}";
        //static string directoryPath = $"..{sep}..{sep}..{sep}AI{sep}";

        static void Main(string[] args)
        {
            string directoryPath = BuyAgenda.DirectoryPath;
            var    array         = new List <int[]>();

            for (int i = 0; i < 33; i++)
            {
                array.Add(new int[3]);
                array[i][2] = i;
            }

            var threes43 = new CachedManager(directoryPath, 3, "Threes43_");

            for (int i = 0; i < 100; i++)
            {
                var Cards = Enumerable.Range((int)CardType.Adventurer, 25)
                            .Select(t => ((t, r: new ThreadSafeRandom().NextDouble())))
                            .OrderBy(a => a.r)
                            .Take(10)
                            .Select(((int type, double)a) => Card.Get((CardType)a.type))
                            .OrderBy(a => a.Price)
                            .ThenBy(a => a.Name)
                            .ToList();

                foreach (var c in threes43.LoadBest(Cards).Id.ToCardList())
                {
                    array[(int)c.Type][0]++;
                }

                foreach (var c in Cards)
                {
                    array[(int)c.Type][1]++;
                }
            }

            foreach (var c in array.OrderBy(a => (double)a[0] / a[1]))
            {
                WriteLine($"{(CardType)c[2]} {c[0]}/{c[1]}");
            }

            ReadLine();
            return;


            var tens   = new SimpleManager(directoryPath, "Tens_");
            var cards  = tens.RandomKingdom();
            var fives  = new CachedManager(directoryPath, 5, "Fives_");
            var threes = new CachedManager(directoryPath, 3, "Threes_");

            var agendas = new List <BuyAgendaTournament.Tuple>();

            //   agendas.Add(new BuyAgendaTournament.Tuple { Agenda = tens.LoadBest(cards), Id = "tens" });
            //  agendas.Add(new BuyAgendaTournament.Tuple { Agenda = tens.LoadBest(cards), Id = "tens" });
            agendas.Add(new BuyAgendaTournament.Tuple {
                Agenda = fives.LoadBest(cards), Id = "fives"
            });
            agendas.Add(new BuyAgendaTournament.Tuple {
                Agenda = threes.LoadBest(cards), Id = "threes"
            });

            var sw = new Stopwatch();

            sw.Start();
            agendas.Tournament(cards, gameCount);
            sw.Stop();
            WriteLine(sw.Elapsed.TotalSeconds);

            agendas.ShowResults(new MyLogger());

            ReadLine();
        }
Beispiel #4
0
 public static void Dispose()
 {
     EntityManager.Dispose();
     CachedManager.Dispose();
 }
Beispiel #5
0
 public static void Init()
 {
     CachedManager.Init();
     EntityManager.Init();
 }