Exemple #1
0
        /// <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);
        }
Exemple #2
0
        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);
        }