public WorkerResponse HandleRequest(WorkerRequest request) { int[] result = new int[7]; for (int i = 0; i < 7; i++) { request.board[i].Add(request.potezRacunala ? PointState.White : PointState.Black); result[i] = CalculateVictory(request.board, i); request.board[i].RemoveAt(request.board[i].Count - 1); } WorkerResponse response = new WorkerResponse(); response.parentId = request.parentId; if (request.potezRacunala) { if (result.Contains(1)) { response.parentState = (int)State.Victory; } else { response.parentState = (int)State.Unresolved; } response.children = new int[7]; for (int i = 0; i < 7; i++) { response.children[i] = result[i] == 1 ? (int)State.Victory : (int)State.Unresolved; } } else { if (result.Contains(1)) { response.parentState = (int)State.Defeat; } else { response.parentState = (int)State.Unresolved; } response.children = new int[7]; for (int i = 0; i < 7; i++) { response.children[i] = result[i] == 1 ? (int)State.Defeat : (int)State.Unresolved; } } return(response); }
public void HandleResponse(WorkerResponse response) { inProgress--; Node node = completedNodes.Where(s => s.id == response.parentId).First(); completedNodes.Remove(node); node.result = new Result() { state = response.parentState }; List <Node> children = new List <Node>(); for (int j = 0; j < response.children.Count(); j++) { var newNode = new Node() { id = Guid.NewGuid(), moves = new List <int>(), result = new Result() { state = response.children[j] } }; children.Add(newNode); for (int i = 0; i < node.moves.Count; i++) { newNode.moves.Add(node.moves[i]); } newNode.moves.Add(j); if (newNode.result.state == (int)State.Unresolved && node.moves.Count() < (depth - 1)) { peedingNodes.Add(newNode); } } node.children = children; }