Пример #1
0
        public void FinishGame(ChessGameStatus status)
        {
            // TODO: refactor printing the game status as extension function

            // write final game status to game log
            if (status == ChessGameStatus.Checkmate)
            {
                GameLog = $"checkmate, { _lastDraw.Value.DrawingSide } player wins!\r\n{ GameLog }";
            }
            else if (status == ChessGameStatus.Stalemate)
            {
                GameLog = $"stalemate!\r\n{ GameLog }";
            }
            else if (status == ChessGameStatus.Tie || status == ChessGameStatus.UnsufficientPieces)
            {
                GameLog = $"unsifficient pieces, { _lastDraw.Value.DrawingSide.Opponent() } player cannot win anymore!\r\n{ GameLog }";
            }

            // reset local game cache variables
            _drawIndex = 0;
            _drawStart = DateTime.Now;
            _lastDraw  = null;
            //_tempBoard = ChessBitboard.StartFormation;
            _clockToken.Cancel();

            // update view
            StatusText = string.Empty;
            NotifyPropertyChanged(nameof(StatusText));
            NotifyPropertyChanged(nameof(GameLog));
        }
Пример #2
0
        public async Task SendBoard(string gameId, ChessGameStatus gameStatus)
        {
            var updatedGameStatus = _gameHelper.UpdateBoard(gameId, gameStatus);
            await _hubContext.Clients.Group(gameId).SendAsync("GameStatus", updatedGameStatus);

            await _hubContext.Clients.Group(gameId).SendAsync("Send", "Update status by contexthub.");
        }
Пример #3
0
 public void ResignGane()
 {
     if (GameStatus == ChessGameStatus.ChessGameStatus_Playing)
     {
         EndDateUTC = DateTime.UtcNow;
         GameStatus = ChessGameStatus.ChessGameStatus_Finihed;
     }
 }
Пример #4
0
        public ChessGameStatus UpdateBoard(string gameId, ChessGameStatus gameStatus)
        {
            var game = gameTasks.First(g => g.Game.Room.Id.ToString() == gameId);

            game.GameStatus.Board = gameStatus.Board;
            game.ChangeTurn();
            return(game.GameStatus);
        }
Пример #5
0
        public ChessGameStatus UpdateGameStatus(string gameId, ChessGameStatus gameStatus)
        {
            var game = gameTasks.First(g => g.Game.Room.Id.ToString() == gameId);

            game.GameStatus.IsFinished       = gameStatus.IsFinished;
            game.GameStatus.ResignedPlayerId = gameStatus.ResignedPlayerId;
            game.GameStatus.DrawOffered      = gameStatus.DrawOffered;
            game.GameStatus.DrawAccepted     = gameStatus.DrawAccepted;
            game.GameStatus.Result           = gameStatus.Result;

            return(game.GameStatus);
        }
Пример #6
0
        public void StartNewGame()
        {
            if (GameStatus == ChessGameStatus.ChessGameStatus_NonStarted ||
                GameStatus == ChessGameStatus.ChessGameStatus_Finihed)
            {
                StartDateUTC = DateTime.UtcNow;

                StartTurnForPlayer(PlayerWhite);
                GameStatus = ChessGameStatus.ChessGameStatus_Playing;
                Round      = 0;
                OnGameStartEventRaiser();
            }
            else
            {
                throw new ChessExceptionInvalidGameAction(ExceptionCode.AnotherGameInProgress, "Cannot start a new game, another game is in progress");
            }
        }
Пример #7
0
 public GameTask(ChessGameStatus gameStatus, Game game)
 {
     GameStatus = gameStatus;
     Game       = game;
 }
Пример #8
0
 public ChessGame()
 {
     Board      = new ChessBoard();
     GameStatus = ChessGameStatus.ChessGameStatus_NonStarted;
     defaultTimeAvailablePerPlayer = new TimeSpan(0, 15, 0);
 }
Пример #9
0
 //The game never stop the clock itself, but it starts the clocks automatically.
 private void PlayerClock_OnTimeFinish(object sender, ChessClockEventArgs e)
 {
     GameStatus = ChessGameStatus.ChessGameStatus_Finihed;
 }
Пример #10
0
 /// <summary>
 /// Evaluates whether the given check game status indicates that the game is over.
 /// </summary>
 /// <param name="status">the game status to be evaluated</param>
 /// <returns>a boolean indicating whether the game is over</returns>
 public static bool IsGameOver(this ChessGameStatus status)
 {
     return(!(status == ChessGameStatus.None || status == ChessGameStatus.Check));
 }
 public async Task SendGameStatus(string gameId, ChessGameStatus gameStatus)
 {
     await _chessHub.SendGameStatus(gameId, gameStatus);
 }