Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2013, 20:29   #1
RelaX Inc.
Пользователь
 
Регистрация: 15.01.2012
Сообщений: 52
По умолчанию Разборка кода

Здравствуйте. На курсах задали делать проект. Сказали, что можно взять программу из интернета и разобрать её всю и потом на защите весь принцип работы её показать. То бишь её надо изучить от символа до символа. Нашел я в интернета программу для перемещения изображения по полю. Вот данная программа:
Код:
program new;
uses graph,wincrt;
procedure Smail(x,y,r,c1,c2,c3:integer);
begin
setfillstyle(1,c1);
fillellipse(x,y,r,r);
setcolor(c1);
circle(x,y,r);
setcolor(c2);
setfillstyle(1,c2);
fillellipse(x-3,y-3,2,2);
fillellipse(x+3,y-3,2,2);
setcolor(c3);
Arc(x,y+5,0,180,3);
end;
var x,y,r,d:integer;
    k:char;
begin
x:=0;
initgraph(x,y,'');
x:=getmaxX div 2;
y:=getmaxY div 2;
r:=8;
outtextXY(x-45,20,'Move - arrows');
outtextXY(x-40,40,'Exit - Esc');
Smail(x,y,r,14,9,8);
repeat
if keypressed then
  begin
    k:=readkey;
    if k=#80 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if y>getmaxY-2*r then d:=0
        else d:=10;
        y:=y+d;
        Smail(x,y,r,14,9,8);
       end;
    if k=#72 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if y<2*r then d:=0
        else d:=10;
        y:=y-d;
        Smail(x,y,r,14,9,8);
      end;
    if k=#77 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if x>getmaxX-2*r then d:=0
        else d:=10;
        x:=x+d;
        Smail(x,y,r,14,9,8);
       end;
    if k=#75 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if x<2*r then d:=0
        else d:=10;
        x:=x-d;
        Smail(x,y,r,14,9,8);
      end;
    if k=#27 then exit;
  end;
until k=#27;
end.
Кто-нибудь сможет помочь с разборкой этого кода? В паскале знаю сам очень мало. Только основу: условия, циклы.

Язык: Free Pascal
RelaX Inc. вне форума Ответить с цитированием
Старый 24.04.2013, 21:34   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Не самая удачная программа, чтобы по ней изучать Паскаль.
s-andriano вне форума Ответить с цитированием
Старый 24.04.2013, 21:53   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
program new;
uses graph,wincrt;

{Это роцедура отрисовки смайла в координатах х у.
Радиус смайла задается и цвета глаз и морды (видимо)}
procedure Smail(x,y,r,c1,c2,c3:integer);
begin
setfillstyle(1,c1);
fillellipse(x,y,r,r);
setcolor(c1);
circle(x,y,r);
setcolor(c2);
setfillstyle(1,c2);
fillellipse(x-3,y-3,2,2);
fillellipse(x+3,y-3,2,2);
setcolor(c3);
Arc(x,y+5,0,180,3);
end;


var x,y,r,d:integer;
    k:char;
begin
x:=0;

{Включаем графику}
initgraph(x,y,'');

{Находим середину экрана}
x:=getmaxX div 2;
y:=getmaxY div 2;
r:=8;

{Выводим текст - типа мануал юзера}
outtextXY(x-45,20,'Move - arrows');
outtextXY(x-40,40,'Exit - Esc');

{Так будет выводится изображение}
Smail(x,y,r,14,9,8);

{В цикле ждем нажатия клавиши}
repeat
if keypressed then
  begin
    k:=readkey;

{Если она представляет из себя код кнопок-стрелочек клавиатуры}
    if k=#80 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
{Если смайлик подходит к краю экрана то резко телепортировать его на противоположную сторону экрана}
        if y>getmaxY-2*r then d:=0
        else d:=10;
{то меняем координаты смайла сдвигая его на координату согласно нажатой стрелке}
        y:=y+d;
{и отрисовываем в новой координате}
        Smail(x,y,r,14,9,8);
       end;
    if k=#72 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if y<2*r then d:=0
        else d:=10;
        y:=y-d;
        Smail(x,y,r,14,9,8);
      end;
    if k=#77 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if x>getmaxX-2*r then d:=0
        else d:=10;
        x:=x+d;
        Smail(x,y,r,14,9,8);
       end;
    if k=#75 then
      begin
        delay(100);
        Smail(x,y,r,0,0,0);
        if x<2*r then d:=0
        else d:=10;
        x:=x-d;
        Smail(x,y,r,14,9,8);
      end;
{Если нажали Эскейп - давай, досвиданья}
    if k=#27 then exit;
  end;

{Следующая строка написана видимо от нечего делать.}
until k=#27;
end.
Подходит такое описание?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2013, 23:00   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Stilet, браво, правильно составленные комментарии.
Только два последних комментария я бы поменял местами.

PS. Хотя сама программа, скорее, показывает как не надо писать.

Последний раз редактировалось s-andriano; 24.04.2013 в 23:02.
s-andriano вне форума Ответить с цитированием
Старый 25.04.2013, 09:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Только два последних комментария я бы поменял местами.
А я бы не только коменты поменял, но и программу
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
XML разборка Gudzik11 Общие вопросы Delphi 2 28.11.2011 19:22
Сборка и разборка файлов SlippyK Помощь студентам 2 24.02.2011 22:06
Разборка кода программы, как работает программа marsel989 Помощь студентам 29 17.06.2010 16:57
Разборка телевизора mutabor Компьютерное железо 5 11.02.2010 17:06
Разборка кода Safary Помощь студентам 8 28.11.2008 09:18