コード例 #1
0
 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;
 }
コード例 #2
0
        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();
            }
        }