Нарисовать шахматную доску, пометив крестиками все поля, которые «бъет» конь - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д