Почему-то всегда выполняется if в паскале

Почему-то вcегда выполняется if в зоне, помеченной с двух сторон комментарием //mistake. Всегда выводится:"Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было" - хоть и не должно. Пробовал в условии писать и код символа, и сам символ в одинарных кавычках:

program text_quest;

uses crt;

type
  invent = array [1.. 4] of char;

var
  e: integer;choice: char;a, b, c: boolean;inventory: invent;

procedure fight(choice: char);
begin
  randomize;
  writeln('Как только вы подошли к дому, они обратили на вас внимание. Что вы будете делать?'); 
  writeln('1-попробовать убежать, 2-атаковать'); 
  choice := readkey; 
  if(choice = '1') then begin
    writeln('Зомби нагнали вас. Вы погибли'); 
    writeln('Конец демо'); 
    exit
  end 
  else if(choice = '2') then begin
    writeln('Вы атаковали одного из них прямо по голове и тут же он упал, но в то время вас успел укусить другой. Выживете ли вы, вот в чем вопрос?'); 
    e := random(10); 
    if((e > 5) or (e = 5)) then begin
      writeln('Вам повезло и вы выжили, победили второго монстра, а свою рану залечили при помощи аптечки, которую нашли в машине'); 
      writeln('Вы завели машину и уехали. Что же будет дальше?'); 
      writeln('Конец демо');
      exit
    end 
    else if(e < 5) then begin
      writeln('Вам не повезло и вы были съедены'); 
      writeln('Конец демо');
      exit
    end;
  end; 
end;

procedure chr_ch(choice: char; a, b, c: boolean; inventory: invent);
begin
  if((a = false) and (b = false) and (c = false)) then begin
    choice := readkey; 
    case choice of
      '1':
        begin
          writeln('На столе вы увидели топор и взяли его с собой'); 
          a := true; 
          inventory[1] := #65;
        end; 
      '2':
        begin
          writeln('Вы попробовали поднять один из ящиков, но он оказался тяжелым, как и все остальные'); 
          b := true;
        end; 
      '3':
        begin
          writeln('Вы спустились вниз'); 
          c := true;
        end;
    end; 
  end; 
  if((a = true) and (b = false) and (c = false)) then begin
    writeln('1-проверить ящики, 2-спуститься вниз'); 
    choice := readkey; 
    if(choice = '1') then begin
      writeln('Вы попробовали поднять один из ящиков, но он оказался тяжелым, как и все остальные'); 
      b := true;
    end
  end; 
  if((a = false) and (b = true) and (c = false)) then begin
    writeln('1-посмотреть что на столе, 2-спуститься вниз'); 
    choice := readkey; 
    if(choice = '1') then begin
      writeln('Вы подошли к столу и взяли топор, лежавший на нем');
      a := true; 
      inventory[1] := #65;
    end
  end; 
  if((a = true) and (b = true) and (c = false)) then begin
    writeln('Так как делать больше было нечего, вы спустились вниз'); 
    a := true;
  end; 
end;

