21.10.2012, 20:46 | #21 (permalink) |
Member
Регистрация: 01.02.2012
Сообщений: 75
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Код:
uses crt,graph; var xc,yc,x,y,d1,d2,r1,r2,d:integer; k:char; procedure Fig(x,y,c:integer); begin setcolor(c); r1:=10;r2:=20;d1:=r2+r1; d2:=r2+2*r1; circle(x,y,r2); circle(x-r2-r1,y,r1); circle(x,y-r2-r1,r1); circle(x+r2+r1,y,r1); circle(x,y+r2+r1,r1); rectangle(x-d1,y-d1,x+d1,y+d1); rectangle(x-d2,y-d2,x+d2,y+d2); line(x-d2,y+d2,x+d2,y-d2); line(x-d2,y-d2,x+d2,y+d2); end; begin initgraph(xc,yc,''); xc:=getmaxX div 2; yc:=getmaxY div 2; outtextXY(xc-80,20,'Upravlenie - Strelki'); outtextXY(xc-50,40,'Exit - Esc'); x:=xc;y:=yc; Fig(x,y,12); repeat if keypressed then begin k:=readkey; if k=#80 then begin delay(100); Fig(x,y,0); if y>getmaxY-d2-10 then d:=0 else d:=10; y:=y+d; Fig(x,y,12); end; if k=#72 then begin delay(100); Fig(x,y,0); if y<2*d2+10 then d:=0 else d:=10; y:=y-d; Fig(x,y,12); end; if k=#77 then begin delay(100); Fig(x,y,0); if x>getmaxX-d2-10 then d:=0 else d:=10; x:=x+d; Fig(x,y,12); end; if k=#75 then begin delay(100); Fig(x,y,0); if x<d2+10 then d:=0 else d:=10; x:=x-d; Fig(x,y,12); end; if k=#27 then exit; end; until k=#27; end. |
22.10.2012, 10:25 | #23 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Теперь по программе. В принципе, всё правильно, и, по сути этот код почти, за исключением обозначений, не отличается от моего, вот только зачем-то напихано много явно лишнего. А именно: 1. Ну на кой пёс Вы там ставите задержки после нажатия клавиш? С ними только хуже. Убрать. 2. Условный оператор If KeyPressed then begin ... end; абсолютно не нужен. Ничего он не добавляет и не убавляет, поэтому - убрать. 3. Отдельная обработка кода клавиши Esc if k=#27 then exit; также не нужна: вполне достаточно ее иметь, как параметр Until k=#27. Убрать. 4. Не обязательно, но так, на будущее, в качестве строгости и общей дисциплины программирования: если Вы используете графический режим, то в конце программы (или фрагмента с графикой) желательно предусмотреть выход из него, т.е. поставить CloseGraph. Но это, повторяю, не обязательно. С учетом перечисленных поправок: Код:
uses crt,graph; var xc,yc,x,y,d1,d2,r1,r2,d:integer; k:char; procedure Fig(x,y,c:integer); begin setcolor(c); r1:=10;r2:=20;d1:=r2+r1; d2:=r2+2*r1; circle(x,y,r2); circle(x-r2-r1,y,r1); circle(x,y-r2-r1,r1); circle(x+r2+r1,y,r1); circle(x,y+r2+r1,r1); rectangle(x-d1,y-d1,x+d1,y+d1); rectangle(x-d2,y-d2,x+d2,y+d2); line(x-d2,y+d2,x+d2,y-d2); line(x-d2,y-d2,x+d2,y+d2); end; begin initgraph(xc,yc,''); xc:=getmaxX div 2; yc:=getmaxY div 2; outtextXY(xc-80,20,'Upravlenie - Strelki'); outtextXY(xc-50,40,'Exit - Esc'); x:=xc;y:=yc; Fig(x,y,12); repeat k:=readkey; if k=#80 then begin Fig(x,y,0); if y>getmaxY-d2-10 then d:=0 else d:=10; y:=y+d; Fig(x,y,12); end; if k=#72 then begin Fig(x,y,0); if y<2*d2+10 then d:=0 else d:=10; y:=y-d; Fig(x,y,12); end; if k=#77 then begin Fig(x,y,0); if x>getmaxX-d2-10 then d:=0 else d:=10; x:=x+d; Fig(x,y,12); end; if k=#75 then begin Fig(x,y,0); if x<d2+10 then d:=0 else d:=10; x:=x-d; Fig(x,y,12); end; until k=#27; CloseGraph; end. |
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|