Почему не работает повторный вызов процедуры - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

после того, как процедура start отработала, запускается и работает процедура over, но после нажатия на прямоугольник(для того чтобы запустилась процедура старт), программа зависает и выключается соответственно. В чем проблема?

Решение задачи: «Почему не работает повторный вызов процедуры»

textual
Листинг программы
program Program9;
 
uses graphabc, abcobjects, abcbuttons;
 
var b : rectangleABC;
    c : rectangleABC;
   Initstart:boolean;
left, right : integer;
x:=100; y:=100;
 
procedure start; forward;
procedure keyd(key : integer);
begin
  case key of 
   vk_left: left := 1;
   vk_right : right := 1;
  end;
end;
 
procedure keyup(key : integer);
begin
  case key of 
   vk_left: left := 0;
   vk_right : right := 0;
  end;
end;
 
procedure mousedown(x,y,mb : integer);
begin
//  if (x>100) and (x<200) and (y>200) and (y<230) and (mb=1) then start:=true;
  if mb=1 then Initstart:=true else Initstart:=false;
end;
 
procedure over;
begin
  b.Destroy; //уничтожаем объект
  
 //создаем что-то типа кнопки, после ее нажатия, должна запуститься процедура старт
  c := new RectangleABC(100,200,100,30, color.AliceBlue);
 
end;
 
procedure start;
begin
for var i:= objects.Count-1 downto 0 do 
  objects[i].Destroy; // удаляем все объект
  b := new RectangleABC(x,y,100,30,color.LightGreen); //инициализирую прямоугольник и запускаю цикл
 
   while (x<150) do 
   begin
 
     if left=1 then b.Visible:=false; //если кнопка "влево" нажата, то скрываем обеъект
     if left=0 then b.Visible:=true; //если кнопка отжата, то показываем его 
     
     if right=1 then // если нажата правая кнопка, то двигаем объект вправо пока не отпустим кнопку или не 
                   begin;          //завершится цикл
                     b.Moveto(x+15,y+2);
                      x:=x+1;
                   end;    
    sleep(10);
   end;
   x:=100;Initstart:=false;
  over; // по окончанию запускам процедуру 
end;
 
begin
  
   onkeydown := keyd;
   onkeyup := keyup;
   onmousedown := mousedown;   
   Initstart:=true;
   repeat
      if Initstart then start;
   until false;  
   
end.

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


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

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

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