예제 #1
0
        public IGame CreateGame(IShip[] playerShips, IDifficultyLevel difficulty)
        {
            IGame game = _gameFactory.Create(playerShips, difficulty);

            _gameDictionary.Add(game.Guid, game);
            return(game);
        }
예제 #2
0
            private async Task <Game> CreateGameAsync(JoinAnyGameCommand request, GameTypeMetadata metadata)
            {
                if (request.MaxPlayers > metadata.MaxPlayers)
                {
                    throw new ValidationException("Players cannot be greather than max number of players");
                }

                var game = _gameFactory.Create(request.GameType);

                game.Status       = GameStatus.WaitingForPlayers;
                game.GameType     = request.GameType; // add validation: check that value is part of enum values
                game.MinPlayers   = metadata.MinPlayers;
                game.MaxPlayers   = request.MaxPlayers ?? metadata.MaxPlayers;
                game.MaxDuration  = request.Duration ?? metadata.DefaultDuration;
                game.IsOpen       = request.IsOpen;
                game.PlayersCount = 1;
                game.Players      = new List <Game.Player>()
                {
                    new Game.Player()
                    {
                        Id         = _playerIdentity.Id,
                        Name       = _playerIdentity.Name,
                        AcceptedAt = DateTime.UtcNow
                    }
                };
                return(await _repository.CreateGameAsync(game));
            }
예제 #3
0
        public void Run()
        {
            var returnCode = 2;

            while (returnCode == 2)
            {
                returnCode = _game.Start();

                //Code : on quite
                if (returnCode == 0)
                {
                    _game_repository.Delete();
                }

                //[1] Code : on quitte en sauvegardant

                //Code : lancement d'une nouvelle partie
                if (returnCode == 2)
                {
                    _displayer.Clear();
                    _displayer.Show("Lancement d'une nouvelle partie !");
                    _game_repository.Delete();
                    _game_model = _game_factory.Create(NUMBER_ROUND);
                    _game       = new TicTacToeGame(_reader, _displayer, _formatter, _player_factory, _round_factory, _game_model, _game_repository);
                }
            }
        }
예제 #4
0
        public Result Create()
        {
            ResultBuilder resultBuilder = new ResultBuilder();

            if (_gameAccessor.Game != null && _gameAccessor.Game.GameState != GameState.Finished)
            {
                resultBuilder.AddFeedback("Cannot create a new game when there's still a game active.", false);
                return(resultBuilder.Build());
            }

            _gameAccessor.Game = _gameFactory.Create(new Settings
            {
                RuleSet = new RuleSet
                {
                    CardsOnStart      = 4,
                    GiveCardBehaviour = GiveCardBehaviour.Single,
                    StartBehaviour    = StartBehaviour.RandomPlayer,
                    TurnBehaviour     = TurnBehaviour.LastAskedPlayer
                },
                DeckSettings = new DeckSettings()
            });

            resultBuilder.AddFeedback("A new game was created.");

            return(resultBuilder.Build());
        }
예제 #5
0
 public GameService(IGameRepository gameRepository, IGameFactory factory, int gameHeight, int snakeLength)
 {
     _gameRepository = gameRepository ?? throw new ApplicationException(nameof(gameRepository));
     _factory        = factory ?? throw new ApplicationException(nameof(factory));
     _gameHeight     = gameHeight;
     _snakeLength    = snakeLength;
     _game           = _factory.Create(0, gameHeight, snakeLength);
 }
예제 #6
0
        private int GetThroughput(int wipLimit)
        {
            var game = _gameFactory.Create(PlayerCount, wipLimit, wipLimit);

            game.DaysPassed(DayCount);

            return(game.DoneCardsCount);
        }
예제 #7
0
 public Program(ICommunicator communicator, IGameFactory gameFactory, IGameStatePrinter gameStatePrinter, ICommandInterpreter interpreter)
 {
     _communicator     = communicator;
     _gameFactory      = gameFactory;
     _gameStatePrinter = gameStatePrinter;
     _interpreter      = interpreter;
     Game = _gameFactory.Create();
 }
예제 #8
0
 public void Logic()
 {
     _game.Logic();
     if (_game.GameOver)
     {
         _gameRepository.Add(_game);
         _game = _factory.Create(0, _gameHeight, _snakeLength);
     }
 }
