示例#1
0
 public MainThread(string str = null)
 {
     if (str != null)
     {
         Board      = new ChessBoard(str);
         CustomGame = true;
     }
     else
     {
         Board      = new ChessBoard();
         CustomGame = false;
     }
     Settings = new SettingsStore();
     Log      = new LogWriter(Settings);
     Engine   = new ChessEngine(Settings.EnginePath, Settings.Option1, Settings.Option2, Settings.Option3);
     AI       = new Controller(Settings);
 }
示例#2
0
        public List <List <string> > DetectPos()
        {
            var set    = new SettingsStore();
            var pos    = new List <List <string> >();
            var screen = ImageAnalysis.CaptureScreen(set);
            var cells  = ImageAnalysis.SliceTitles(screen);

            for (var i = 0; i < SettingsStore.BoardLenght; i++)
            {
                var row = new List <string>();
                for (var j = 0; j < SettingsStore.BoardLenght; j++)
                {
                    row.Add(DetectFigure(ImageAnalysis.GetImageHash(cells[i * SettingsStore.BoardLenght + j], set.Hash, set.Window, set.WhiteBright, set.BlackBright)));
                }
                pos.Add(row);
            }
            return(pos);
        }
示例#3
0
        public static Turn FindTurn(LogWriter logger, SettingsStore settings, CancellationTokenSource ct, ref List <Bitmap> LastBoard)
        {
            Turn turn;

            if (LastBoard is null)
            {
                LastBoard = GetSmoothBoard(settings, ct);
            }
            do
            {
                Thread.Sleep(settings.RefreshDelay);
                var newBoard = GetSmoothBoard(settings, ct);
                turn = AnalizingTurn(LastBoard, newBoard, settings, logger);
                if (!(turn is null))
                {
                    LastBoard = newBoard;
                }
            } while (turn is null && !ct.IsCancellationRequested);
            return(turn);
        }
示例#4
0
        private static List <Bitmap> GetSmoothBoard(SettingsStore Settings, CancellationTokenSource ct)
        {
            Bitmap candidate1, candidate2;

            candidate1 = CaptureScreen(Settings);
            while (!ct.IsCancellationRequested)
            {
                Thread.Sleep(Settings.AnimationDelay);
                candidate2 = CaptureScreen(Settings);
                var c1h           = GetImageHash(candidate1, Settings.AnimationHash, AnimationWindow, Settings.WhiteBright, Settings.BlackBright);
                var c2h           = GetImageHash(candidate2, Settings.AnimationHash, AnimationWindow, Settings.WhiteBright, Settings.BlackBright);
                int equalElements = c1h.Zip(c2h, (k, j) => k == j).Count(eq => eq);
                if (equalElements == c1h.Count())
                {
                    return(SliceTitles(candidate1));
                }
                else
                {
                    candidate1 = candidate2;
                }
            }
            return(null);
        }
示例#5
0
        public static Turn AnalizingTurn(List <Bitmap> board1, List <Bitmap> board2, SettingsStore Settings, LogWriter log)
        {
            if (board1 == null || board2 == null || board1.Count == 0 || board2.Count == 0)
            {
                return(null);
            }
            var candidates = new List <int>();

            for (var i = 0; i < board1.Count; i++)
            {
                var imageHash1    = GetImageHash(board1[i], Settings.Hash, Settings.Window, Settings.WhiteBright, Settings.BlackBright);
                var imageHash2    = GetImageHash(board2[i], Settings.Hash, Settings.Window, Settings.WhiteBright, Settings.BlackBright);
                int equalElements = imageHash1.Zip(imageHash2, (k, j) => k == j).Count(eq => eq);
                var th            = Settings.Threshold * imageHash1.Count();
                if (equalElements != imageHash1.Count() || equalElements != imageHash2.Count())
                {
                    log.Report(equalElements, Settings.Threshold, i);
                }
                if (equalElements < th)
                {
                    candidates.Add(i);
                }
            }
            if (candidates.Count == 3)
            {
                return(MovePV(candidates));
            }
            else if (candidates.Count == 4)
            {
                return(MoveOO(candidates));
            }
            else if (candidates.Count == 2)
            {
                return(new Turn(candidates[0], candidates[1]));
            }
            return(null);
        }
示例#6
0
//        private const int MOUSEEVENTF_RIGHTDOWN = 0x08;
//        private const int MOUSEEVENTF_RIGHTUP = 0x10;
        public Controller(SettingsStore settings)
        {
            delay      = settings.MouseClickDelay;
            FirstPoint = new Point(settings.BoardSize.Width / SettingsStore.BoardLenght / 2 + settings.BoardPosition.X, settings.BoardSize.Height / SettingsStore.BoardLenght / 2 + settings.BoardPosition.Y);
            CellSize   = new Size(settings.BoardSize.Width / SettingsStore.BoardLenght, settings.BoardSize.Height / SettingsStore.BoardLenght);
        }
示例#7
0
 public LogWriter(SettingsStore settings)
 {
     Enable = settings.LogEnable;
 }