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)); }
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."); }
public void ResignGane() { if (GameStatus == ChessGameStatus.ChessGameStatus_Playing) { EndDateUTC = DateTime.UtcNow; GameStatus = ChessGameStatus.ChessGameStatus_Finihed; } }
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); }
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); }
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"); } }
public GameTask(ChessGameStatus gameStatus, Game game) { GameStatus = gameStatus; Game = game; }
public ChessGame() { Board = new ChessBoard(); GameStatus = ChessGameStatus.ChessGameStatus_NonStarted; defaultTimeAvailablePerPlayer = new TimeSpan(0, 15, 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; }
/// <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); }