static void Main(string[] args) { var pieces = new[] { new Piece(new Position(3, 4), Side.Black), new Piece(new Position(4, 3), Side.Black), new Piece(new Position(3, 3), Side.White), new Piece(new Position(4, 4), Side.White) }; var board = new Board(new Position(7, 7), pieces); var game = new Game(board); var view = new BoardView(board); view.Print(); while (true) { Console.WriteLine($"{game.Turn} turn: enter x,y"); var input = Console.ReadLine(); if (input == null) { continue; } var tokens = input.Trim() .Split(',') .Select(x => x.Trim()) .Select(int.Parse) .ToArray(); var position = new Position(tokens.First(), tokens.Last()); game.PlayPieceAt(position); view.Print(); } }
public Board( Position maximum, IPieceBag pieceBag, IContiguousOpponentPieces contiguousOpponentPieces) { MaximumPosition = maximum; this.pieceBag = pieceBag; this.contiguousOpponentPieces = contiguousOpponentPieces; }
public override Position AwayFrom(Position position) { return new Position(position.X + 1, position.Y - 1); }
public abstract Position AwayFrom(Position position);
private bool IsOutOfBounds(Position position) { return position.X < 0 || position.X > MaximumPosition.X || position.Y < 0 || position.Y > MaximumPosition.Y; }
private bool IsOccupied(Position position) => pieces.Any(x => x.Position.Equals(position));
public Piece GetPiece(Position position) { return pieces.Find(x => x.Position.Equals(position)); }
public Board(Position position, IEnumerable<Piece> pieces) { MaximumPosition = position; this.pieces = new List<Piece>(pieces); }
public Piece(Position position, Side side) { Position = position; Side = side; }
private bool IsOccupied(Position position) => pieceBag.GetPiece(position) != null;
public IPiece GetPiece(Position position) => pieceBag.GetPiece(position);