Есть шахматная доска, на ней расположен кароль и три ладьи,
пользователь вводит их координаты, по х, у, а нам надо выяснить,
находиться ли под ударом кароль, и по ударом каких ладей.
Первая и основная проблема: Нужно это все описать ТОЛЬКО ифами.
проблема, про которорую вспомнил совсем недавно, это то, что есди ладьи и король стоят на одной линии, то король находться под ударом только одной ладьи, а не всех встоящих на этой линии
Заранее спасибо!
Другие языки программирования и технологии
Есть шахматная доска, на ней расположен кароль и три ладьи,
Как-то так (если kx, ky - координаты короля, а rNx, rNy - координаты N-ной ладьи) :
if ((kx == r1x && !(kx == r2x && (ky - r1y)*(ky - r2y) < 0) && !(kx == r3x && (ky - r1y)*(ky - r3y) < 0)) || (ky == r1y && !(ky == r2y && (kx - r1x)*(kx - r2x) < 0) && !(ky == r3y && (kx - r1x)*(kx - r3x) < 0))) //бьётся 1-й ладьёй
if ((kx == r2x && !(kx == r1x && (ky - r2y)*(ky - r1y) < 0) && !(kx == r3x && (ky - r2y)*(ky - r3y) < 0)) || (ky == r2y && !(ky == r1y && (kx - r2x)*(kx - r1x) < 0) && !(ky == r3y && (kx - r2x)*(kx - r3x) < 0))) //бьётся 2-й ладьёй
if ((kx == r3x && !(kx == r1x && (ky - r3y)*(ky - r1y) < 0) && !(kx == r2x && (ky - r3y)*(ky - r2y) < 0)) || (ky == r3y && !(ky == r1y && (kx - r3x)*(kx - r1x) < 0) && !(ky == r2y && (kx - r3x)*(kx - r2x) < 0))) //бьётся 3-й ладьёй
Сравнение с нулём там по той причине, что если ладья находится между другой ладьёй и королём, произведение разности координат будет отрицательное.
if ((kx == r1x && !(kx == r2x && (ky - r1y)*(ky - r2y) < 0) && !(kx == r3x && (ky - r1y)*(ky - r3y) < 0)) || (ky == r1y && !(ky == r2y && (kx - r1x)*(kx - r2x) < 0) && !(ky == r3y && (kx - r1x)*(kx - r3x) < 0))) //бьётся 1-й ладьёй
if ((kx == r2x && !(kx == r1x && (ky - r2y)*(ky - r1y) < 0) && !(kx == r3x && (ky - r2y)*(ky - r3y) < 0)) || (ky == r2y && !(ky == r1y && (kx - r2x)*(kx - r1x) < 0) && !(ky == r3y && (kx - r2x)*(kx - r3x) < 0))) //бьётся 2-й ладьёй
if ((kx == r3x && !(kx == r1x && (ky - r3y)*(ky - r1y) < 0) && !(kx == r2x && (ky - r3y)*(ky - r2y) < 0)) || (ky == r3y && !(ky == r1y && (kx - r3x)*(kx - r1x) < 0) && !(ky == r2y && (kx - r3x)*(kx - r2x) < 0))) //бьётся 3-й ладьёй
Сравнение с нулём там по той причине, что если ладья находится между другой ладьёй и королём, произведение разности координат будет отрицательное.
у короля координата к примеру (x,y) и у ладьей тоже. это одной строкой написать можно.
if ((Xking=Xrock1) or ((Xking=Xrock2) or (итд
if ((Xking=Xrock1) or ((Xking=Xrock2) or (итд
Ты пытаешся написать прогу которая уже написана...
В чем вопрос-то?
Ты же понимаешь, что если король только один остался и в его полосе две вражеские ладьи, то он по любому под прицелом обоих находится?
Третью ладью даже вставлять сюда не буду. Смысла не вижу.

Если король всё таки не один, то надо бы подробнее координаты расположения фигур.
Возможно какая то фигура собой прикрывает короля. Примерно так:

Как бы от третьей ладьи тут при твоем раскладе толку нет. Раз король только под прицелом одной находится как ты написал. Даже если третья ладья где то в той же полосе, то одна из двух других блокирует её по любому.
Может глупо, но ведь ты не указал, что вторая ладья вражеская. Значит может быть одна из ладей это дружеская ладья. От того и под прицелом король только у одной ладьи находится.
Ну, вот так примерно: Линия большая. Король и ладьи могут быть почти где угодно.

Третью ладью даже вставлять сюда не буду. Смысла не вижу.

Если король всё таки не один, то надо бы подробнее координаты расположения фигур.
Возможно какая то фигура собой прикрывает короля. Примерно так:

Как бы от третьей ладьи тут при твоем раскладе толку нет. Раз король только под прицелом одной находится как ты написал. Даже если третья ладья где то в той же полосе, то одна из двух других блокирует её по любому.
Может глупо, но ведь ты не указал, что вторая ладья вражеская. Значит может быть одна из ладей это дружеская ладья. От того и под прицелом король только у одной ладьи находится.
Ну, вот так примерно: Линия большая. Король и ладьи могут быть почти где угодно.

Если король на (x, y), то надо проверять последовательно клетки:
(x-1, y), (x-2, y), …, (1, y) на наличие первой попавшейся ладьи
Это было одно направление, есть ещё 3.
Таким образом, получится 4 цикла с простой проверкой, количество ладей не играет роли
(x-1, y), (x-2, y), …, (1, y) на наличие первой попавшейся ладьи
Это было одно направление, есть ещё 3.
Таким образом, получится 4 цикла с простой проверкой, количество ладей не играет роли
"кАроль"-нет такой фигуры !
Похожие вопросы
- Дана шахматная доска размером 8 х 8. Определить цвет клетки с заданными координатами.
- Сколькими способами можно расставить N ферзей на шахматной доске NxN так, чтобы они не угрожали друг-другу? комбинаторно
- Как лучше расположить элементы на этой визитке
- ПОМОГИТЕ ОЧЕНЬ НУЖНА ПОМОЩ Поменять местами элементы, расположенные симметрично относительно побочной диагонали
- Как в кореле объекты расположить по окружности?
- Как расположить ссылки в один ряд? (html)
- в двумерном массиве возвестив квадрат строки, расположенные между строками с мин и макс элементами
- На каком языке программирования пишут шахматные программы; и за сколько лет можно его изучить?
- Из заданного текста выбрать и напечатать те символы, которые встречаются в нем ровно 1 раз, втомпорядке,как расположены.
- Клавиатура. Почему буквы на клавиатуре расположены именно в таком хоатичном порядке.