- afegit starfield amb comentaris
This commit is contained in:
49
demos/starfield_with_comments.lua
Normal file
49
demos/starfield_with_comments.lua
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user