Нарисовать шахматную доску, пометив крестиками все поля, которые «бъет» конь - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Программа. Даны две литеры—латинская буква (от а до h) и цифра (от 1 до 8), например, а2 или g5. Рассматривая их как координаты поля шахматной доски, на котором находится конь, нарисовать шахматную доску, пометив крестиками все поля, которые «бъет» этот конь, и ноликами все остальные поля помогите пожалуйста .... если возможно алгоритм с объяснением - заранее спасибо !

Решение задачи: «Нарисовать шахматную доску, пометив крестиками все поля, которые «бъет» конь»

textual
Листинг программы
uses crt,graph;
procedure Kletka(x1,y1,c:integer;d:integer);
begin
Setcolor(c);
setlinestyle(0,0,1);
Setfillstyle(1,c);
Bar(x1,y1,x1+d,y1+d);
end;
procedure Kon(v,g,x1,y1,r:integer);
begin
setcolor(2);
setlinestyle(0,0,3);
settextstyle(0,0,3);
Circle(x1+r*(2*v-1),y1+r*(2*g-1),r-3);
settextstyle(0,0,3);
OuttextXY(x1+r*(2*v-1)-10,y1+r*(2*g-1)-10,'K');
end;
procedure Krest(j,i,x1,y1,r:integer);
begin
setcolor(12);
setlinestyle(0,0,3);
line(x1+r*(2*j-1)-10,y1+r*(2*i-1)-10,x1+r*(2*j-1)+10,y1+r*(2*i-1)+10);
line(x1+r*(2*j-1)-10,y1+r*(2*i-1)+10,x1+r*(2*j-1)+10,y1+r*(2*i-1)-10);
end;
procedure Zero(j,i,x1,y1,r:integer);
begin
setcolor(8);
setlinestyle(0,0,1);
circle(x1+r*(2*j-1),y1+r*(2*i-1),r div 2-3);
end;
 
var gd,gm,x1,y1,x2,y2,d1,i,j,r:integer;
    v,c:char;
    v1,g:byte;
begin
clrscr;
repeat
write('Vvedite simvol vertikali [a..h] v=');
readln(v);
until v in ['a'..'h'];
v1:=ord(v)-96;
repeat
write('Vvedite nomer gorizontali [1..8] g=');
readln(g);
until g in [1..8];
g:=8-g+1;
initgraph(gd,gm,'');
d1:=round((getmaxY-60)/8);
r:=d1 div 2;
Setcolor(4);
Rectangle(1,1,8*d1+50,8*d1+60);
Setfillstyle(1,4);
Bar(1,1,8*d1+50,8*d1+60);
x1:=30;y1:=20;
for i:=1 to 8 do
  begin
    for j:=1 to 8 do
    if odd(i+j) then Kletka(x1+d1*(i-1),y1+d1*(j-1),15,d1)
    else Kletka(x1+d1*(i-1),y1+d1*(j-1),6,d1);
  end;
Setcolor(0);
for i:=0 to 7 do
outtextxy(30+d1*i+d1 div 2,450,chr(ord(i+97)));
for i:=7 downto 0 do
outtextxy(20,440-d1*i-d1 div 2,chr(ord(i+49)));
Kon(v1,g,x1,y1,r);
for i:=1 to 8 do
for j:=1 to 8 do
if ((abs(i-g)=1)and(abs(j-v1)=2))or((abs(i-g)=2)and(abs(j-v1)=1))then
Krest(j,i,x1,y1,r)
else if (j<>v1)or(i<>g) then Zero(j,i,x1,y1,r);
readln;
closegraph
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы