private IEnumerable <int> GetQueenMoves(IPosition state, int from) { foreach (var direction in RookMoves[from]) { foreach (var i in direction) { if (state.DiskAt(i, 0) != Disk.None) { yield return(i); break; } } } foreach (var direction in BishopMoves[from]) { foreach (var i in direction) { if (state.DiskAt(i, 0) != Disk.None) { yield return(i); break; } } } }
private IEnumerable <int> GetKnightMoves(IPosition state, int from) { foreach (var i in KnightMoves[from]) { if (state.DiskAt(i, 0) != Disk.None) { yield return(i); } } }
private static void PrintPosition(IPosition position) { Console.WriteLine(); for (int i = 0; i < Constants.BoardSize; i++) { for (int j = 0; j < Constants.BoardSize; j++) { for (int k = 0; k < 10; k++) { switch (position.DiskAt(Constants.BoardSize * i + j, k)) { case Disk.None: Console.Write(string.Format(" {0}", ".")); break; case Disk.Red: Console.ForegroundColor = ConsoleColor.Red; Console.Write(string.Format(" {0}", "|")); break; case Disk.Yellow: Console.ForegroundColor = ConsoleColor.Yellow; Console.Write(string.Format(" {0}", "|")); break; default: throw new ArgumentOutOfRangeException($"Unknown disk type: {position.DiskAt(Constants.BoardSize * i + j, k)}"); } Console.ForegroundColor = ConsoleColor.White; } Console.Write(" "); } Console.WriteLine(); } Console.WriteLine(); }