コード例 #1
0
        private void StartNewGame(Player invitee, Player inviter)
        {
            var blackPlayer = new BlackPlayer(inviter.Name);
            var whitePlayer = new WhitePlayer(invitee.Name);
            var game        = CreateNewGame(blackPlayer);
            var state       = JoinGame(game.GameId, whitePlayer);

            OnGameStarted(blackPlayer, state);
            OnGameStarted(whitePlayer, state);
        }
コード例 #2
0
        public GameStatus JoinGame(Guid gameId, Player player)
        {
            AssertPlayerIsRegistered(player);

            var whitePlayer = new WhitePlayer(player.Name);

            var game = _activeGames[gameId];

            game.JoinOpponent(whitePlayer);
            return(game.CurrentStatus);
        }
コード例 #3
0
        public void JoinOpponent(WhitePlayer player)
        {
            if (_whitePlayer != null)
            {
                throw new InvalidOperationException("An opponent has already joined the game");
            }

            _whitePlayer = player;
            _observers.Add(player);
            GameState = GameState.Playing;
            OnPlayerJoined();
        }
コード例 #4
0
        public GameStatus(
            Guid gameId,
            GameState gameState,
            Board board,
            DiscColor discOfNextMove,
            IReadOnlyList <Position> discsFlipped,
            Move lastValidMove,
            BlackPlayer blackPlayer,
            WhitePlayer whitePlayer
            )
        {
            GameId       = gameId;
            CurrentState = board.CurrentState;
            GameState    = gameState;
            Debug.WriteLine(board);
            DiscOfNextMove = discOfNextMove;
            DiscsFlipped   = discsFlipped;
            LastValidMove  = lastValidMove;

            int blackPlayerScore = 0;
            int whitePlayerScore = 0;

            for (var i = 0; i < Board.EdgeSize; i++)
            {
                for (var j = 0; j < Board.EdgeSize; j++)
                {
                    if (CurrentState[i, j] == -1)
                    {
                        blackPlayerScore += 1;
                    }
                    else if (CurrentState[i, j] == 1)
                    {
                        whitePlayerScore += 1;
                    }
                }
            }

            BlackPlayerStatus = new PlayerStatus(blackPlayer.Name, blackPlayerScore);
            WhitePlayerStatus = new PlayerStatus(whitePlayer?.Name ?? "No player", whitePlayerScore);
        }