public ReversiField PrepareField(Position?blackHole = null) { var size = 8; var cells = new Cell[size, size]; for (int row = 0; row < size; row++) { for (int column = 0; column < size; column++) { var position = new Position(row, column); if (position != blackHole) { cells[row, column] = new Cell(); } } } var field = new ReversiField(cells); field.GetCell("D4").Place(new Piece(Color.White)); field.GetCell("E5").Place(new Piece(Color.White)); field.GetCell("D5").Place(new Piece(Color.Black)); field.GetCell("E4").Place(new Piece(Color.Black)); return(field); }
static void DrawField(ReversiField field, Color currentMove, List <PossibleMove> possibleMoves) { var delimiter = " "; Console.Write($"{delimiter} "); for (char letter = 'A'; letter <= 'H'; letter++) { Console.Write($"{letter}{delimiter}"); } for (var row = 0; row <= 7; row++) { Console.WriteLine(); Console.Write($"{(row + 1)} "); for (var column = 0; column <= 7; column++) { var position = new Position(row, column); var cell = field.GetCell(position); DrawCell(cell, position); } } void DrawCell(Cell cell, Position position) { string code; if (cell.HasPiece) { code = cell.Piece.Color == Color.Black ? "B" : "W"; } else { code = possibleMoves.Any(move => move.Position.Equals(position) && move.Color == currentMove) ? "+" : "."; } Console.Write($"{code} "); } Console.WriteLine(); }
public IEnumerable <List <Cell> > GetStreaksFor(Position origin, ReversiField field) { var directionOffsets = new List <Position>(); for (var x = -1; x <= 1; x++) { for (var y = -1; y <= 1; y++) { if (x != 0 || y != 0) { directionOffsets.Add(new Position(x, y)); } } } foreach (var offset in directionOffsets) { var streak = new List <Cell>(); Cell next; var nextPosition = origin; do { nextPosition += offset; next = field.GetCell(nextPosition); if (next != null && next.HasPiece) { streak.Add(next); } } while (next != null && next.HasPiece); if (streak.Any()) { yield return(streak); } } }