IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Readkey и стрелочки., Символы ('a'..'Z') я понимаю как прописать... А как пр
сообщение
Сообщение #1


Гость






Добрый день.

Задача такая : Нужно сделать программу, в которой в начале нужно ввести колличество углов для многоугольника, затем программа должна создать этот многоугольник, и при нажатии стрелочек многоугольник должен двигатся в сторону стрелочек, а если нажать на клавишу "+" или "-" то фигура должна увеличиваться/уменьшаться.

Проблема вот в чем. Я все сделал, все работает, только не могу никак стрелочками задать движения и масштаб... unsure.gif Вот такой я ламер... Метод типа #72 не могу понять...Хелп читал, поиск тоже...

Сейчас выполняется всё путем нажатия на 'a' - 's' - 'd' - 'w' (Движение), 'q' - 'e' (Масштаб), 'z' - 'x' (Изменение углов). Помогите параллельно им дописать стрелочки (Т.е. не заменить, а чтоб паралельно приписать)... rolleyes.gif

Код прилагаю (Рабочий на 100%).

Uses Crt, Graph;
Var
 GraphDriver, GraphMode : Integer;
 Index : Integer;
 Palette : PaletteType;
 Color: Word;
 NGon : Integer;
 NGonAngle : Real;
 NGonArray : Array [3..20] of PointType;
 Zoom : Real;
 PosX, PosY : Integer;
 Key : Char;

Function IntToStr(IntToStrI : Longint) : String;
Var
 IntToStrS: string;
begin
 Str(IntToStrI, IntToStrS);
 IntToStr := IntToStrS;
end;

Procedure GraphAsk;
Label 1;
Begin
 1: Writeln('Pogalujsta, vvedite kollichestvo uglov u mnogougolnika : ');
 Read(NGon);
 If (NGon > 20) or (NGon < 3) then Goto 1;
 Readln;
End;

Procedure GraphInit;
Begin
 GraphDriver := Detect;
 InitGraph(GraphDriver, GraphMode, '');
 If GraphResult<> grOk Then
 Halt(1);

 Zoom := 50;
 PosX := (GetMaxX div 2);
 PosY := (GetMaxY div 2);
End;

Procedure GraphMenu;
Begin
 Rectangle(0,0,639,479);
 Rectangle(0,0,162,10);
 Rectangle(0,10,106,40);
 Rectangle(106,10,162,40);

 OutTextXY(2,2,'Using driver :' + GetDriverName);
 for Index := 0 to GetMaxMode do
 OutTextXY(2, (10 * Succ(Index)) + 2, GetModeName(Index));

 GetPalette(Palette);
 If Palette.Size <> 1 Then
 For Color := 0 to Pred(Palette.Size) do
 Begin
  SetColor(Color);
  Line(107,10 + (Color * 2), 161,10 + (Color * 2));
 End;

 OutTextXY(107,12,IntToStr(Color+1) + 'Color');

End;

Procedure GraphDraw;
Begin
 NGonAngle := 360 div NGon;
 For Index := 1 to NGon do
 Begin
  NGonArray[Index+2].X:=PosX + Trunc(Zoom*(Cos(NGonAngle*(Pi)*Index/180)));
  NGonArray[Index+2].Y:=PosY + Trunc(Zoom*(Sin(NGonAngle*(Pi)*Index/180)));
 End;
 Circle(PosX,PosY,1);
 DrawPoly(NGon,NGonArray);
 Line((NGonArray[3].X),(NGonArray[3].Y),(NGonArray[NGon+2].X),(NGonArray[NGon+2].Y));
End;

Procedure GraphWork;
Label 1;
Begin
 Repeat
1:GraphMenu;
  OutTextXY(2,470,'PRESS "c" to QUIT!');
  GraphDraw;
  Key := Readkey;
  If Key = 'c' then Break;
  If Key = 's' then
  Begin
   PosY := PosY + 5;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'w' then
  Begin
   PosY := PosY - 5;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'd' then
  Begin
   PosX := PosX + 5;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'a' then
  Begin
   PosX := PosX - 5;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'q' then
  Begin
   Zoom := Zoom + 5;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'e' then
  Begin
   Zoom := Zoom - 5;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'z' then
  Begin
   NGon := NGon + 1;
   If NGon > 18 Then NGon := 18;
   ClearViewPort;
   Goto 1;
  End;
  If Key = 'x' then
  Begin
   NGon := NGon - 1;
   If NGon < 1 Then Ngon := 1;
   ClearViewPort;
   Goto 1;
  End;
  If Key <> #0 then goto 1;
  Until False;
End;

Begin
 GraphAsk;
 GraphInit;
 GraphWork;
 CloseGraph;
End.


 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Метод типа #72 не могу понять...
Ничего сложного - коды "стрелочек" состоят из 2-х байт, первый из которых равен 0... То есть ты доджен прочесть ReadKey, и если это был нулевой символ, то прочесть еще один, и уже ВТОРОЙ анализировать на "стрелочки" ...

Смотри:

Repeat
  GraphMenu;
  OutTextXY(2,470,'PRESS "c" to QUIT!');
  GraphDraw;

  Key := Readkey;
  case key of
    'c': Break;
    's':
    Begin
      PosY := PosY + 5; ClearViewPort;
    end;
    'w':
    Begin
      PosY := PosY - 5; ClearViewPort;
    end;
    'd': 
    Begin
      PosX := PosX + 5; ClearViewPort;
    end;
    'a':
    Begin
      PosX := PosX - 5; ClearViewPort;
    End;
    'q':
    Begin
      Zoom := Zoom + 5; ClearViewPort;
    End;
    'e':
    Begin
      Zoom := Zoom - 5; ClearViewPort;
    End;
    'z':
    Begin
      NGon := NGon + 1;
      If NGon > 18 Then NGon := 18; ClearViewPort;
    End;
    'x':
    Begin
      NGon := NGon - 1;
      If NGon < 1 Then Ngon := 1; ClearViewPort;
    End;

    #0: { А вот тут - анализируешь второй код: }
    Begin
      Case ReadKey Of
        #72: Begin { Добавь нужные действия } End;
        { и все остальные коды - аналогично: #80, #75 и #77 }
      End; { закрыт нижний Case }
    End;
  end; { закрыт верний Case }
  Until False;

Заодно избавился от меток, не нужны они тебе здесь ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Мерси! Все работает smile.gif Дописал тким же макаром кнопки "+" и "-" smile.gif

Спасибо огромное Volvo! smile.gif
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.04.2025 5:37
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name