pascalABC.net: При проигрыше, сообщение о том, что вы проиграли выводится два раза

Сделал игру угадай число, и так как в разных местах мне нужно делать одну и ту же проверку, я решил изучить функции и процедуры. Сделал функцию, что если попыток у игрока меньше или равно 0, то пишет У вас закончились попытки, перезапуск..., но когда заканчиваются попытки, эта фраза пишется 2 раза. Вот код:

uses crt;

label restart;
procedure wrn(text: string);
begin
  writeln(text);
end;

function check1(at: integer): boolean;
var abc: boolean;
begin
  if at <= 0 then begin
    wrn('У вас закончились попытки!');
    wrn('Перезапуск...');
    check1 := True;
    {print(at);}
  end
  else check1 := False;
  {print(at);}
end;

begin
  randomize;
  var _restart: boolean;
  var _attempts: integer;
  restart: _restart := False;
  _attempts := 10;
  var random_number := random(100);
  {print(random_number);}
  var a := ReadInteger('Введите любое число от 1 до 100: ');
  if a > 100 then begin
    wrn('Вы написали число больше 100!');
    _restart := True;
    goto restart;
  end;
  while _restart <> True do
  begin
    var b := ReadInteger('Угадывайте: ');
    if b > random_number then begin
      check1(_attempts);
      if check1(_attempts) = True then begin
        goto restart;
      end;
      _attempts := _attempts - 1;
      wrn('Ваше число больше загаданного.');
    end;
    if b < random_number then begin
      check1(_attempts);
      if check1(_attempts) = True then begin
        goto restart;
      end;
      _attempts := _attempts - 1;
      wrn('Ваше число меньше загаданного.');
    end;
    if b = random_number then begin
      wrn('Вы угадали число!');
      wrn('Перезапуск...');
      _restart := True;
      goto restart;
    end;
  end;
end.

Просьба не переделывать код полностью, а просто переделать тот момент, где я ошибся. На остальное можете просто указать, чтоб я в дальнейшем мог это изучить. Заранее спасибо!


Ответы (1 шт):

Автор решения: Алексей Р

Все очень просто - вы дважды подряд вызываете функцию check1(), печать в которой происходит при исчерпании количества попыток. Причем результат первого вызова функции вы никак не используете. Поэтому две строки check1(_attempts); в разных блоках кода у вас совершенно лишние. Удалите или закомментируйте их:

check1(_attempts); // удалите или закомментируйте (встречается дважды в коде)
if check1(_attempts) = True then begin
→ Ссылка