Files
miniascii/demos/starfield_with_comments.lua

50 lines
1.7 KiB
Lua

-- Inicialització. Com pots vore, està fora del init. Es pràcticament el mateix, però
-- fora del init es mes guarro (pero ocupa menys caràcters, per això ho faig així en este codi)
-- Fiquem el mode 0
mode(0)
-- Açò es un array per a mantindre totes les estrelles
stars={}
-- Açò es el caràcter que representa a la estrella segons lo lluny o prop que està de la pantalla
-- Per exemple al fondo es "." i prop serà "*" o algo així, no recorde cada caracter
characters={143,143,129,144,144}
-- Aquesta funció inicialitza (o reinicialitza) la estrella "i" del array en una posició aleatòria
function init_star(i)
stars[i]={ -- Ficat que cada membre de la tabla "stars" no es mes que una tabla amb una variable x, y i z
x = 40-rnd(80),
y = 15-rnd(30),
z = rnd(5)
}
end
-- Inicialitze, 50 estrelles
for i=0,50 do init_star(i) end
-- Açò es el bucle principal
function update()
-- Borrar pantalla
cls()
-- Per a cada una de les 50 estrelles...
for i=0,50 do
-- acostem la estrella a la pantalla (z=0 en la propia pantalla, z>0 cap a dins de la pantalla)
stars[i].z = stars[i].z - 0.05
-- Transformem les coordenades 3d en 2d
local scr_x = 40 + stars[i].x / stars[i].z
local scr_y = 15 + stars[i].y / stars[i].z
-- Si la estrella està fora de la pantalla per alguna vora
-- o ja ha passat el umbral de la pantalla, se crea una nova
if scr_x<0 or scr_y<0 or scr_x>79 or scr_y>29 or stars[i].z<=0 then
init_star(i)
end
-- Pintar la estrella
print( chr(characters[flr(stars[i].z)+1]), scr_x, scr_y)
end
end