private void EndOfMatch(ChessCom.MatchEvent result) { _timer?.Stop(); if (result == ChessCom.MatchEvent.Draw) { } else if ((result == ChessCom.MatchEvent.WhiteWin && _clientIsPlayer == ClientIsPlayer.White) || (result == ChessCom.MatchEvent.BlackWin && _clientIsPlayer == ClientIsPlayer.Black)) { WriteTextNonInvoke("Congratulations you won!!" + "\n"); } else { WriteTextNonInvoke("You lost, stupid idiot." + "\n"); } _clientIsPlayer = ClientIsPlayer.Both; _globalState.VisionRules.Enabled = false; _globalState.CalculateVision(); ClearBoard(); UpdateBoardFromGlobalState(); lookForMatchButton.IsEnabled = true; }
private void Field_PreviewMouseDown(object sender, MouseButtonEventArgs e) { //sender if (e.LeftButton == MouseButtonState.Pressed) { Grid fieldGrid = (Grid)sender; Field clickState = _globalState.GetFieldAt(fieldGrid.Name); //Early escape not player pice if (_globalState.Selected == null) { if (_globalState.WhiteTurn ? _clientIsPlayer == ClientIsPlayer.Black : _clientIsPlayer == ClientIsPlayer.White) { return; } if ((_globalState.WhiteTurn && Field.HasWhitePice(clickState)) || (!_globalState.WhiteTurn && Field.HasBlackPice(clickState))) { _globalState.Selected = fieldGrid.Name; //_legalMoves = GameRules.GetLegalMoves(_globalState, new FieldState(_globalState.Selected, clickState)); ClearBoard(); UpdateBoardFromGlobalState(); } } else { if (_globalState.IsLegalMove(fieldGrid.Name)) { //(var name, var extraFieldList) = _legalMoves.Find((a) => a.Item1 == fieldGrid.Name); WriteTextNonInvoke("I did move!"); //Pices killedPice = _globalState.DoMoveTo(fieldGrid.Name); //if (killedPice != Pices.Non) _killedPices.Add(killedPice); ChessCom.MatchEvent matchEvent = ChessCom.MatchEvent.Non; //if (killedPice == Pices.WhiteKing) { matchEvent = ChessCom.MatchEvent.BlackWin; } //if (killedPice == Pices.BlackKing) { matchEvent = ChessCom.MatchEvent.WhiteWin; } if (_matchStream?.RequestStream != null) { int timespan; if (_globalState.WhiteTurn) { timespan = (int)(_whiteStaticTimeLeft - _whiteTimeSpan).TotalSeconds; } else { //WriteTextInvoke($"_blackTimeSpan {_blackTimeSpan.TotalSeconds}, _blackStaticTimeLeft {_blackStaticTimeLeft.TotalSeconds}, diff sec {(_blackStaticTimeLeft + _blackTimeSpan).Seconds}"); timespan = (int)(_blackStaticTimeLeft - _blackTimeSpan).TotalSeconds; } _myLastMove = new ChessCom.Move { From = _globalState.Selected, To = fieldGrid.Name, Timestamp = Google.Protobuf.WellKnownTypes.Timestamp.FromDateTime(DateTime.UtcNow), SecSpent = timespan }; _matchStream.RequestStream.WriteAsync(new ChessCom.MovePacket { AskingForDraw = false, CheatMatchEvent = matchEvent, DoingMove = true, MatchToken = _matchToken, UserToken = _userToken, Move = _myLastMove, }); } //_legalMoves.Clear(); _globalState.Selected = null; //ClearBoard(); //UpdateBoardFromGlobalState(); } // } } else if (e.RightButton == MouseButtonState.Pressed) { //_legalMoves.Clear(); _globalState.Selected = null; ClearBoard(); UpdateBoardFromGlobalState(); } }