public void StartMatch(bool isWhitePlayer, string matchToken, ChessCom.VisionRules rules, ChessCom.TimeRules timeRules) { WriteTextNonInvoke("Starting match: " + matchToken + ", you are " + (isWhitePlayer?"white":"black")); WriteTextNonInvoke("Opponent username: "******"", To = "" }; _lastMoveFrom = null; _lastMoveTo = null; _killedPices.Clear(); ClearBoard(); var vr = new VisionRules { Enabled = rules.Enabled, ViewMoveFields = rules.ViewMoveFields, ViewRange = rules.ViewRange, ViewCaptureField = rules.ViewCaptureField, PiceOverwrite = new Dictionary <Pices, VisionRules>() }; foreach (var keyValOR in rules.PiceOverwriter) { vr.PiceOverwrite.Add((Pices)keyValOR.Key, new VisionRules { Enabled = keyValOR.Value.Enabled, ViewMoveFields = keyValOR.Value.ViewMoveFields, ViewRange = keyValOR.Value.ViewRange }); } _whiteStaticTimeLeft = new TimeSpan(0, timeRules.PlayerTime.Minutes, timeRules.PlayerTime.Seconds); _whiteTimeSpan = _whiteStaticTimeLeft; lbWhiteTimeLeft.Content = _whiteTimeSpan.ToString(@"mm\:ss"); lbWhiteTimePerMove.Content = $"+{timeRules.SecondsPerMove}s"; _blackStaticTimeLeft = new TimeSpan(0, timeRules.PlayerTime.Minutes, timeRules.PlayerTime.Seconds); _blackTimeSpan = _whiteStaticTimeLeft; lbBlackTimeLeft.Content = _whiteTimeSpan.ToString(@"mm\:ss"); lbBlackTimePerMove.Content = $"+{timeRules.SecondsPerMove}s"; _timeRules = timeRules; _globalState = GlobalState.CreateStartState(vr); UpdateBoardFromGlobalState(); }
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(); } }