public ValidationReport RunValidations() { Player currentPlayer = Properties.CurrentPlayer; CommandParser.PlayerMoves direction = Properties.Direction; Position testPosition = Position.CalculatePosition(currentPlayer.Position, direction); int row = testPosition.Row; int col = testPosition.Column; if (CollisionWithBorder(testPosition)) { return(new ValidationReport(ValidationStatus.CollisionWithBorder, null, testPosition)); } if (CollisionWithOneSelfTrail(currentPlayer, row, col)) { return(new ValidationReport(ValidationStatus.CollisionWithOneSelfTrail, null, testPosition)); } if (CollisionWithOtherPlayerTrail(row, col)) { return(new ValidationReport(ValidationStatus.CollisionWithOtherPlayerTrail, null, testPosition)); } if (CollisionWithOtherPlayer(row, col)) { Player crashPlayer = Properties.Matrix[testPosition.Row, testPosition.Column].Player; return(new ValidationReport(ValidationStatus.CollisionWithOtherPlayer, crashPlayer, testPosition)); } return(new ValidationReport(ValidationStatus.Ok, null, testPosition)); }
private ValidationReport RunMovementValidations(Player currentPlayer, CommandParser.PlayerMoves direction) { ValidationProperties properties = new ValidationProperties(Players, Matrix, currentPlayer, direction, Rows, Columns); Validations validations = new Validations(properties); return(validations.RunValidations()); }
public ValidationProperties(List <Player> players, Cell[,] matrix, Player currentPlayer, CommandParser.PlayerMoves direction, int matrixRows, int matrixColumns) { Players = players; Matrix = matrix; CurrentPlayer = currentPlayer; Direction = direction; MatrixRows = matrixRows; MatrixColumns = matrixColumns; }
private void AnalyzeAndMovePlayer(Player currentPlayer, CommandParser.PlayerMoves direction) { if (!currentPlayer.IsAlive) { return; } ValidationReport report = RunMovementValidations(currentPlayer, direction); if (report.Status != ValidationStatus.Ok) { ChooseAction(report, currentPlayer); } else { MovePlayer(currentPlayer, direction); } }
public static Position CalculatePosition(Position pos, CommandParser.PlayerMoves direction) { int row = pos.Row; int col = pos.Column; switch (direction) { case CommandParser.PlayerMoves.Up: return(new Position(row - 1, col)); case CommandParser.PlayerMoves.Right: return(new Position(row, col + 1)); case CommandParser.PlayerMoves.Down: return(new Position(row + 1, col)); case CommandParser.PlayerMoves.Left: return(new Position(row, col - 1)); default: return(null); } }
private void MovePlayer(Player currentPlayer, CommandParser.PlayerMoves direction) { DisableCurrentPlayerCell(currentPlayer.Position); currentPlayer.Position = Position.CalculatePosition(currentPlayer.Position, direction); UpdateTheMatrix(currentPlayer); }