Game of life/Jeu de la vie simulation

#1

Ceci n’a pas de vrai but, autre que vous montrer que l’on peut se divertir avec lua, ou les maths.

La plupart d’entre nous connais les mathématiques de façon scolaire, et plutôt ennuyante. Cependant, il m’arrive d’être sur ROBLOX Studio, et de crée des algorithmes pour tout et rien (des fois même pour faire mes devoirs).

Aujourd’hui j’ai vu une vidéo de la chaine 'Science Étonnante sur Youtube: Le jeu de la vie

J’ai donc décider d’en faire un algorithme sur ROBLOX, un peu plus poussé (initialement, avec les mécaniques les plus simples il faisait environ 25 lignes, j’ai décider de faire quelque autres conditions, et actions).

Voici le code à mettre dans un Script dans Workspace, si vous souhaitez essayer:

local mapSize = 20; 


--change pas en dessous appart si tu sais ce que tu fais.

local generations = 0;
function get_creature(part)
	local creature = {};
	local cell = part;
	repeat
		local t = cell:GetTouchingParts();
		table.insert(creature, t[math.random(1,#t)]);
	until #creature>math.random(4,10)
	return creature
end

function generate_grid(size)
    local p = Instance.new('Part', workspace); 
	p.Anchored = true; 
	p.Size = Vector3.new(5.004,5,5.004)
	p.TopSurface = 'SmoothNoOutlines'
    p.Parent = nil;
	local d = 0;
    for x = 1, size do
        for z = 1, size do
            local new = p:Clone(); 
            new.Parent = workspace;
            new.Name = 'Part';
            new.Position = Vector3.new(5*x, 0.001, 5*z);
			d=d+1
			if d%math.floor(size/3)==0 then
				local c = get_creature(new);
				for i,v in pairs(c) do
					v.BrickColor = BrickColor.new('Really black');
				end
			end
        end
    end
end

function getNearby(part,c)
    local n = {}; 
	for i,v in pairs(part:GetTouchingParts()) do
		if v.BrickColor==BrickColor.new('Really black') then
			table.insert(n,v)
		end
	end
    return n; 
end

generate_grid(mapSize)
while true do 
	generations = generations +1;
	local alive_cells = 0;
    for i,v in pairs(workspace:GetChildren()) do
        if v.Name=='Part' then 
            local f = getNearby(v,alive_cells); 
            if #f>4 or #f<3 then 
                v.BrickColor = BrickColor.new('Mid gray');	
            elseif (generations%2==0 and #f==4) or (generations%2>0) then
	            v.BrickColor = BrickColor.new('Really black')
				alive_cells=alive_cells+1;
				if alive_cells<4 then
					for i,v in pairs(get_creature(v)) do
						v.BrickColor = BrickColor.new('Really black');
						alive_cells = alive_cells+1
					end
				end
            end
        end
    end
	print('cellules vivantes: '..alive_cells, 'Generation: '..generations);
	wait(1/200)
end

Je vous recommande également d’ouvrir l’output afin d’avoir ceci:
image

4 Likes