Другие языки программирования и технологии

Есть шахматная доска, на ней расположен кароль и три ладьи,

Есть шахматная доска, на ней расположен кароль и три ладьи,
пользователь вводит их координаты, по х, у, а нам надо выяснить,
находиться ли под ударом кароль, и по ударом каких ладей.

Первая и основная проблема: Нужно это все описать ТОЛЬКО ифами.

проблема, про которорую вспомнил совсем недавно, это то, что есди ладьи и король стоят на одной линии, то король находться под ударом только одной ладьи, а не всех встоящих на этой линии
Заранее спасибо!
Как-то так (если 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-й ладьёй

Сравнение с нулём там по той причине, что если ладья находится между другой ладьёй и королём, произведение разности координат будет отрицательное.
НБ
Нурбек Бнб
60 651
Лучший ответ
у короля координата к примеру (x,y) и у ладьей тоже. это одной строкой написать можно.
if ((Xking=Xrock1) or ((Xking=Xrock2) or (итд
Ты пытаешся написать прогу которая уже написана...
Дмитрий Беляев
Дмитрий Беляев
41 806
В чем вопрос-то?
Ты же понимаешь, что если король только один остался и в его полосе две вражеские ладьи, то он по любому под прицелом обоих находится?
Третью ладью даже вставлять сюда не буду. Смысла не вижу.



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



Как бы от третьей ладьи тут при твоем раскладе толку нет. Раз король только под прицелом одной находится как ты написал. Даже если третья ладья где то в той же полосе, то одна из двух других блокирует её по любому.

Может глупо, но ведь ты не указал, что вторая ладья вражеская. Значит может быть одна из ладей это дружеская ладья. От того и под прицелом король только у одной ладьи находится.

Ну, вот так примерно: Линия большая. Король и ладьи могут быть почти где угодно.

Если король на (x, y), то надо проверять последовательно клетки:
(x-1, y), (x-2, y), …, (1, y) на наличие первой попавшейся ладьи
Это было одно направление, есть ещё 3.

Таким образом, получится 4 цикла с простой проверкой, количество ладей не играет роли
"кАроль"-нет такой фигуры !

Похожие вопросы