Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
        }