private void NotifyAboutCheckMate(Player initiator, Player opponent, ChessPoint from, ChessPoint to) { var field = _virtualField.CloneMatrix(); _turnColor = _turnColor.Invert(); var winner = initiator.PlayerColor; var winnerGameInfo = new WcfGameInfo( initiator.PlayerColor, opponent.PlayerName, field.ToJaggedArray(), _turnColor, winner); var loserGameInfo = new WcfGameInfo( initiator.PlayerColor, opponent.PlayerName, field.ToJaggedArray(), _turnColor, winner); initiator.Callback.GameHasEnded(winnerGameInfo, from.FromBusiness(), to.FromBusiness()); opponent.Callback.GameHasEnded(loserGameInfo, from.FromBusiness(), to.FromBusiness()); GameEnded?.Invoke(this, EventArgs.Empty); }
/// <inheritdoc/> public void GameHasEnded(WcfGameInfo gameInfo, WcfChessPoint from, WcfChessPoint to) { var args = new FieldInfoArgs( gameInfo.GameField, gameInfo.TurnColor, @from.ToBusiness(), to.ToBusiness(), gameInfo.PlayerColor, null); FieldUpdated?.Invoke(this, args); GameEnded?.Invoke(this, new GameEndedArgs(gameInfo.WinnerColor)); }
public void Initialize() { if (_isInitialized) { return; } var randomColor = DateTime.Now.Millisecond % 2 == 0 ? PlayerColor.White : PlayerColor.Black; var player1Color = randomColor; var player2Color = player1Color.Invert(); Player.SetColor(Player1, player1Color); Player.SetColor(Player2, player2Color); var chessGameField = VirtualFieldUtils.CreateDefaultField(); _turnColor = PlayerColor.White; _virtualField = new VirtualField(chessGameField); var p1GameInfo = new WcfGameInfo( player1Color, Player2.PlayerName, chessGameField.ToJaggedArray(), _turnColor); var p2GameInfo = new WcfGameInfo( player2Color, Player1.PlayerName, chessGameField.ToJaggedArray(), _turnColor); // TODO Если теряется связь то надо отдавать победу Player1.Callback.GameHasStarted(p1GameInfo); Player2.Callback.GameHasStarted(p2GameInfo); _isInitialized = true; }
/// <inheritdoc/> public void GameHasStarted(WcfGameInfo gameInfo) { GameInfo = gameInfo; GameStarted?.Invoke(this, EventArgs.Empty); }