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(); } }
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))); } }
public void SubscribeTo(ActiveLobby room) { if (_unsub1 != null) { throw new InvalidOperationException("already subsribed"); } _unsub1 = room.SubscribeWithPreviousEvents(this); _unsub2 = room.GameContext.SubscribeWithPreviousEvents(this); }
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); }