Carregador de mapa em texto

Eu queria fazer um sistema pra carregar mapas assim dessa forma como é mostrado nesse vídeo, algum me dá uma luz de como eu teria que fazer?
só queria entender como eu faria pro script interpretar qual tamanho que o mapa ficaria assim como interpretar o texto e transformar cada caracteres em part.

2 curtidas

Posso estar muito errado, mas acredito que não tenha como fazer isso no Roblox, porque ele está importando pacotes externos. Se você quiser fazer isso no Roblox, acho que seria uma boa separar em filas e colunas. :slight_smile:

1 curtida

Não sei se entendi muito bem, mas você poderia fazer um módulo para cada level que retorna uma string de múltiplas linhas:

return [[
=============
= $  $      =
=============
]]

Em outro script para carregar você dá require no módulo, cria um loop entre as linhas, e em cada linha você cria outro loop entre todos os caracteres daquela linha, e dai verifica se o caractere for $ você adiciona tal part em tal posição.

Ficou meio confuso pra mim oque você quer fazer exatamente. Creio ter ajudado

Complementação: Porém não creio que essa seja uma forma prática e boa de se fazer isso, você pode apenas posicionar as parts em seu mapa, agrupar elas em algum modelo ou pasta, e deixá-los no ServerStorage ou ReplicatedStorage e etc. E move-los para a workspace quando quiser carrega-los.

1 curtida

Eu pensei que talvez desse pra fazer, como esses geradores de terrenos procedual que tem em muitos videos, porém eles geram o terreno aleatorio atraves de math.noise, mas nunca vi algo parecido que leia uma string e transforme em parts
Edit:

2 curtidas

pensei em fazer isso, mas daria muito trabalho pra criar 200 mini mapas manualmente, fazendo em strings seria mais rápido rs

2 curtidas

Que tal isso aqui:

local materials = {
    ["#"] = "Brick",
    ["*"] = "Grass",
    ["$"] = "Gold"
}

local map = {
    "##########",
    "#*$***$**#",
    "#********#",
    "#*$****$*#",
    "#********#",
    "#***$****#",
    "#********#",
    "#*$***$**#",
    "#********#",
    "##########"
}

-- Ler cada caractere do mapa
for x = 1, #map do
    local currentLine = map[x]
    
    for y = 1, currentLine:len() do
        local character = currentLine:sub(y, y)
        local material = materials[character]
        
        if material then
            print(("%s em: (%s, %s)"):format(material, x, y))
        else
            print(("Material desconhecido em: (%s, %s)"):format(x, y))
        end
    end
end

image

3 curtidas

A propósito, eu já fiz um gerador de terrenos procedural com Hexágonos, postei aqui no fórum mesmo: Mapa de hexágonos com geração procedural

3 curtidas

obrigado cara, era isso mesmo

2 curtidas

Muito legal isso! Fiquei brincado de criar desenhos.

image

Eu fiz(tentei) a logo do cria jogo:
image

Aqui o script
local colors = {
	["#"] = BrickColor.Black(),
	["*"] = BrickColor.new('Bright yellow'),
	["$"] = BrickColor.White()
}

local map = {
	"##########",
	"#***##***#",
	"#*####*#*#",
	"#*######*#",
	"#*######*#",
	"#*######*#",
	"#*######*#",
	"#*######*#",
	"#***####*#",
	"##########",
}


local tamanho = 5


-- Ler cada caractere do mapa
for x = 1, #map do
	local currentLine = map[x]

	for y = 1, currentLine:len() do
		local character = currentLine:sub(y, y)
		local color = colors[character]

		if color then
			local block = Instance.new('Part', workspace)
			block.Anchored = true
			block.Size = Vector3.new(tamanho, tamanho, tamanho)
			block.Position = Vector3.new(x * tamanho, 10, y * tamanho)
			block.BrickColor = color
		else
			print(("Cor desconhecida em: (%s, %s)"):format(x, y))
		end
	end
end
2 curtidas