Зациклить программу, пока не нажат пробел - 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.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5
Похожие ответы