예제 #9
0
            protected void InitWithGame(Game game)
            {
                _game    = game;
                _id      = new Guid();
                _factory = Substitute.For <IGameFactory>();
                _factory.Create(Arg.Any <string>(), Arg.Any <string>()).Returns(_game);

                _repo = Substitute.For <IRepository <Game> >();
                _repo.Add(Arg.Any <Game>()).Returns(_id);
                _repo.Get(Arg.Any <Guid>()).Returns(_game);

                _authorizer = Substitute.For <IAuthorizer>();
                _logger     = Substitute.For <ILogger>();

                _sut = new GameApi(_factory, _repo, _authorizer, _logger);
            }
예제 #10
0
        public ActionResult CreateGame(NewGameViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("CreateGame", viewModel));
            }

            var player = _cookieManager.ExtractPlayerFromCookie(Request);
            var game   = _gameFactory.Create(viewModel.Name);

            game.AddPlayer(player);
            game.StartGame();

            _gameRepository.Add(game);

            return(RedirectToAction("Index", "Game", new { id = game.Id }));
        }
예제 #11
0
		public TicTacToeRunner (IReader reader, IDisplayer displayer, IBoardFormatter formatter, IPlayerFactory player_factory, IRoundFactory round_factory, IGameFactory game_factory, IGameRepository game_repository)
		{
			_reader = reader;
			_displayer = displayer;
			_game_repository = game_repository;
			_game_factory = game_factory;
			_formatter = formatter;
			_round_factory = round_factory;
			_player_factory = player_factory;

			//on charge la partie dans le repo
			_game_model = _game_repository.Load();

			if(_game_model == null)
				_game_model = game_factory.Create (NUMBER_ROUND);
			
			_game = new TicTacToeGame (_reader, _displayer, formatter, player_factory, round_factory, _game_model, _game_repository);
		}
예제 #12
0
        public Guid Create(string player1Id, string player2Id, string userId)
        {
            try
            {
                _authorizer.AssertAuthorizedForCreate(userId);

                var game = _factory.Create(player1Id, player2Id);

                var id = _repo.Add(game);

                _logger.Info($"Created a game between '{player1Id}' and '{player2Id}'.");

                return(id);
            }
            catch (Exception ex)
            {
                _logger.Error("An error occurred creating a game", ex);
                throw;
            }
        }
예제 #13
0
        public TicTacToeRunner(IReader reader, IDisplayer displayer, IBoardFormatter formatter, IPlayerFactory player_factory, IRoundFactory round_factory, IGameFactory game_factory, IGameRepository game_repository)
        {
            _reader          = reader;
            _displayer       = displayer;
            _game_repository = game_repository;
            _game_factory    = game_factory;
            _formatter       = formatter;
            _round_factory   = round_factory;
            _player_factory  = player_factory;

            //on charge la partie dans le repo
            _game_model = _game_repository.Load();

            if (_game_model == null)
            {
                _game_model = game_factory.Create(NUMBER_ROUND);
            }

            _game = new TicTacToeGame(_reader, _displayer, formatter, player_factory, round_factory, _game_model, _game_repository);
        }
예제 #14
0
        public bool NewGame(List <IPlayer> players)
        {
            lock (NewGameLock)
            {
                if (players == null || players.Count != 2)
                {
                    throw new GameServerException(
                              "Exception occurred while creating new game. NewGame method requires not-null list of 2 players.");
                }

                if (GetGameByPlayerIdOrDefault(players[0].OnlineId) == null &&
                    GetGameByPlayerIdOrDefault(players[1].OnlineId) == null)
                {
                    IGame game = gameFactory.Create(players);
                    game.State = GameState.Ready;
                    RunningGames.Add(game);
                    return(true);
                }
                return(false);
            }
        }
예제 #15
0
        public GameInfo Create([FromBody] GameData gameData)
        {
            var gameInfo  = _gameFactory.Create(gameData.SymbolsForEachCard);
            var isCorrect = true;

            foreach (var card in gameInfo.Cards)
            {
                var card1 = card;
                foreach (var secondCard in gameInfo.Cards.Where(c => c != card1))
                {
                    var secondCard1  = secondCard;
                    var commonSymbol = card1.Lines.Where(l => secondCard1.Lines.Contains(l));
                    if (commonSymbol.Count() != 1)
                    {
                        isCorrect = false;
                        break;
                    }
                }
            }
            return(gameInfo);
        }
