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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2009, 16:24   #1
Arizonec
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 17
По умолчанию Паскаль, вращение треугольника.

Задача:Составьте программу вывода на экран треугольника. При нажатии клавиши Курсор вправо треугольник вращается по часовой стрелке вокруг одной из вершин, при нажатии клавиши Курсор влево  против часовой стрелки.

Нашел в сети чью-то курсовую, но возникло пару вопросов. Спасайте, сессия уже близко...

Код:
Program CursProj;
Uses graph,crt, Drivers;
const
 Ctr : Array [1 .. 2 , 1 .. 3] of Integer =((-77,0 , 77 ),
                                            (-50,91,-50));
Var x_c , y_c : Integer;
    Time2W    : Byte;
    Event     : TEvent;
    grDriver  : Integer;
    grMode    : Integer;
    ErrCode   : Integer;
    xn, yn, a : Integer;
    Angle     : Real;
    K         : ShortInt;

Procedure VgaDrv; external;
{$L EGAVGA.OBJ }

 procedure SetCenter(x_nc , y_nc : integer);
   begin
    x_c := x_nc ; y_c := y_nc;
   end;

Function Str2(Num:Integer):String;
 Type S = String;
 var P : ^S;
Begin
 New(P); Str(Num,P^); Str2 := P^; Dispose(P);
End;

 procedure draw(color:integer);
  begin
   SetColor(Color);
        Line(x_c+ctr[1][1],y_c+ctr[2][1],x_c+ctr[1][2],y_c+ctr[2][2]);
        Line(x_c+ctr[1][2],y_c+ctr[2][2],x_c+ctr[1][3],y_c+ctr[2][3]);
        Line(x_c+ctr[1][3],y_c+ctr[2][3],x_c+ctr[1][1],y_c+ctr[2][1]);
  end;

procedure DrawText(XX,YY : Integer; Text : String);
 Begin
  SetColor(Black);
  OutTextXY(XX,YY,'(((');
  SetColor(White);
  OutTextXY(XX,YY,Text);
End;

procedure ShowD;
  Begin
   GetKeyEvent(Event);
 If Event.What = evKeyDown Then
   Case Event.KeyCode of
    kbUp    : Begin
                  if Time2W > 2 Then Time2W := Time2W - 1;
                  SetColor(Black);
                  OutTextXY(85,10, '(((((((((((((');
                  SetColor(White);
                  OutTextXY(90,10,Str2(100-Time2W));
                End;
    kbDown  : Begin
                  if Time2W < 100 Then Time2W := Time2W + 1;
                  SetColor(Black);
                  OutTextXY(85,10,'(((((((((((');
                  SetColor(White);
                  OutTextXY(90,10,Str2(102-Time2W));
                End;
   kbEnter  : Begin
                  SetColor(LightRed);
                  OutTextXY(1,30, 'Freeze');
                  ReadKey;
                  SetColor(Black);
                  OutTextXY(1,30, '(((((((((((((');
                End;
    kbTab   : Begin
                   K := -K;
                End;

   End;

   Angle := 0.1;
   Draw(White);
   Delay(Time2W);
   Draw(Black);
 for A := 1 to 3 do
  begin
   Xn := Round(ctr[1][a] * cos(Angle) + K * ctr[2][a] * sin(Angle));
   Yn := Round(-K * ctr[1][a] * sin(Angle) + ctr[2][a] * cos(Angle));
   Ctr[1][a] := Xn; Ctr[2][a] := Yn;
  end;
   Draw(White);
   DrawText(105,60,Str2(x_c+ctr[1][1]));
   DrawText(105,75,Str2(x_c+ctr[2][1]));
   DrawText(105,90,Str2(x_c+ctr[1][2]));
   DrawText(155,60,Str2(x_c+ctr[2][2]));
   DrawText(155,75,Str2(x_c+ctr[1][3]));
   DrawText(155,90,Str2(x_c+ctr[2][3]));
 end;