begin
  writeln('Начать игру?'); 
  writeln('1-да, 2-нет'); 
  choice := readkey; 
  if(choice = '1') then begin
    writeln('Добро пожаловать!');
  end
  else if('2' = choice) then begin
    exit
  end; 
  ClrScr;  
  a := false; 
  b := false;
  c := false;
  writeln('На земле воцарился полный хаос, тут и там бродят ходячие мертвецы, а вы один из выживших, не понимающих, что происходит.'); 
  writeln('Вам предстоит выжить в нем, сражаться с монстрами и людьми, обезумевшими из-за происходящего на улицах, бандитами, дикими животными.'); 
  ClrScr;  
  writeln('Вы очнулись на чердаке какого-то, ваши действия? Впереди вас находится стол, на нем лежит что-то блестящее. Слева вы видите кучу ящиков. Справа от вас вы видите спуск вниз.'); 
  writeln('1-проверить стол, 2-подойти к ящиками, 3-спуститься вниз'); 
  chr_ch(choice, a, b, c, inventory); 
  writeln('Теперь вы поняли, что находитесь в сарае. В нем вы видите много сена, а впереди вас находится дверь. Вы слышите странные звуки.'); 
  writeln('Что вы будете сделаете?'); 
  writeln('1-посмотреть сквозь щели, что происходит'); 
  writeln('2-попробовать открыть дверь'); 
  //mistake 
  choice := readkey; 
  if(choice = '1') then begin
    writeln('Вы увидели пару человек, но выглядели они очень странно, их кожа была серой, а изо рта текла кровь'); 
    writeln('Вы попробовали открыть дверь, но она не поддавалась');   
    if(inventory[1] <> #65) then begin
      writeln('Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было'); 
      writeln('Этот предмет оказался топором и вы взяли его с собой. Спустившись вниз, вы решили открыть при помощи него дверь'); 
      a := true; 
      inventory[1] := #65;
    end;   
  end
  else if(choice = '2') then begin
    writeln('Вы попробовали открыть дверь, но она не поддавалась'); 
  end;   
  if(inventory[1] <> #65) then begin
    writeln('Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было'); 
    writeln('Этот предмет оказался топором и вы взяли его с собой. Спустившись вниз, вы решили открыть при помощи него дверь'); 
    a := true; 
    inventory[1] := #65;
  end;   
  if(inventory[1] <> #65) then begin
    writeln('Вы вспомнили, что на чердаке видели нечто блестящее и решили проверить, что это такое было'); 
    writeln('Этот предмет оказался топором и вы взяли его с собой. Спустившись вниз, вы решили открыть при помощи него дверь'); 
    a := true; 
    inventory[1] := #65;
  end;     
  //mistake  
  writeln('Вы со всей силы ударили топором по двери и она открылась. Те странные люди сразу повернулись в вашу сторону. Вы увидели,что место,в котором вы находитесь, огорожено маленьким забором'); 
  writeln('Что вы сделаете?'); 
  writeln('1-попробуете убежать, 2-попробуете атаковать их'); 
  choice := readkey; 
  if(choice = '1') then begin
    writeln('Вам удалось сбежать от них в лес, в котором вы решили переждать и оценить ситуацию. Во время вашего побега вы успели заметить дома вдали.');
  end 
  else if(choice = '2') then begin
    writeln('Вы ударили по одному из них, а другой в тот момент попытался укусить вас'); 
    writeln('Вам показался странным этот факт, да и сами люди выглядели так, как будто были мертвыми, и вы решили убежать'); 
    writeln('Во время драки вы заметили, что где-то вдали есть другие дома, но сами побежали в лес, чтобы переждать и оценить ситуацию'); 
  end; 
  writeln('Нажмите пробел чтобы продолжить'); 
  choice := readkey; 
  if(choice = #32) then begin
    ClrScr;
  end;  
  writeln('Посидев пару минут и отдышавшись, вы начали думать, что делать дальше'); 
  writeln('Вы решили попасть обратно в то поселение, где вы очнулись, чтобы попробовать найти выживших'); 
  writeln('Спокойно обойдя тот сарай, где вы очнулись, вы вновь увидели те дома вдали. Подойдя поближе, вы увидели несколько машин, в окне одного из домов вы увидели чье-то лицо'); 
  writeln('Справа от того дома вы увидели пару мертвецов. Что вы будете делать?'); 
  writeln('1-проверить машины, 2-подойти к дому'); 
  choice := readkey; 
  if(choice = '1') then begin
    writeln('Одна из машин оказалась открытой, вам повезло, ведь в ней было топливо. Попробовав завести машину, она завелась и вы уехали. Что же будет дальше?'); 
    writeln('Конец демо'); 
    exit
  end 
  else if(choice = '2') then begin
    fight(choice);
  end; 
end.

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

Автор решения: Zhihar

у вас эта надпись вылезает в 3х блоках, один зависит от ввода '1', два других от inventory[1] <> #65

если посмотреть код выше, то у вас или вводится 1 или inventory[1] имеет какие-то другие значения кроме #65

т.е. условия работает всегда

а вообще раз начали писать программы длиннее 10 строчек учитесь разбивать их на функции и процедуры и комментировать код иначе ошибок будет еще больше

→ Ссылка