Exemplo n.º 1
0
        static void PlayAgainstBots()
        {
            var players = new[]
            {
                Player.CreateBot("Fatz!"),
                Player.CreateBot("Hans"),
                Player.CreateCustom("YOU", new ConsolePlayer()),
            };

            var playerFactory = new PlayerFactory()
                                .RegisterOrOverrideCreator(nameof(ConsolePlayer), () => new ConsolePlayer());

            var gameDef = new EumelGameRoomDefinition(
                "the game",
                players.Select(p => p.Info).ToImmutableList().WithValueSemantics(),
                EumelGamePlan.For(players.Length),
                new GameRoomSettings(0)
                );
            var botController = new BotController(players.Select(p => p.Invocable), gameDef);
            var lobby         = new ActiveLobby(botController, gameDef, GameProgress.NotStarted);

            var logger = new ConsoleGameObserver();

            lobby.SubscribeWithPreviousEvents(logger);
            lobby.GameContext.SubscribeWithPreviousEvents(logger);
            while (lobby.HasMoreRounds)
            {
                lobby.StartNextRound();
            }
        }
Exemplo n.º 2
0
        public static void Run()
        {
            var players = new[]
            {
                Player.CreateCustom("TrickBoy1", new MaxTrickBoy()),
                Player.CreateCustom("O1", new Opportunist()),
                Player.CreateCustom("TrickBoy2", new MaxTrickBoy()),
                Player.CreateCustom("O1", new Opportunist()),
                Player.CreateCustom("O1", new Opportunist()),
                Player.CreateCustom("O1", new Opportunist()),
            };

            for (int repeat = 0; repeat <= 10; repeat++)
            {
                var scoreTracker = new ScoreTracker();
                // scoreTracker.PrintHeader(players);
                for (int games = 0; games < 1000; games++)
                {
                    var gameDef = new EumelGameRoomDefinition(
                        "the game",
                        players.Select(p => p.Info).ToImmutableList().WithValueSemantics(),
                        EumelGamePlan.For(players.Length),
                        new GameRoomSettings(0)
                        );
                    var botController = new BotController(players.Select(p => p.Invocable), gameDef);
                    var room          = new ActiveLobby(botController, gameDef, GameProgress.NotStarted);
                    room.SubscribeWithPreviousEvents(scoreTracker);
                    while (room.HasMoreRounds)
                    {
                        room.StartNextRound();
                    }
                }
                Console.WriteLine("Total scores: " + string.Join(", ", Enumerable.Zip(players.Select(p => p.Info.Name), scoreTracker.Scores)));
            }
        }
Exemplo n.º 3
0
 public void SubscribeTo(ActiveLobby room)
 {
     if (_unsub1 != null)
     {
         throw new InvalidOperationException("already subsribed");
     }
     _unsub1 = room.SubscribeWithPreviousEvents(this);
     _unsub2 = room.GameContext.SubscribeWithPreviousEvents(this);
 }
Exemplo n.º 4
0
        private ActiveLobby ActivateLobby(EumelGameRoomDefinition room)
        {
            var roomName = room.Name;

            _logger.LogInformation("activating lobby for {roomName}", roomName);
            var progress      = _eventRepo.GetGameProgress(roomName);
            var botController = CreateBotControllerFor(room);
            var newLobby      = new ActiveLobby(botController, room, progress);

            newLobby.Subscribe(_eventPersister);
            newLobby.GameContext.Subscribe(_eventPersister);
            newLobby.EnsureStarted();
            return(newLobby);
        }