Create: Computing AgesDoc Brass
Référence

Couleurs

Les 16 couleurs des écrans : leurs noms, numéros, chiffres de sprite et teintes exactes.

Tous les écrans couleur ont les mêmes 16 couleurs, celles des teintures de Minecraft. Chaque couleur s'écrit de trois façons, chacune à son endroit :

  • un nom, comme "red", pour term.colors et pour dessiner avec gfx ;
  • un numéro de 0 à 15, que prennent les fonctions du terminal : term.colors.red vaut 14 ;
  • un chiffre hexadécimal, de 0 à f, un par pixel dans les sprites de gfx.image : e est le rouge.
CouleurNomEn françaisNuméroChiffre de spriteTeinte
whiteblanc00#F0F0F0
orangeorange11#F2B233
magentamagenta22#E57FD8
light_bluebleu clair33#99B2F2
yellowjaune44#DEDE6C
limevert clair55#7FCC19
pinkrose66#F2B2CC
graygris77#4C4C4C
light_graygris clair88#999999
cyancyan99#4C99B2
purpleviolet10a#B266E5
bluebleu11b#3366CC
brownmarron12c#7F664C
greenvert13d#57A64E
redrouge14e#CC4C4C
blacknoir15f#111111

Les noms s'écrivent en anglais, en minuscules, avec un tiret bas : light_blue, light_gray. Attention à l'orthographe de gray (pas grey), et un nom français comme "rouge" n'est pas reconnu. Les teintes sont les couleurs exactes qu'affichent les écrans ; le noir est un gris très sombre, la couleur d'un écran vide.

Brass
local NOMS = {"white", "orange", "magenta", "light_blue", "yellow", "lime", "pink", "gray",
  "light_gray", "cyan", "purple", "blue", "brown", "green", "red", "black"}
local SOMBRES = {[7] = true, [10] = true, [11] = true, [12] = true, [14] = true, [15] = true}
gfx.clear("black")
gfx.text(4, 6, "LES 16 COULEURS : NUMERO, CHIFFRE DE SPRITE, NOM", "white")
for n = 0, 15 do
  local x = 4 + (n % 4) * 76
  local y = 20 + (n // 4) * 38
  gfx.rect(x, y, 72, 34, n, true)
  if n == 15 then gfx.rect(x, y, 72, 34, "gray") end
  local encre = "black"
  if SOMBRES[n] then encre = "white" end
  gfx.text(x + 4, y + 4, tostring(n), encre, 2)
  gfx.text(x + 62, y + 4, string.format("%x", n), encre)
  gfx.text(x + 4, y + 24, NOMS[n + 1], encre)
end
Écran
Écran

Dans le terminal : des numéros

term.set_fg (le texte) et term.set_bg (les cases derrière) prennent un numéro. Écrivez-le avec term.colors, plus lisible que le numéro lui-même :

Brass
term.set_fg(term.colors.orange)
print("Four allumé")
term.set_fg(term.colors.white)
print(term.colors.red, term.colors.black)
Écran
Four allumé
14  15

Un nom n'y est pas accepté, pas plus qu'un numéro en dehors de 0 à 15 :

Brass
term.set_fg("red")
Écran
snippet:1: bad argument #1 to 'set_fg' (number expe
cted, got string)

term.set_fg(16) s'arrête sur bad argument #1 to 'set_fg' (color must be 0..15). Voir term.

Dans les dessins : des noms ou des numéros

Toutes les fonctions de gfx acceptent un nom ("red"), un numéro (14) ou term.colors.red : les trois désignent la même couleur. Le nom spécial "none" (ou le numéro -1) efface et laisse le pixel vide. Un nom inconnu arrête le programme avec une erreur qui donne la liste des 16 noms et de none.

gfx.get_pixel répond toujours par un numéro. Pour retrouver le nom, gardez les noms dans une liste, dans l'ordre du tableau : le nom de la couleur n est à l'indice n + 1.

Brass
local NOMS = {"white", "orange", "magenta", "light_blue", "yellow", "lime", "pink", "gray",
  "light_gray", "cyan", "purple", "blue", "brown", "green", "red", "black"}
gfx.rect(1, 1, 10, 10, "cyan", true)
print(NOMS[gfx.get_pixel(5, 5) + 1])
Écran
cyan

