Сегодня мы рассмотрим одну задачу, в которой имеются три метода, один из которых необходимо дописать самостоятельно. И так по условию задания нам необходимо вычислить верно ли ходит ферзь по заданным клеткам шахматной доски. Если кто не знает, ферзь ходит строго по диагонали и в стороны, без всяких зигзаков итд. Для понимания задания стоит взглянуть на шахматную доску на которой имеется разметка.
Приведу пример готовых методов:
1 2 3 4 5 6 7 8 9 10 11 12 |
public static void Main() { TestMove("a1", "d4"); TestMove("f4", "e7"); TestMove("a1", "a4"); TestMove("a1", "a1"); } public static void TestMove(string from, string to) { Console.WriteLine("{0}-{1} {2}", from, to, IsCorrectMove(from, to)); } |
И метод который необходимо дописать:
1 2 3 4 5 6 7 |
public static bool IsCorrectMove(string from, string to) { var dx = Math.Abs(to[0] - from[0]); //смещение фигуры по горизонтали var dy = Math.Abs(to[1] - from[1]); //смещение фигуры по вертикали //дописать код return } |
И так после запуска приложения передаются координаты, начальной позиции ферзя и конечная позиция, в том методе где нам необходимо дописать код проверки правильности позиций ферзя, в случаи если так нельзя пойти, return возвращает false. Задача не на столько тривиальна, но может сбить начинающего программиста столку. Я не спроста выложил шахматную доску, для большего понимания происходящего. И так нам необходимо сделать условие при котором произойдет проверка. Во первых смещение по горизонтали и вертикали может быть равным, а так же смещение по вертикали и горизонтали могут быть равны 0. Во вторых как мы видим из задания позиция ферзя может остаться на одно месте, что не будет противоречить нашему условию, но противоречит правилам игры. Для этого в условие добавим условие проверки позиции до и после. И так взглянем код и посмотрим что же получилось:
1 2 3 4 5 6 7 8 9 |
public static bool IsCorrectMove(string from, string to) { var dx = Math.Abs(to[0] - from[0]); //смещение фигуры по горизонтали var dy = Math.Abs(to[1] - from[1]); //смещение фигуры по вертикали return ((dx == dy || dx == 0 || dy == 0)&&!from.Equals(to)); } |
Таким образом мы решили программу одной лишь строчкой кода 🙂