/// <summary> /// Adds all moves to Tree /// </summary> /// <param name="whitePos">Position of white figures on board</param> /// <param name="moves">Pairs of moves and replies e.g. ("e2-e4", "e7-e5")</param> public void AddMoves(PlayerPosition whitePos, params string[] moves) { Move temp = new Move(moves[0]); MoveNode tempNode = new MoveNode(temp); //iterator, that will add move to tree MoveIterator pushingIterator = null; MoveNode next = null; if (!rootMoves.ContainsKey(tempNode)) { rootMoves.Add(tempNode, tempNode); next = rootMoves[tempNode].Add(new Move(moves[1])); } else { next = rootMoves[tempNode].Add(new Move(moves[1])); } pushingIterator = GetIterator(tempNode); //next answer pushingIterator.CurrentNode = next; int i = 2; while (i < moves.Length) { pushingIterator.CurrentNode = pushingIterator.CurrentNode.Add(moves[i], whitePos); ++i; } }
public MoveIterator(MoveIterator from) { if (from == MoveIterator.End) { return; } iter = new MoveNode(from.iter); prev = new MoveIterator(from.prev); }
/// <summary> /// Checks if we have debut answer for moves /// </summary> /// <param name="moves">List of all moves</param> /// <returns>MoveIterator that points on certain node, or End iterator if there no answer</returns> public MoveIterator CheckMoves(List <Move> moves) { //there no so long combinations in tree :( if (moves.Count > 10) { return(MoveIterator.End); } MoveNode temp = new MoveNode(moves[0]); if (!rootMoves.ContainsKey(temp)) { return(MoveIterator.End); } MoveIterator iter = new MoveIterator(rootMoves[temp]); for (int i = 1; i < moves.Count; ++i) { if (iter == MoveIterator.End) { break; } temp.Move = moves[i]; if (!iter.CurrentNode.Replies.ContainsKey(temp)) { return(MoveIterator.End); } iter.CurrentNode = iter.CurrentNode.Replies[temp]; } return(iter); }
public MoveIterator(MoveNode node, MoveIterator prevIter) { iter = node; prev = prevIter; }
/// <summary> /// Checks if we have debut answer for moves /// </summary> /// <param name="moves">List of all moves</param> /// <returns>MoveIterator that points on certain node, or End iterator if there no answer</returns> public MoveIterator CheckMoves(List<Move> moves) { //there no so long combinations in tree :( if (moves.Count > 10) return MoveIterator.End; MoveNode temp = new MoveNode(moves[0]); if (!rootMoves.ContainsKey(temp)) return MoveIterator.End; MoveIterator iter = new MoveIterator(rootMoves[temp]); for (int i = 1; i < moves.Count; ++i) { if (iter == MoveIterator.End) break; temp.Move = moves[i]; if (!iter.CurrentNode.Replies.ContainsKey(temp)) return MoveIterator.End; iter.CurrentNode = iter.CurrentNode.Replies[temp]; } return iter; }
public MoveIterator(MoveIterator from) { if (from == MoveIterator.End) return; iter = new MoveNode(from.iter); prev = new MoveIterator(from.prev); }