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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.01.2012, 23:23   #1
Danise
 
Регистрация: 26.12.2011
Сообщений: 3
По умолчанию Управление прямой вокруг точки Pascal ABC

Задача такова: разработать класс или объект, который является прямой прикрепленной к центру окружности, длина прямой равна диаметру окружности. клавишами L,R можно вращать прямую вокруг центра. при нажатии мышью в области окружности она меняет цвет рандомно, при нажатии вне, ничего не меняется. Помогите пожалуйста нужно срочно, возможно даже вознаграждение.

вот код не рабочей программы примерно должно выглядеть так:
Код:
Uses GRAPHabc,CRT,Events;
const esc=27;
      left=77;
      right=75;
      c=300;
      d=200;
function RdKey:integer;
         var key:INTEGER;
begin
     key:=Ord(ReadKey);
     if key=0 then key:=256+Ord(ReadKey);
     RdKey:=Key;
end;

type Tline=class
x,y:integer;
 constructor Create(c0,d0,x0,y0:integer);
 procedure show;
 procedure hide;
 procedure move(newx,newy:integer);
 procedure HandleEvent(newx,newy,key:integer; r:real);
end;

constructor Tline.create(c0,d0,x0,y0:integer);
begin x:=x0; y:=y0;   end;

procedure Tline.show;
  begin
   SetPenColor(clBlack);
   SetBrushColor(clWhite);
   Line(c,d,x,y);
end;

procedure Tline.Hide;
 begin
  SetPencolor(clWhite);
  SetBrushColor(clwhite);
  Line(c,d,x,y);
end;

procedure Tline.move(newx,newy:integer);
 begin
  Hide; x:=newx; y:=newy; show;
end;


procedure Tline.HandleEvent(newx,newy,key:integer; r:real);
 begin
 case key of
     left:begin
         r:=r-0.2;
         newx:=round((200*cos(r))+300);
         newy:=round(((300*cos(90-r))/2)+200);
         move(x,y);
         end;
    right:begin
         r:=r+0.2;
         newx:=round((200*cos(r))+300);
         newy:=round(((300*cos(90-r))/2)+200);
         move(x,y);
         end;
     end;
end;

VAR
x,y,newx,newy,key:integer;
    A:Tline;
    r:real;
//событие нажатия левой кнопки мыши
procedure MouseDown(mx,my,mb: integer);
var mc:integer;
begin
  if mb=1 then
   begin
    if (mx-300)*(mx-300)+(my-200)*(my-200)<10000 then
     begin
      mc:=RGB(random(255),random(255),random(255));
      setbrushcolor(mc);
      floodfill(mx,my,mc);

     end;
   end;
end;


BeGIN
setWindowCaption('Хабиров ЗПИ-104');
circle(300,200,100);
OnMouseDown:=MouseDown;
A:=Tline.create(c,d,x,y);
A.show;
repeat
key:=rdKey;
A.handleEvent(key,newx,newy,r);
until key=esc;

end.
Danise вне форума Ответить с цитированием
Старый 10.01.2012, 00:53   #2
Danise
 
Регистрация: 26.12.2011
Сообщений: 3
Радость

И наконец с горем по полам я все же разобрался с курсачем, вот код, может кому пригодится
Код:
Uses GRAPHabc,CRT,VCL,Events,Utils;
const esc=27;
      c=300;
      d=200;

function RdKey:integer;
         var key:INTEGER;
begin
     key:=Ord(ReadKey);
     if key=0 then key:=256+Ord(ReadKey);
     RdKey:=Key;
end;

type Tline=class
x,y:integer;
constructor Create(c,d,x,y:integer);
 procedure show;
 procedure hide;
 procedure move(newx,newy:integer; r:real);

end;

constructor Tline.create(c,d,x,y:integer);
begin x:=x; y:=y;   end;

procedure Tline.show;
  begin
   SetPenColor(clBlack);
   SetBrushColor(clWhite);
   Line(c,d,x,y);
end;

procedure Tline.Hide;
 begin
  SetPencolor(clWhite);
  SetBrushColor(clwhite);
  Line(c,d,x,y);
end;

procedure TLine.move(newx,newy:integer; r:real);
begin
  newx:=round((200*cos(r))+300);
  newy:=round(((300*cos(90-r))/2)+200);
  Hide;
         x:=newx;
         y:=newy;
         show;
end;

VAR
x,y,newx,newy,key:integer;
    A:Tline;
    r:real;

//ñîáûòèå íàæàòèÿ ëåâîé êíîïêè ìûøè
procedure MouseDown(mx,my,mb: integer);
var mc:integer;
begin
circle(300,200,100);
  if mb=1 then
   begin
    if (mx-300)*(mx-300)+(my-200)*(my-200)<10000 then
     begin
      mc:=RGB(random(255),random(255),random(255));
      setbrushcolor(mc);
      floodfill(mx,my,mc);

     end;
   end;
end;

BeGIN
setWindowCaption('Õàáèðîâ ÇÏÈ-104');
writeln('Äëÿ âðàùåíèÿ ïî ÷àñîâîé ñòðåëêå íàæìèòå "L"');
writeln('Äëÿ âðàùåíèÿ ïðîòèâ ÷àñîâîé ñòðåëêå íàæìèòå "R"');
writeln('Äëÿ âûâîäà ìåíþ "Î ïðîãðàììå" íàæìèòå "A"');
writeln('Äëÿ âûõîäà íàæìèòå "esc"');
circle(300,200,100);
A:=Tline.create(c,d,x,y);
A.show;
OnMouseDown:=MouseDown;

repeat
key:=rdKey;
begin
case key of
     108:begin
         A.move(newx,newy,r+0.1);
         r:=r+0.1;
         end;
    114:begin
         A.move(newx,newy,r-0.1);
         r:=r-0.1;
         end;
    97:begin
         showmessage('Producted by Danis Khabirov ZPI-104 imi.samara');
       end;
       end;
end;

until key=esc;
end.
Danise вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выяснить лежат ли точки на одной прямой commander_spock Помощь студентам 10 20.10.2010 14:44
поворот точки вокруг оси NiCola999 Общие вопросы C/C++ 5 13.08.2010 13:19
Определить Лежат ли точки на одной прямой домик Помощь студентам 10 11.04.2010 20:12
Эллипс путем перемещения точки вокруг отрезка Dublin Мультимедиа в Delphi 4 22.10.2008 21:30
Mногоугольник, вращающийся вокруг заданной точки Sashka Помощь студентам 13 30.01.2008 17:15