Create: Computing AgesDoc Brass
Programmes intégrés

shapes

dessine une scène avec gfx

Tourne sur Transistors+ Ordinateur à transistors et suivants · 50 lignes
Tapez ceci à l'invite d'un ordinateur pour le copier sur le support :
Terminal
> examples shapes
> edit shapes
Écran
shapes

Le programme

shapes
-- Dessiner avec gfx : chaque forme de la scène montre une fonction.
-- Les coordonnées sont des pixels, (1, 1) en haut à gauche ; une couleur
-- est un nom ("red") ou un nombre de 0 à 15 (term.colors.red).
local size = gfx.size()
local W = size.w
local H = size.h
term.set_bg(term.colors.black)
term.clear()
gfx.clear("light_blue")  -- le ciel
gfx.circle(W - 30, 28, 12, "yellow", true)  -- le soleil : un disque
for i = 0, 7 do
  -- ses rayons : des lignes de 2 pixels
  local a = i * math.pi / 4
  gfx.line(W - 30 + math.cos(a) * 16, 28 + math.sin(a) * 16,
    W - 30 + math.cos(a) * 22, 28 + math.sin(a) * 22, "yellow", 2)
end
gfx.rect(1, H - 40, W, 41, "green", true)  -- l'herbe : un rectangle plein
gfx.rect(40, H - 90, 70, 55, "white", true)  -- la maison
gfx.rect(40, H - 90, 70, 55, "gray")  -- son contour : sans remplissage
gfx.triangle(32, H - 90, 75, H - 122, 118, H - 90, "red", true)  -- le toit
gfx.rect(68, H - 60, 16, 25, "brown", true)  -- la porte
gfx.rect(48, H - 80, 14, 12, "light_blue", true)  -- deux fenêtres
gfx.rect(90, H - 80, 14, 12, "light_blue", true)
gfx.rect(150, H - 70, 8, 35, "brown", true)  -- un arbre
gfx.circle(154, H - 80, 18, "lime", true)
gfx.circle(154, H - 80, 18, "green", 2)  -- une bordure de 2 pixels
-- un sprite : une couleur hexa par pixel ("." est vide), dessiné deux fois plus grand
local steve = {
  "cccccccc",
  "c666666c",
  "60f66f06",
  "666cc666",
  "99999999",
  "69999996",
  ".bbbbbb.",
  ".bb..bb.",
}
gfx.image(200, H - 56, steve, 2)
gfx.text(8, 8, "HELLO GFX!", "white", 2)  -- du texte en pixels, deux fois plus grand
term.set_cursor(1, term.get_size().h)
term.write("Clic : pot de peinture. Une touche : fin")
while true do
  local e = os.pull_event()
  if e.name == "click" then
    -- e.px, e.py : le pixel cliqué
    gfx.fill(e.px, e.py, "orange")
  elseif e.name == "key" or e.name == "char" then
    break
  end
end