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 BtHostGame_Click(object sender, RoutedEventArgs e) { try { var starttime = Convert.ToInt32(tbStarttime.Text); var movetime = Convert.ToInt32(tbMovetime.Text); ChessCom.ChessType chessType = cbChesType.SelectedIndex == 0 ? ChessCom.ChessType.Classic : cbChesType.SelectedIndex == 1 ? ChessCom.ChessType.FisherRandom : ChessCom.ChessType.SlugRandom; ChessCom.SideType sideType = cbHostColor.SelectedIndex == 0 ? ChessCom.SideType.HostIsWhite : cbHostColor.SelectedIndex == 1 ? ChessCom.SideType.HostIsBlack : ChessCom.SideType.Random; ChessCom.VisionRules vr = new ChessCom.VisionRules(); switch (cbVisionRules.SelectedIndex) { case 0: //Standard { vr.Enabled = true; vr.ViewCaptureField = true; vr.ViewMoveFields = false; vr.ViewRange = 2; ChessCom.VisionRules overwrite = new ChessCom.VisionRules { ViewRange = 1, ViewMoveFields = false }; vr.PiceOverwriter.Add((int)ChessCom.Pices.WhitePawn, overwrite); vr.PiceOverwriter.Add((int)ChessCom.Pices.BlackPawn, overwrite); } break; case 1: //Sea { vr.Enabled = true; vr.ViewCaptureField = true; vr.ViewMoveFields = true; vr.ViewRange = 0; ChessCom.VisionRules overwrite = new ChessCom.VisionRules { ViewRange = 1, ViewMoveFields = true }; vr.PiceOverwriter.Add((int)ChessCom.Pices.WhiteKnight, overwrite); vr.PiceOverwriter.Add((int)ChessCom.Pices.BlackKnight, overwrite); vr.PiceOverwriter.Add((int)ChessCom.Pices.WhitePawn, overwrite); vr.PiceOverwriter.Add((int)ChessCom.Pices.BlackPawn, overwrite); } break; case 2: //No Vision { vr.Enabled = false; } break; } btHostGame.IsEnabled = false; cbChesType.IsEnabled = false; cbHostColor.IsEnabled = false; cbVisionRules.IsEnabled = false; tbStarttime.IsEnabled = false; tbMovetime.IsEnabled = false; tbHostingMatchText.Visibility = Visibility.Visible; Task.Run(() => { var token = _hostGameTokenSource.Token; try { MatchResult = _connection.Call.HostGame(new ChessCom.HostedGame { Host = _userdata, GameRules = new ChessCom.GameRules { ChessType = chessType, SideType = sideType, VisionRules = vr, TimeRules = new ChessCom.TimeRules { PlayerTime = new ChessCom.Time { Minutes = starttime }, SecondsPerMove = movetime } } }, null, null, _hostGameTokenSource.Token); Dispatcher.Invoke(() => Close()); } catch (Grpc.Core.RpcException ex) { if (!token.IsCancellationRequested) { throw ex; } } }); } catch (Exception ex) { throw ex; } }