[Inform 7] Un problème incompréhensible avec les heures

Voilà ce qui est affiché dans mon jeu :

Les cloches sonnent 12:00 AM, à … minuit ???

Voici mon code :

At 12:00 AM : if player is in DansVille1, say "Les cloches sonnent 12:00 AM.".

Nulle part ailleurs dans mon code, je n’ai la phrase « Les cloches sonnent 12:00 AM »

Le problème vient donc forcément de là … mais je ne comprends pas !!!

A noter que même en changeant légèrement le truc :

At 10:59 am: say "Les cloches sonnent onze heures du matin.". At 11:59 am: say "Les cloches sonnent midi.". At 12:59 am: say "Les cloches sonnent treize heures.".

ça donne la même chose :

C’est normal : c’est bien comme cela que fonctionne le système d’heures avec AM et PM qu’utilisent les Anglais et Américains (voir cette page de Wikipédia, par exemple). Les heures « AM » sont avant midi (minuit inclus) et les heures « PM » après midi (midi inclus), ce qui fait qu’on passe :

  • de 11 h du matin (11h AM) à midi (12h PM) puis 13 h (1h PM), etc.
  • de 23 h (11h PM) à minuit (12h AM) puis 1 h du matin (1h AM), etc.

merci … j’ai le cerveau qui me coule par les oreilles et je ne suis pas sûr de tout saisir entièrement, là, mais tu dois être dans le vrai …

sinon, quelqu’un a une méthode pour gérer le passage des jours, dans le jeu ?

histoire de pouvoir indiquer au joueur " jour 1 , jour 2 , jour 3 " , etc

et prévoir des événements dans le temps, à plusieurs jours de distance, aussi …

Un exemple possible, à adapter à ton cas :

[code]DeuxiemeJour is a scene. DeuxiemeJour begins when PremierJour ends.

TroisiemeJour is a scene. TroisiemeJour begins when DeuxiemeJour ends.

QuatriemeJour is a scene. QuatriemeJour begins when TroisiemeJour ends.

CinquiemeJour is a scene. CinquiemeJour begins when QuatriemeJour ends.
CinquiemeJour ends when journee ends.

etc.

Ending the day is a rulebook.

Ending the day rule:
now the player is not asleep;[par exemple]
if today is 5
begin;
[ta règle spéciale pour ce jour si besoin]
end if;
etc.

When PremierJour ends:
now today is 2;
follow the ending the day rules.

etc.[/code]

Merci pour cette idée de " scènes ".

Par contre dans ce code tu ne précises pas ce qui détermine le passage d’un jour à l’autre, or c’est tout mon problème. Il faut bien qu’il y ait une sorte de " sablier " au bout duquel le changement s’opère (que ce soit de " scènes " , ou juste d’un changement de variable du genre Day1, Day2, d’ailleurs)

A priori je pars donc là dessus

[code]PremierJour is a scene. PremierJour begins when play begins.
When PremierJour begins : now Today is 1.

Every turn during PremierJour, say « Premier jour. ».

PremierJour ends when Today is 1 for more than 1140 turns.

DeuxiemeJour is a scene. DeuxiemeJour begins when PremierJour ends.
When DeuxiemeJour begins : now Today is 2.

Every turn during DeuxiemeJour, say « Deuxieme jour. ».[/code]

Mais là, problème : en stipulant que c’est le nombre de tours qui détermine le passage du temps (si l’on admet qu’un tour égale une minute), on fausse le truc qui le joueur décidé de taper 8 fois " attendre trois heures ". On aura 4 tours, pour 24 heures d’attente, et le basculement d’un jour à l’autre ne se fera pas.

Certes, il est possible de décréter que

Carry out waiting for three hours: increase turn count by 180.

… mais s’il décide d’attendre 42 minutes, puis 56, puis 12, puis 8 ?

Il faudrait une formule du genre

Si ce n’est que celle-ci ne fonctionne pas. Tu aurais une idée de la formule qui marcherait ? J’avoue n’avoir pas l’esprit assez mathématique pour ça …

je ne vois pas trop, à part établir un comptage de tours parallèle (nommé, je sais pas, tics ou moments), que tu peux calquer sur des minutes, des heures ou des secondes pour plus de précision, tu décrètes par exemple que tous les tours ça fait 30 moments, toutes les heures ça fait 3600 moments, si le joueur attend 2 heures ça fera 7200 moments etc

c’est ce que j’ai fait, oui …

en allant jusqu’à 30 jours de jeu … ça laisse de la marge :smiley: