uses GraphABC;
var
i,j, //счетчики циклов
xo,yo, //начальные координаты доски
dx,dy, //ширина и высота клетки поля
xk,yk, //координаты коня
xf,yf //координаты ферзя
:integer;
var answer:string;
const
x0=2; //начало координат для доски
y0=2;
a=40; //размеры клетки поля
b=40;
d=2; //бордюр между ячейками
procedure field;//Процедура строит на экране шахматное поле
begin
for i:=1 to 8 do
begin
for j:=1 to 8 do
begin
//Строим последовательно клетки поля
if((i mod 2)<>(j mod 2))then SetBrushColor(clLtGray)
else SetBrushColor(clWhite);
rectangle(xo+i*(a+d),yo+j*(b+d), xo+i*(a+d)+dx,yo+j*(b+d)+dy);
//И подписываем индексы каждой клетки
TextOut(xo+i*(a+d)+2,yo+j*(b+d)+1, IntToStr(j*10+i));
end;
end;
end;
procedure horse;//Процедура строит коня
begin
xk:=random(8)+1;//Получаем координаты коня
yk:=random(8)+1;
//Подписываем координаты коня для последующей визуальной проверки
//совпадения координат фигуры с координатами клетки поля
TextOut(xo+xk*(a+d)+1,yo+yk*(b+d)+1, IntToStr(yk*10+xk));
//Строим черного коня
SetBrushColor(clBlack);
ellipse(xo+xk*(a+d)+round(0.47*a),yo+yk*(b+d)+round(0.2*b),
xo+xk*(a+d)+round(0.85*a),yo+yk*(b+d)+round(0.4*b)); //Голова коня
ellipse(xo+xk*(a+d)+round(0.45*a),yo+yk*(b+d)+round(0.15*b),
xo+xk*(a+d)+round(0.68*a),yo+yk*(b+d)+round(0.8*b)); //Туловище
rectangle(xo+xk*(a+d)+round(0.33*a),yo+yk*(b+d)+round(0.7*b),
xo+xk*(a+d)+round(0.8*a),yo+yk*(b+d)+round(0.85*b));//Основание коня
end;//horse
procedure queen;//Процедура строит ферзя
begin
xf:=random(8)+1;//Получаем координаты ферзя
yf:=random(8)+1;
while((xk=xf)and(yk=yf))do//если фигуры попадают
begin //на одну клетку
xf:=random(8)+1; //берем новые координаты ферзя
yf:=random(8)+1;
end;
//Строим ферзя приблизительно кремового цвета
line(xo+xf*(a+d)+round(0.35*a),yo+yf*(b+d)+round(0.82*b),
xo+xf*(a+d)+round(0.3*a),yo+yf*(b+d)+round(0.3*b));
line(xo+xf*(a+d)+round(0.3*a),yo+yf*(b+d)+round(0.3*b),
xo+xf*(a+d)+round(0.4*a),yo+yf*(b+d)+round(0.5*b));
line(xo+xf*(a+d)+round(0.4*a),yo+yf*(b+d)+round(0.5*b),
xo+xf*(a+d)+round(0.46*a),yo+yf*(b+d)+round(0.2*b));
line(xo+xf*(a+d)+round(0.46*a),yo+yf*(b+d)+round(0.2*b),
xo+xf*(a+d)+round(0.54*a),yo+yf*(b+d)+round(0.47*b));
line(xo+xf*(a+d)+round(0.54*a),yo+yf*(b+d)+round(0.47*b),
xo+xf*(a+d)+round(0.62*a),yo+yf*(b+d)+round(0.2*b));
line(xo+xf*(a+d)+round(0.62*a),yo+yf*(b+d)+round(0.2*b),
xo+xf*(a+d)+round(0.68*a),yo+yf*(b+d)+round(0.5*b));
line(xo+xf*(a+d)+round(0.68*a),yo+yf*(b+d)+round(0.5*b),
xo+xf*(a+d)+round(0.78*a),yo+yf*(b+d)+round(0.3*b));
line(xo+xf*(a+d)+round(0.78*a),yo+yf*(b+d)+round(0.3*b),
xo+xf*(a+d)+round(0.73*a),yo+yf*(b+d)+round(0.82*b));
line(xo+xf*(a+d)+round(0.73*a),yo+yf*(b+d)+round(0.82*b),
xo+xf*(a+d)+round(0.6*a),yo+yf*(b+d)+round(0.87*b));
line(xo+xf*(a+d)+round(0.6*a),yo+yf*(b+d)+round(0.87*b),
xo+xf*(a+d)+round(0.45*a),yo+yf*(b+d)+round(0.87*b));
line(xo+xf*(a+d)+round(0.45*a),yo+yf*(b+d)+round(0.87*b),
xo+xf*(a+d)+round(0.35*a),yo+yf*(b+d)+round(0.82*b));
FloodFill(xo+xf*(a+d)+round(0.4*a),yo+yf*(b+d)+round(0.8*b),rgb(246,250,200));
SetBrushColor(rgb(246,250,200));
circle(xo+xf*(a+d)+round(0.3*a),yo+yf*(b+d)+round(0.3*b),round(0.05*b));
circle(xo+xf*(a+d)+round(0.46*a),yo+yf*(b+d)+round(0.2*b),round(0.05*b));
circle(xo+xf*(a+d)+round(0.62*a),yo+yf*(b+d)+round(0.2*b),round(0.05*b));
circle(xo+xf*(a+d)+round(0.79*a),yo+yf*(b+d)+round(0.3*b),round(0.05*b));
end;//queen
Begin//Начало самой программы
randomize;
xo:=x0; yo:=y0; dx:=a; dy:=b;
field;
horse;
queen;
//Выше строилась доска с фигурами для наглядности
//Теперь сама задача:
// Координаты двух полей шахматной доски заданы в виде
//двух пар чисел x1 , y1 и x2 , y2. На первом поле стоит ферзь,
//на втором - конь.
//Определить, бьет ферзь коня, конь - ферзя, или фигуры не угрожают друг другу.
//*************** Решение задачи ******************
if ((abs(xf-xk)=2)and
(abs(yf-yk)=1))or
((abs(xf-xk)=1)and
(abs(yf-yk)=2))
then
answer:='Конь бьет ферзя.'
else if (xf=xk)or
(yf=yk)or
((xf+yf)=(xk+yk))or
((yf-yk)=(xf-xk))
then
answer:='Ферзь бьет коня.'
else
answer:='Фигуры не угрожают друг другу.';
SetBrushColor(clWhite);
SetFontSize(18);
TextOut(64,5,answer);
//***************************************************
End.