Dans les sprites : des chiffres hexadécimaux

gfx.image dessine une liste de chaînes, un caractère par pixel. Ce caractère est le numéro de la couleur écrit en hexadécimal : de 0 à 9, puis de a (10) à f (15), majuscules acceptées. Tout autre caractère, en général ., laisse le pixel tel qu'il est.

Brass
local sprite = {
  "0123",
  "4567",
  "89ab",
  "cdef",
}
gfx.clear("black")
gfx.rect(9, 9, 66, 66, "white")                  -- un cadre, pour voir le pixel noir
gfx.image(10, 10, sprite, 16)
gfx.rect(99, 9, 194, 14, "white")
gfx.image(100, 10, {"0123456789abcdef"}, 12)
gfx.rect(100, 40, 192, 12, "yellow", true)       -- une bande jaune sous le sprite suivant
gfx.image(100, 40, {"e.e.e.e.e.e.e.e."}, 12)
gfx.text(100, 58, "LES POINTS NE TOUCHENT PAS AU PIXEL", "white")
Écran
Écran

Les écrans sans couleurs

Tous les écrans ne montrent pas les 16 couleurs :

ÉcranCouleurs du texte et des casesDessin (gfx)
Micro-ordinateur, Microcontrôleur, Ordinateur moderneaffichéesaffiché
Ordinateur à transistors (vert), Mini-ordinateur (ambre)ignorées : chaque caractère brille dans la couleur du phosphore sur un écran sombretoutes les couleurs sauf le noir s'allument dans la couleur du phosphore ; le noir reste sombre
Calculateur à tubes (téléscripteur)ignorées : encre sombre sur papierpas de gfx
Moniteur LCD, sur n'importe quel ordinateuraffichéesaffiché
Moniteur cathodiquecomme sur l'écran de l'ordinateur (le papier du téléscripteur devient du phosphore vert)comme sur l'écran de l'ordinateur

L'ordinateur retient toujours les couleurs choisies par le programme ; seul l'écran décide de les montrer. Un Moniteur LCD posé contre un Ordinateur à transistors les affiche toutes. La même palette sur l'écran ambre d'un Mini-ordinateur :

Brass
local NOMS = {"white", "orange", "magenta", "light_blue", "yellow", "lime", "pink", "gray",
  "light_gray", "cyan", "purple", "blue", "brown", "green", "red", "black"}
local SOMBRES = {[7] = true, [10] = true, [11] = true, [12] = true, [14] = true, [15] = true}
gfx.clear("black")
gfx.text(4, 6, "LES 16 COULEURS : NUMERO, CHIFFRE DE SPRITE, NOM", "white")
for n = 0, 15 do
  local x = 4 + (n % 4) * 76
  local y = 20 + (n // 4) * 38
  gfx.rect(x, y, 72, 34, n, true)
  if n == 15 then gfx.rect(x, y, 72, 34, "gray") end
  local encre = "black"
  if SOMBRES[n] then encre = "white" end
  gfx.text(x + 4, y + 4, tostring(n), encre, 2)
  gfx.text(x + 62, y + 4, string.format("%x", n), encre)
  gfx.text(x + 4, y + 24, NOMS[n + 1], encre)
end
Écran
Écran

Sur ces écrans, seuls comptent le noir et le « pas noir » : un texte noir sur un bloc allumé disparaît, et les étiquettes blanches aussi, dessinées sur des blocs eux-mêmes allumés. Pour un programme qui leur est destiné, dessinez en noir et dans une seule autre couleur.

Choisir ses couleurs

Quelques habitudes rendent les écrans plus lisibles, dans une usine sombre comme sur un mur de moniteurs en plein soleil :

  • gardez partout le même sens à une couleur : lime ou green pour en marche et plein, yellow ou orange pour bas ou occupé, red pour arrêté, vide ou en surcharge ;
  • écrivez en sombre (black) sur les couleurs claires (white, yellow, lime, light_blue, pink...) et en blanc sur les foncées (gray, blue, purple, brown, red, black) ;
  • ne comptez pas sur la couleur seule : ajoutez un mot (OK, BAS, STOP), pour que l'écran marche encore sur un Ordinateur à transistors et pour les joueurs daltoniens.

Voir Écrans et moniteurs pour la mise en page d'un écran entier.