Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@

target/
.mvn/wrapper/maven-wrapper.jar

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ public final class Application {
/**
* Основной метод приложения.
*
* @param args
* аргументы
* @param args аргументы
*/
public static void main(final String[] args) {
// TODO: реализовать логику исполнения программы.
System.out.print("Логика программы ещё не реализована");
try {
KnightsMoveChecker checker = KnightsMoveCheckerFactory.get();
checker.check(args);
System.out.print("OK");
} catch (IllegalMoveException e) {
System.out.print(e.getMessage());
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package croc.education.ws2023spb.knightsmove;

public class CheckerPositionCount {
public static boolean check (String[] str) {
Comment thread
mak-42 marked this conversation as resolved.
Outdated
if (str.length >= 2) {
return true;
} else {
throw new PositionCountException();
Comment thread
mak-42 marked this conversation as resolved.
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package croc.education.ws2023spb.knightsmove;

public class ChessPositionImpl implements ChessPosition{
private int x;
private int y;

public ChessPositionImpl(int x, int y) {
this.x = x;
this.y = y;
}
@Override
public int x() {
return x;
}

@Override
public int y() {
return y;
}

@Override
public String toString() {
char column = (char) ('a' + x);
char row = (char) ('1' + y);
return column + String.valueOf(row);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

/**
* Класс, содержащий методы преобразования в объект расположения фигуры на шахматной доске из различных форматов.
*
*
* @author Dmitry Malenok
* @see ChessPosition
*/
Expand All @@ -19,13 +19,21 @@ private ChessPositionParser() {
* Разбирает наименование клетки шахматной доски, на которой находится фигура, в
* <a href="https://w.wiki/7pFN">шахматной нотации</a> и возвращает соответствующий ей объект расположения фигуры на
* шахматной доске.
*
* @param position
* наименование клетки шахматной доски, на которой находится фигура
*
* @param position наименование клетки шахматной доски, на которой находится фигура
* @return объект расположения фигуры на шахматной доске, соответствующий переданному наименованию клетки
*/
public static ChessPosition parse(final String position) {
// TODO: создать реализацию метода.
throw new UnsupportedOperationException("Вызван ещё не реализованный метод.");
public static ChessPosition parse(String position) {
if (position.length() != 2) {
throw new IllegalPositionException(position);
}
char column = position.charAt(0);
char row = position.charAt(1);
if ((column < 'a' || column > 'h') || (row < '1' || row > '8')) {
throw new IllegalPositionException(position);
}
int x = column - 'a';
int y = row - '1';
return new ChessPositionImpl(x, y);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,20 @@
/**
* Исключение, выбрасываемое в случае, если при перемещении шахматного коня из текущей клетки в следующую происходит с
* нарушением правил.
*
*
* @author Dmitry Malenok
*/
public class IllegalMoveException extends Exception {
// TODO: наполнить класс.
private final String currentPosition;
private final String nextPosition;

public IllegalMoveException(String currentPosition, String nextPosition) {
this.currentPosition = currentPosition;
this.nextPosition = nextPosition;
}

@Override
public String getMessage() {
return "конь так не ходит: " + currentPosition + " -> " + nextPosition;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package croc.education.ws2023spb.knightsmove;

public class IllegalPositionException extends RuntimeException{
private final String position;

public IllegalPositionException(String position) {
this.position = position;
}

@Override
public String getMessage() {
return "Позиции " + position + " не существует, пожалуйста, проверьте корректность написания данной позиции.";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,19 @@ private KnightsMoveCheckerFactory() {
* @return обработчик, проверяющий, что последовательность клеток на шахматной доске может быть пройдена ходом коня
*/
public static KnightsMoveChecker get() {
// TODO: создать реализацию метода.
throw new UnsupportedOperationException("Вызван ещё не реализованный метод.");
return (String[] positions) -> {
if (CheckerPositionCount.check(positions)) {
for (int i = 1; i < positions.length; i++) {
ChessPosition current = ChessPositionParser.parse(positions[i - 1]);
ChessPosition next = ChessPositionParser.parse(positions[i]);
int dx = Math.abs(current.x() - next.x());
int dy = Math.abs(current.y() - next.y());

if (!((dx == 1 && dy == 2) || (dx == 2 && dy == 1))) {
throw new IllegalMoveException(positions[i - 1], positions[i]);
}
}
}
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package croc.education.ws2023spb.knightsmove;

public class PositionCountException extends RuntimeException{
@Override
public String getMessage() {
return "Пожалуйста, укажите как минимум две позиции";
}
}