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.



Hosted by uCoz