public static void AddDiagonalMoves(Position currentPosition, Figure fig) { for (int i = 1; i <= currentPosition.X; i++) { if (currentPosition.Y - i >= 0) { Position p = new Position(currentPosition.X - i, (currentPosition.Y - i)); fig.validMoves.Add(p); } if (currentPosition.Y + i <= 7) { Position p = new Position(currentPosition.X - i, (currentPosition.Y + i)); fig.validMoves.Add(p); } } for (int i = 1; i <= 7 - currentPosition.X; i++) { if (currentPosition.Y - i >= 0) { Position p = new Position(currentPosition.X + i, (currentPosition.Y - i)); fig.validMoves.Add(p); } if (currentPosition.Y + i <= 7) { Position p = new Position(currentPosition.X + i, (currentPosition.Y + i)); fig.validMoves.Add(p); } } }
public override void CalculateValidMoves(Position currentPosition) { Position p = new Position(0,0); for (int i = -2; i <= 2; i++) { for (int j = -2; j <= 2; j++) { if (i * j == 2 || i * j == -2) { if (IsPositionOnBoard(p)) { try { p.X = currentPosition.X + i; p.Y = currentPosition.Y + j; this.validMoves.Add(p); } catch (ArgumentOutOfRangeException) { continue; } } } } } }
internal Figure(FigureColor color, FigureType type, Position position) { this.color = color; this.type = type; this.position = position; CalculateValidMoves(position); }
protected bool IsPositionOnBoard(Position p) { if (p.X >= 0 && p.X <= 7 && p.Y >= 0 && p.Y <= 7) { return true; } else { return false; } }
internal Bishop(FigureColor color, FigureType type, Position position) : base(color, type, position) { switch (color) { case FigureColor.Black: draw = "\u265D"; break; case FigureColor.White: draw = "\u2657"; break; } }
internal Knight(FigureColor color, FigureType type, Position position) : base(color, type, position) { switch (color) { case FigureColor.Black: draw = "\u265E"; break; case FigureColor.White: draw = "\u2658"; break; } }
public override void CalculateValidMoves(Position currentPosition) { Figure.AddDiagonalMoves(currentPosition, this); }
public static void AddHorizontalMoves(Position currentPosition, Figure fig) { for (int i = 0; i < currentPosition.X; i++) { Position p = new Position(i, currentPosition.Y); fig.validMoves.Add(p); } for (int i = currentPosition.X + 1; i <= 7; i++) { Position p = new Position(i, currentPosition.Y); fig.validMoves.Add(p); } }
public virtual void Move(Position newPosition) { if (validMoves.Contains(newPosition)) { this.position = newPosition; this.validMoves.Clear(); CalculateValidMoves(this.position); } }
public abstract void CalculateValidMoves(Position currentPosition);
public static void VerticalPositions(Position currentPosition) { List<Position> positions = new List<Position>(); }
public static void AddVerticalMoves(Position currentPosition, Figure fig) { for (int i = 0; i < currentPosition.Y; i++) { Position p = new Position(currentPosition.X, i); fig.validMoves.Add(p); } for (int i = currentPosition.Y + 1; i <= 7; i++) { Position p = new Position(currentPosition.X, i); fig.validMoves.Add(p); } }
internal Knight(FigureColor color, FigureType type, Position position) : base(color, type, position) { }
internal Queen(FigureColor color, FigureType type, Position position) : base(color, type, position) { }