public Turn DetectTurn(CancellationTokenSource ct) { var turn = ImageAnalysis.FindTurn(Log, Settings, ct, ref LastBoardState); if (turn is null) { return(null); } if (MySide == Side.Black) { turn = turn.GetInverse(); } return(turn); }
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); }
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); }