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); }
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); }
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); }
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); }
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); }
// 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); }
public LogWriter(SettingsStore settings) { Enable = settings.LogEnable; }