public MoveList filterMovesThatBlockAttack(MoveList moves, Location blockedAttack) { if (moves.Count == 0) { return(moves); } MoveList filtered = new MoveList(); foreach (Move move in moves) { GameBoard copy = this.Copy(); copy.movePiece(move); IList <AbstractPiece> attackers = copy.getAttackers(moves[0].startLocation, getPiece(moves[0].startLocation).color); bool allowsAttack = false; foreach (AbstractPiece attacker in attackers) { MoveList attackerMoves = copy.getMoves(attacker); if (attackerMoves.ContainsAttacked(blockedAttack)) { allowsAttack = true; break; } } if (!allowsAttack) { filtered.Add(move); } } return(filtered); }
//Determines if a side has any moves left to play public static bool ColorHasMoves(GameBoard board, ColorEnum color) { foreach (AbstractPiece piece in board.getPieces(color)) { if (board.getMoves(piece).Count > 0) { return(true); } } return(false); }
public bool isMoveBlockingAttack(Move move, Location blockedAttack) { GameBoard copy = this.Copy(); copy.movePiece(move);//Allows for simulation IList <AbstractPiece> attackers = getAttackers(getPiece(move.startLocation)); foreach (AbstractPiece attacker in attackers) { MoveList moves = copy.getMoves(attacker); if (moves.ContainsAttacked(blockedAttack)) { return(true); } } return(false); }