public override async void Start() { await Task.Run(() => { ColossusScreen = WaitForColossusScreen(); RaiseDisplayed(Screen.FromHandle(ColossusScreen.Process.MainWindowHandle)); ColossusScreen.WaitForMove(); while (true) { State = "Thinking..."; CurrentNode.CalculateValue(); CurrentNode = CurrentNode.Children.MinBy(child => child.Value); State = "Playing..."; ColossusScreen.SendMove(CurrentNode.Move); ColossusScreen.WaitForMove(); ColossusScreen.GetState(); Node nodeAfterColossusMove = null; foreach (var child in CurrentNode.Children) { if (child.State.Player.Equals(ColossusScreen.PlayerState) && child.State.Opponent.Equals(ColossusScreen.OpponentState)) { nodeAfterColossusMove = child; break; } } CurrentNode = nodeAfterColossusMove; } }); }
public override async void Start() { await Task.Run(() => { while (true) { IsWaitingForIteraction = false; IsBusy = true; State = "Searching..."; DateTime startTime = DateTime.Now; int nodes = CurrentNode.CalculateValue(); OnExpanded(); IsWaitingForIteraction = true; IsBusy = false; State = $"{nodes} tree nodes were searched in time {DateTime.Now - startTime}."; playEvent.WaitOne(); playEvent.Reset(); } }); }