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

 





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