Inform7 игнорирует простые If-операторы

#if-statement #inform7

#if-оператор #inform7

Вопрос:

Я решил попробовать свои силы в Inform7, и мне очень весело играть и смотреть, что с ним возможно. На данный момент, и используя учебные пособия, доступные мне в Интернете, я пытаюсь включить дневной / ночной цикл и режим сна, который станет доступен игроку только во время одного из ночных циклов. Я столкнулся с некоторыми проблемами из-за того, что Inform7 игнорирует мои операторы if, и проигрыватель может спать в любое время суток, чего я не хочу. Я уверен, что я упустил из виду что-то глупое, поскольку я только начал, но, может быть, кто-нибудь будет достаточно любезен, чтобы рассказать мне, что я мог бы сделать, чтобы исправить это? Большое спасибо.

Я прошу прощения за любые ошибки в моем коде, пожалуйста, имейте в виду, что я новичок и хочу учиться.

Вот мой код . . .

 The sun is a backdrop. It is everywhere. The description is "Currently out of sight."

Night is a recurring scene. Night begins when play begins. Night begins when the time of day is 10:00 PM. Night begins when Dusk ends. Night ends when the time of day is 1:30 AM.

When Night begins:
    say "The moon is up and the temperature drops abruptly to well below zero.";
    now the description of the sun is "Currently out of sight."

The witching hour is a recurring scene. The witching hour begins when Night ends. The witching hour ends when the time of day is 5:00 AM.

When The witching hour begins:
    say "You feel sleep calling you.";
    now the description of the sun is "Currently out of sight.".

Day is a recurring scene. Day begins when The witching hour ends. Day ends when the time of day is 6:00 PM.

When Day begins:
    say "The sun is now properly up.";

Dusk is a recurring scene. Dusk begins when Day ends. Dusk ends when the time of day is 10:00 PM.

When Dusk begins:
    say "The sun is setting.";
    
A person is either awake or asleep. A person is usually awake.

Every turn: 
    if The witching hour is not happening:
instead of sleeping when the player is awake:
    now the player is awake; 
    say "You can't sleep now. . .";

Every turn:
    if The witching hour is happening:
instead of sleeping:
    now the player is asleep;
    say "You fall asleep. . ."; 
    
Every turn:
    if The witching hour is happening:
instead of doing something other than waking up, waiting or sleeping when the player is asleep:
    say ". . . You're sleeping.";

Every turn:
    if The witching hour is happening:
instead of sleeping when the player is asleep: 
    say "Zzzz.";

Every turn:
    if The witching hour is happening:
instead of waking up when the player is asleep: 
    now the player is awake; 
    say "You wake suddenly.";
    
Every turn:
    if The witching hour is happening:
instead of doing something other than looking or sleeping when the player is awake: 
    say "You'd really rather just sleep. . .";
 

Ответ №1:

Вы не можете помещать правила instead (или любые другие типы правил) внутри других правил. Компилятор действительно должен выдавать ошибку, но, к сожалению, этого не происходит. Что вам нужно сделать, это удалить все Every turn: строки и объединить все условия if с условиями правила instead . Например:

 Instead of sleeping when the player is awake and the witching hour is not happening:
    say "You can't sleep now. . .";

Instead of sleeping when the witching hour is happening:
    now the player is asleep;
    say "You fall asleep. . ."; 
 

и так далее для остальных правил.

Комментарии:

1. Большое вам спасибо! Я ценю это, это сразу устранило проблему! Это сводит меня с ума уже больше дня, и я не могу отблагодарить вас достаточно . , ,

2. @scuttlebug Если этот ответ помог решить вашу проблему, вам следует подумать о его принятии .