diff --git a/demos/starfield_with_comments.lua b/demos/starfield_with_comments.lua new file mode 100644 index 0000000..5b67e74 --- /dev/null +++ b/demos/starfield_with_comments.lua @@ -0,0 +1,49 @@ +-- 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