我做了一个猜数字的游戏,由于我需要在不同的地方做同样的检查,所以我决定研究一下函数和程序。我做了一个函数,如果一个玩家的尝试次数小于或等于0,那么他会写You has run out of attempts, restart...,但是当尝试次数用完时,这个短语会被写两次。这是代码:
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.
请不要完全重做代码,只需重做我犯错误的地方即可。剩下的你就简单指出来,方便我以后研究。先感谢您!
这非常简单 - 您连续调用该函数两次
check1(),并在尝试次数耗尽时打印。此外,您不使用第一个函数调用的结果。因此,check1(_attempts);不同代码块中的两行是完全没有必要的。删除或注释掉它们: