/// <summary>Method <c>Turn</c> make turn and return true if it valid or return false.</summary> public bool TurnIn(Turn turn) { if (turn is null) { return(false); } if (turn.TurnSide is null) { turn.ApplySide(SideToMove); } Figure.SwapCheck(turn); Figure.PromotionCheck(turn); // Figure.LegalValidate(turn); // if (turn.TurnSide.ToString() != SideToMove.ToString() || !turn.Valid) if (!turn.Valid) { return(false); } MakeTurn(turn); Moves += turn + FenSpace; SideToMove.Switch(); if (SideToMove == Side.White) { Turns += 1; } return(true); }
public void Run(CancellationTokenSource ct, Form1 form) { if (!CustomGame) { MySide = ImageAnalysis.DetectSide(ImageAnalysis.SliceTitles(ImageAnalysis.CaptureScreen(Settings))); } else { MySide = Board.SideToMove; } Log.Report(MySide); form.Log("" + MySide); var side = new Side(MySide.ToString()); var re = new ManualResetEvent(false); Task.Run(() => { while (!ct.Token.IsCancellationRequested) { DetectedTurn = DetectTurn(ct); re.Set(); Log.Report(DetectedTurn + ""); } re.Set(); }); while (!ct.Token.IsCancellationRequested) { if (side == Side.White) { Task.Run(() => { var turn = MakeTurn(ct, form.Suggest); if (form.Suggest) { form.Log(turn.ToString()); } }); } side.Switch(); re.WaitOne(); re.Reset(); Board.TurnIn(DetectedTurn); form.Log(DetectedTurn + ""); } form.Log(GameDone); Log.Report(GameDone); }