begin
  RegisterBgiDriver(@vgaDrv);
  K:=-1;
  Time2W := 15;
  SetCenter(320,240);
  Angle := 0.1;
 grDriver := Detect;
 grMode:=VGAHi; {video mode VGA 640x480x16colors}
 InitGraph(grDriver, grMode,'');
 ErrCode := GraphResult;
 if ErrCode = grOk then
 begin
  OutTextXY(1,10,'Speed    : '+Str2(100-Time2W));
  OutTextXY(10,60,' Corn. 1  X     Y');
  OutTextXY(10,75,' Corn. 2  X     Y');
  OutTextXY(10,90,' Corn. 3  X     Y');
 SetTextStyle(TriplexFont, HorizDir, 2);
 OutTextXY(10,425,'(((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((');
 OutTextXY(10,415,'(((((((((((((((((((((((((((((((((((((((((((((((((((((((((
(((((((((((((((((((((');
 SetColor(Black);
 OutTextXY(10,420,'     -Exit        -Freeze        '+
                            '   -Speed       -Direction  ');
 SetColor(LightRed);
 OutTextXY(10,420,' ESC        Enter         Up/Down          TAB
');
 SetTextStyle(DefaultFont, HorizDir, 1);
     Repeat ShowD Until Event.KeyCode = kbEsc;
  CloseGraph;
 end
 else Writeln('Graphics error : ', GraphErrorMsg(ErrCode));
end.
непонятны 2 вещи: что должно быть на месте большого количества скобок, и что за ошибка при компилировании File not found (EGAVGA.obj)
Arizonec вне форума Ответить с цитированием
Старый 03.01.2009, 17:21   #2
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Цитата:
и что за ошибка при компилировании File not found (EGAVGA.obj)
Это значит он не нашел драйвер для видеоадаптера, который находится в папке BGI корневой папки Турбо Паскаля: дело в том что на компьютере того, с которого вы скачали вот эту программу свой уникальный путь к драйверу, иными словами он расположен в другом каталоге, диске и так далее - просто укажите путь к папке BGI на вашем компьютере, допустим у меня на компьютере это путь 'C:\bp\bgi'

Насчет первого - бес понятия - прогу не смотрел
capta1n вне форума Ответить с цитированием
Старый 03.01.2009, 17:54   #3
Arizonec
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 17
По умолчанию

Дело не в ЕGAVGA.BGI файле... а в .OBJ
Arizonec вне форума Ответить с цитированием
Старый 03.01.2009, 18:26   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Он и без *.Obj работает, только одно НО, координаты и скорость перетираются в белый квадратик:
Код:
Program CursProj;
Uses graph,crt, Drivers;
const
 Ctr : Array [1 .. 2 , 1 .. 3] of Integer =((-77,0 , 77 ),
                                            (-50,91,-50));
Var x_c , y_c : Integer;
    Time2W    : Byte;
    Event     : TEvent;
    grDriver  : Integer;
    grMode    : Integer;
    ErrCode   : Integer;
    xn, yn, a : Integer;
    Angle     : Real;
    K         : ShortInt;

{Procedure VgaDrv; external;
$L EGAVGA.OBJ }

 procedure SetCenter(x_nc , y_nc : integer);
   begin
    x_c := x_nc ; y_c := y_nc;
   end;

Function Str2(Num:Integer):String;
 Type S = String;
 var P : ^S;
Begin
 New(P); Str(Num,P^); Str2 := P^; Dispose(P);
End;

 procedure draw(color:integer);
  begin
   SetColor(Color);
        Line(x_c+ctr[1][1],y_c+ctr[2][1],x_c+ctr[1][2],y_c+ctr[2][2]);
        Line(x_c+ctr[1][2],y_c+ctr[2][2],x_c+ctr[1][3],y_c+ctr[2][3]);
        Line(x_c+ctr[1][3],y_c+ctr[2][3],x_c+ctr[1][1],y_c+ctr[2][1]);
  end;

procedure DrawText(XX,YY : Integer; Text : String);
 Begin
  SetColor(Black);
  OutTextXY(XX,YY,'(((');
  SetColor(White);
  OutTextXY(XX,YY,Text);
End;

procedure ShowD;
  Begin
   GetKeyEvent(Event);
 If Event.What = evKeyDown Then
   Case Event.KeyCode of
    kbUp    : Begin
                  if Time2W > 2 Then Time2W := Time2W - 1;
                  SetColor(Black);
                  OutTextXY(85,10, '(((((((((((((');
                  SetColor(White);
                  OutTextXY(90,10,Str2(100-Time2W));
                End;
    kbDown  : Begin
                  if Time2W < 100 Then Time2W := Time2W + 1;
                  SetColor(Black);
                  OutTextXY(85,10,'(((((((((((');
                  SetColor(White);
                  OutTextXY(90,10,Str2(102-Time2W));
                End;
   kbEnter  : Begin
                  SetColor(LightRed);
                  OutTextXY(1,30, 'Freeze');
                  ReadKey;
                  SetColor(Black);
                  OutTextXY(1,30, '(((((((((((((');
                End;
    kbTab   : Begin
                   K := -K;
                End;

   End;

   Angle := 0.1;
   Draw(White);
   Delay(Time2W);
   Draw(Black);
 for A := 1 to 3 do
  begin
   Xn := Round(ctr[1][a] * cos(Angle) + K * ctr[2][a] * sin(Angle));
   Yn := Round(-K * ctr[1][a] * sin(Angle) + ctr[2][a] * cos(Angle));
   Ctr[1][a] := Xn; Ctr[2][a] := Yn;
  end;
   Draw(White);
   DrawText(105,60,Str2(x_c+ctr[1][1]));
   DrawText(105,75,Str2(x_c+ctr[2][1]));
   DrawText(105,90,Str2(x_c+ctr[1][2]));
   DrawText(155,60,Str2(x_c+ctr[2][2]));
   DrawText(155,75,Str2(x_c+ctr[1][3]));
   DrawText(155,90,Str2(x_c+ctr[2][3]));
 end;

begin
  {RegisterBgiDriver(@vgaDrv);}
  K:=-1;
  Time2W := 15;
  SetCenter(320,240);
  Angle := 0.1;
 grDriver := Detect;
 grMode:=VGAHi; {video mode VGA 640x480x16colors}
 InitGraph(grDriver, grMode,'');
 ErrCode := GraphResult;
 if ErrCode = grOk then
 begin
  SetColor(white);
  OutTextXY(1,10,'Speed    : '+Str2(100-Time2W));
  OutTextXY(10,60,' Corn. 1  X     Y');
  OutTextXY(10,75,' Corn. 2  X     Y');
  OutTextXY(10,90,' Corn. 3  X     Y');
 SetTextStyle(TriplexFont, HorizDir, 2);
 OutTextXY(10,425,'((((((((((((((((((((((((((((((((((((((((((((((((((((((((('+
                  '(((((((((((((((((((((');
 OutTextXY(10,415,'((((((((((((((((((((((((((((((((((((((((((((((((((((((((('+
                  '(((((((((((((((((((((');
 SetColor(Black);
 OutTextXY(10,420,'     -Exit        -Freeze        '+
                            '   -Speed       -Direction  ');
 SetColor(LightRed);
 OutTextXY(10,420,' ESC        Enter         Up/Down          TAB');
 SetTextStyle(DefaultFont, HorizDir, 1);
     Repeat ShowD Until Event.KeyCode = kbEsc;
  CloseGraph;
 end
 else Writeln('Graphics error : ', GraphErrorMsg(ErrCode));
end.
Alter вне форума Ответить с цитированием
Старый 03.01.2009, 18:52   #5
Arizonec
Пользователь
 
Регистрация: 12.11.2008
Сообщений: 17
По умолчанию

Спасиб вам, добрые люди)
Arizonec вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вращение элипса lacost Мультимедиа в Delphi 3 19.12.2008 13:41
Вращение изображения beginner JavaScript, Ajax 5 07.07.2008 23:44
Вращение креста Roberto Помощь студентам 5 03.05.2008 14:07
вращение текста ксона Помощь студентам 3 25.04.2008 10:40
Вращение 5-угольника..? Roberto Помощь студентам 4 17.04.2008 09:38