예제 #16
0
        public void TestSingleFile(string exe)
        {
            var badShots    = 0;
            var crashes     = 0;
            var gamesPlayed = 0;
            var shots       = new List <int>();
            var ai          = aiFactory.Create(exe, monitor);

            for (var gameIndex = 0; gameIndex < settings.GamesCount; gameIndex++)
            {
                var map  = mapGenerator.GenerateMap();
                var game = gameFactory.Create(map, ai);
                RunGameToEnd(game);
                gamesPlayed++;
                badShots += game.BadShots;
                if (game.AiCrashed)
                {
                    crashes++;
                    if (crashes > settings.CrashLimit)
                    {
                        break;
                    }
                    ai = aiFactory.Create(exe, monitor);
                }
                else
                {
                    shots.Add(game.TurnsCount);
                }
                if (settings.Verbose)
                {
                    Console.WriteLine(
                        "Game #{3,4}: Turns {0,4}, BadShots {1}{2}",
                        game.TurnsCount, game.BadShots, game.AiCrashed ? ", Crashed" : "", gameIndex);
                }
            }
            ai.Dispose();
            WriteTotal(ai, shots, crashes, badShots, gamesPlayed);
        }
예제 #17
0
 public void NewGame()
 {
     Game = _gameFactory.Create();
 }
예제 #18
0
 public void Restart(object sender, EventArgs e)
 {
     Game = gameFactory.Create(player);
     mainPanel.Controls.RemoveAt(1);
     mainPanel.Controls.Add(gamePanel, 0, 1);
 }
예제 #19
0
 public void Init(int symbolsNumber)
 {
     SetUp();
     _gameStarted = true;
     _gameInfo    = _gameFactory.Create(symbolsNumber);
 }
예제 #20
0
        public async void StartGame(GameType type, string level = "")
        {
            logger.Info("Game started");
            try
            {
                if (MoveReceived == null)
                {
                    logger?.Error("InvalidOperationException: " + StringResources.TheGameCanNotBeStartedBecauseOfMoveReceivedIsNull());
                    throw new InvalidOperationException(
                              StringResources.TheGameCanNotBeStartedBecauseOfMoveReceivedIsNull());
                }

                var players = new List <IPlayer>();
                switch (type)
                {
                case GameType.SinglePlayer:
                    players.Add(playerFactory.Create(PlayerType.Human, 1));
                    players.Add(playerFactory.Create(PlayerType.Bot, 2));
                    break;

                case GameType.TwoPlayers:
                    players.Add(playerFactory.Create(PlayerType.Human, 0));
                    players.Add(playerFactory.Create(PlayerType.Human, 0));
                    break;

                case GameType.Online:
                    if (proxy == null)
                    {
                        logger?.Error("InvalidOperationException: " +
                                      StringResources.TheGameCanNotBeStartedBecauseOfProxyIsNull());
                        throw new InvalidOperationException(
                                  StringResources.TheGameCanNotBeStartedBecauseOfProxyIsNull());
                    }
                    isOnlineGameRequestCancelled = false;

                    if (!isRequestingOnlineGame)
                    {
                        players = await Task.Factory.StartNew(RequestOnlinePlayer).Result;
                    }

                    if (players.Count != 2)
                    {
                        return;
                    }

                    if (players[0].Type.Equals(PlayerType.OnlinePlayer))
                    {
                        GetFirstMove(myOnlineId);
                    }
                    break;

                case GameType.Bluetooth:
                    break;

                case GameType.Wifi:
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(type), type, null);
                }
                CurrentGame = gameFactory.Create(players, level);
            }
            catch (TimeoutException ex)
            {
                string exceptionMessage = StringResources.TimeoutExceptionOccured("StartGame", ex.Message);
                logger?.Error(exceptionMessage);

                throw new GameServerException(exceptionMessage, ex);
            }
            catch (FaultException ex)
            {
                string exceptionMessage = StringResources.ExceptionOccuredOnServerSide("StartGame", ex.Message);
                logger?.Error(exceptionMessage);

                throw new GameServerException(exceptionMessage, ex);
            }
            catch (CommunicationException ex)
            {
                string exceptionMessage = StringResources.CommunicationProblemOccured("StartGame", ex.Message);
                logger?.Error(exceptionMessage);

                throw new GameServerException(exceptionMessage, ex);
            }
        }