Зациклить программу, пока не нажат пробел - PascalABC.NET
Формулировка задачи:
Не могу сообразить, как реализовать такую вещь, как ожидание нажатия клавиши, например SPACE (пробел), но не просто ожидать, но и выполнять некоторый код программы.
ну вот как-то так в самом упрощенном виде, тут должны рисоваться красные точки в случайной позиции окна, и программа останавливается при нажатии клавиши пробел.
Можно для справки вывести где-то внизу экрана инструкцию, типа Press SpaceKey For Stop Program...
Решение задачи: «Зациклить программу, пока не нажат пробел»
textual
Листинг программы
Program Line_Mirror_vals;
uses GraphABC;
Const
WX = 800;
WY = 600;
var f:boolean;
procedure quit (key: integer);//процедура, меняющая значение флага при нажатии
begin //клавиши Space
if key=VK_Space then
begin
f:=false;//меняем флаг
SetWindowCaption('Программа завершена');///заголовок окна
sleep(1000);//задержка 1 сек
CloseWindow;//закрытие окна
end;
end;
Var
X11, X12, X21, X22, X31, X32, X41, X42: integer;
Y11, Y12, Y21, Y22, Y31, Y32, Y41, Y42: integer;
Cicle1: integer;
SX1, SX2, SY1, SY2, MaxS: integer;
CLine: Color;
Begin
Window.Title := 'Вспоминаю безмятежные годы';
Window.IsFixedSize := True;
SetWindowSize(WX,WY);
Window.Clear(clBlack);
Window.Center;
MaxS := 10;
SX1 := Random (MaxS*-1, MaxS);
SY1 := Random (MaxS*-1, MaxS);
SX2 := Random (MaxS*-1, MaxS);
SY2 := Random (MaxS*-1, MaxS);
X11 := Random(1, Round(WX/2));
X12 := Random(1, Round(WX/2));
Y11 := Random(1, Round(WY/2));
Y12 := Random(1, Round(WY/2));
CLine := ClRandom;
f := true; //установим флаг в true
repeat //выполняем цикл, (любой)
Sleep (10);
SetBrushColor(CLine);
X21 := WX-X11;
X22 := WX-X12;
Y21 := Y11;
Y22 := Y12;
X31 := X11;
X32 := X12;
Y31 := WY-Y11;
Y32 := WY-Y12;
X41 := WX-X11;
X42 := WX-X12;
Y41 := WY-Y11;
Y42 := WY-Y12;
Line (X11, Y11, X12, Y12, CLine);
Line (X21, Y21, X22, Y22, CLine);
Line (X31, Y31, X32, Y32, CLine);
Line (X41, Y41, X42, Y42, CLine);
X11 := X11+SX1;
X12 := X12+SX2;
Y11 := Y11+SY1;
Y12 := Y12+SY2;
If X11>WX/2 then begin CLine := ClRandom; SX1 := Random (MaxS*-1, -1); end;
If X11<0 then begin CLine := ClRandom; SX1 := Random (1, MaxS); end;
If X12>WX/2 then begin CLine := ClRandom; SX2 := Random (MaxS*-1, -1); end;
If X12<0 then begin CLine := ClRandom; SX2 := Random (1, MaxS); end;
If Y11>WY/2 then SY1 := Random (MaxS*-1, -1);
If Y11<0 then SY1 := Random (1, MaxS);
If Y12>WY/2 then SY2 := Random (MaxS*-1, -1);
If Y12<0 then SY2 := Random (1, MaxS);
Brush.Color:=clBlack;
rectangle(5,WY-30,80,WY-10);
Font.Color:=clWhite;
TextOut(5,WY-30,'Spase = Exit');
onkeydown:=quit;//ждем нажатия Spase
until not f;
End.