Create: Computing AgesDoc Brass
Programmes intégrés

clock

l'heure, sur un moniteur

Tourne sur Tous Tous les ordinateurs · 13 lignes
Tapez ceci à l'invite d'un ordinateur pour le copier sur le support :
Terminal
> examples clock
> edit clock

Affiche l'heure du monde Minecraft, comme 07:30, rafraîchie chaque seconde : dans le terminal, sur un moniteur qui touche l'ordinateur, et sur tout ce qu'une Liaison d'affichage de Create sait remplir. Mettez-en une dans chaque gare de votre réseau ferré.

Quoi construire

Rien n'est obligatoire : l'heure s'affiche dans le terminal. Pour la voir dans le monde :

  • posez un Moniteur cathodique ou un Moniteur LCD contre l'ordinateur : il affiche le terminal ;
  • ou pointez une Liaison d'affichage de Create sur l'ordinateur, avec pour cible un Panneau d'affichage, des Tubes Nixie ou un panneau : elle affiche les deux lignes Heure et 07:30.

Comment il marche

Brass
local t = (os.day_time() + 6000) % 24000
local h = math.floor(t / 1000)
local m = math.floor(t % 1000 * 60 / 1000)
local text = string.format("%02d:%02d", h, m)

os.day_time() donne l'heure du monde en ticks, de 0 à 23 999. Une journée Minecraft dure 24 000 ticks et commence à 0 avec le lever du soleil, soit 6 heures du matin : ajouter 6 000 et garder le reste de la division par 24 000 (%) donne les ticks depuis minuit. Une heure fait 1 000 ticks : h est le nombre de milliers entiers, et le reste, sur 1 000, donne les minutes. string.format() écrit les deux sur deux chiffres : %02d transforme 7 en 07.

Le même calcul sur quelques moments de la journée :

Brass
local function horloge(ticks)
  local t = (ticks + 6000) % 24000
  local h = math.floor(t / 1000)
  local m = math.floor(t % 1000 * 60 / 1000)
  return string.format("%02d:%02d", h, m)
end
print(horloge(0))      -- lever du soleil
print(horloge(6000))   -- midi
print(horloge(13000))  -- coucher du soleil
print(horloge(18000))  -- minuit
print(horloge(1500))
Écran
06:00
12:00
19:00
00:00
07:30
Brass
term.clear()
term.set_cursor(1, 1)
print(text)
display.set({"Heure", text})
sleep(1)

Chaque seconde, l'écran est effacé et l'heure écrite en haut à gauche (term.clear(), term.set_cursor()). display.set() confie les lignes aux Liaisons d'affichage pointées sur l'ordinateur : une chaîne par ligne. Une minute de Minecraft dure moins d'une seconde réelle (une heure dure 50 secondes) : les minutes avancent d'une ou deux à chaque rafraîchissement.

Idées

  • Affichez la partie de la journée : if t >= 6000 and t < 19000 then c'est le jour, sinon la nuit.
  • Éclairez la rue la nuit : rs.set("top", os.day_time() >= 12500 and os.day_time() < 23500), ou allez plus loin avec la recette éclairage jour et nuit.
  • De grands chiffres dessinés avec gfx sur un mur de moniteurs, à partir de l'Ordinateur à transistors : gfx.text() prend une taille.
  • Sonnez la cloche chaque matin : quand h passe à 6, envoyez une impulsion à un bloc musical.
  • Une horloge sur 12 heures pour les visiteurs anglophones : local suffixe = h < 12 and "AM" or "PM", puis affichez (h + 11) % 12 + 1.

Le programme

clock
-- Affiche l'heure du monde. Posez un moniteur contre l'ordinateur
-- pour la voir en grand, ou pointez un Display Link de Create dessus.
while true do
  local t = (os.day_time() + 6000) % 24000  -- 0 = 6 h du matin
  local h = math.floor(t / 1000)
  local m = math.floor(t % 1000 * 60 / 1000)
  local text = string.format("%02d:%02d", h, m)
  term.clear()
  term.set_cursor(1, 1)
  print(text)
  display.set({"Heure", text})
  sleep(1)
end