Roblox Letters on GUI System

Why is the ‘initializeClickDetectors()’ on the last line of code red, and thus making the script not work.

Non-working Version


local vowels = {
	{letter = "A", probability = 0.3},
	{letter = "E", probability = 0.3},
	{letter = "I", probability = 0.1},
	{letter = "O", probability = 0.2},
	{letter = "U", probability = 0.1}
}

local consonants = {
	{letter = "B", probability = 0.05},
	{letter = "C", probability = 0.1},
	{letter = "D", probability = 0.15},
	{letter = "F", probability = 0.05},
	{letter = "G", probability = 0.05},
	{letter = "H", probability = 0.05},
	{letter = "J", probability = 0.02},
	{letter = "K", probability = 0.02},
	{letter = "L", probability = 0.1},
	{letter = "M", probability = 0.05},
	{letter = "N", probability = 0.15},
	{letter = "P", probability = 0.05},
	{letter = "Q", probability = 0.01},
	{letter = "R", probability = 0.15},
	{letter = "S", probability = 0.05},
	{letter = "T", probability = 0.1},
	{letter = "V", probability = 0.02},
	{letter = "W", probability = 0.02},
	{letter = "X", probability = 0.01},
	{letter = "Y", probability = 0.05},
	{letter = "Z", probability = 0.01}
}

-- Calculate total probabilities for vowels and consonants
local function calculateTotalProbability(data)
	local total = 0
	for _, entry in ipairs(data) do
		total = total + entry.probability
	end
	return total
end

local totalVowelProbability = calculateTotalProbability(vowels)
local totalConsonantProbability = calculateTotalProbability(consonants)

-- Function to get a random letter 
local function getRandomLetter(letterType)
	local data
	local totalProbability

	if letterType == "vowel" then
		data = vowels
		totalProbability = totalVowelProbability
	else
		data = consonants
		totalProbability = totalConsonantProbability
	end

	local cumulativeProbability = 0
	local randomValue = math.random()

	for _, entry in ipairs(data) do
		cumulativeProbability = cumulativeProbability + (entry.probability / totalProbability)
		if randomValue <= cumulativeProbability then
			return entry.letter
		end
	end
end

-- Slots in the workspace
local slots = {}
for i = 1, 9 do
	local slot = game.Workspace:FindFirstChild("Slot" .. i)
	if slot then
		table.insert(slots, slot)
	end
end

-- Function to set a letter in an available slot
local function setLetterInSlot(letter)
	for _, slot in ipairs(slots) do
		local surfaceGui = slot:FindFirstChildWhichIsA("SurfaceGui")
		if surfaceGui then
			local textLabel = surfaceGui:FindFirstChild("TextLabel")
			-- Check if the TextLabel is empty
			if textLabel and textLabel.Text == "" then
				textLabel.Text = letter
				return
			end
		end
	end
end

-- Function to clear all slots
local function clearBoard()
	for _, slot in ipairs(slots) do
		local surfaceGui = slot:FindFirstChildWhichIsA("SurfaceGui")
		if surfaceGui then
			local textLabel = surfaceGui:FindFirstChild("TextLabel")
			if textLabel then
				textLabel.Text = ""
			end
		end
	end
end

-- Event handler for clicking the vowel block
local function onVowelBlockClick()
	local letter = getRandomLetter("vowel")
	setLetterInSlot(letter)
	}

	-- Event handler for clicking the consonant block
local function onConsonantBlockClick()
	local letter = getRandomLetter("consonant")
	setLetterInSlot(letter)
	}

	-- Initialize click detectors
local function initializeClickDetectors()
	-- Find the blocks in the workspace
	local vowelBlock = game.Workspace:FindFirstChild("VowelBlock")
	local consonantBlock = game.Workspace:FindFirstChild("ConsonantBlock")
	local clearBlock = game.Workspace:FindFirstChild("ClearBlock")

	-- Initialize click detector for the vowel block
	if vowelBlock then
		local clickDetector = vowelBlock:FindFirstChild("ClickDetector")
		if clickDetector then
			clickDetector.MouseClick:Connect(onVowelBlockClick)
		end
	end

	-- Initialize click detector for the consonant block
	if consonantBlock then
		local clickDetector = consonantBlock:FindFirstChild("ClickDetector")
		if clickDetector then
			clickDetector.MouseClick:Connect(onConsonantBlockClick)
		end
	end

	-- Initialize click detector for the ClearBlock
	if clearBlock then
		local clickDetector = clearBlock:FindFirstChild("ClickDetector")
		if clickDetector then
			clickDetector.MouseClick:Connect(clearBoard)
		end
	end
end

-- Invoke function to initialize click detectors
initializeClickDetectors()

Version that works, but without the function to clear the text values on the surfacegui

-- Define arrays of vowels and consonants with their probabilities
local vowels = {
    {letter = "A", probability = 0.3},
    {letter = "E", probability = 0.3},
    {letter = "I", probability = 0.1},
    {letter = "O", probability = 0.2},
    {letter = "U", probability = 0.1}
}

local consonants = {
    {letter = "B", probability = 0.05},
    {letter = "C", probability = 0.1},
    {letter = "D", probability = 0.15},
    {letter = "F", probability = 0.05},
    {letter = "G", probability = 0.05},
    {letter = "H", probability = 0.05},
    {letter = "J", probability = 0.02},
    {letter = "K", probability = 0.02},
    {letter = "L", probability = 0.1},
    {letter = "M", probability = 0.05},
    {letter = "N", probability = 0.15},
    {letter = "P", probability = 0.05},
    {letter = "Q", probability = 0.01},
    {letter = "R", probability = 0.15},
    {letter = "S", probability = 0.05},
    {letter = "T", probability = 0.1},
    {letter = "V", probability = 0.02},
    {letter = "W", probability = 0.02},
    {letter = "X", probability = 0.01},
    {letter = "Y", probability = 0.05},
    {letter = "Z", probability = 0.01}
}

-- Calculate total probability for vowels and consonants
local function calculateTotalProbability(data)
    local totalProbability = 0
    for _, entry in ipairs(data) do
        totalProbability = totalProbability + entry.probability
    end
    return totalProbability
end

local totalVowelProbability = calculateTotalProbability(vowels)
local totalConsonantProbability = calculateTotalProbability(consonants)

-- Get a random letter based on the specified type and probability
local function getRandomLetter(letterType)
    local randomValue = math.random()

    if letterType == "vowel" then
        local cumulativeProbability = 0
        for _, entry in ipairs(vowels) do
            cumulativeProbability = cumulativeProbability + (entry.probability / totalVowelProbability)
            if randomValue <= cumulativeProbability then
                return entry.letter
            end
        end
    elseif letterType == "consonant" then
        local cumulativeProbability = 0
        for _, entry in ipairs(consonants) do
            cumulativeProbability = cumulativeProbability + (entry.probability / totalConsonantProbability)
            if randomValue <= cumulativeProbability then
                return entry.letter
            end
        end
    end
end

-- Define slots in the workspace
local slots = {}
for i = 1, 9 do
    local slot = game.Workspace:FindFirstChild("Slot" .. i)
    if slot then
        table.insert(slots, slot)
    end
end

-- Function to set a letter in an available slot
local function setLetterInSlot(letter)
    for _, slot in ipairs(slots) do
        local surfaceGui = slot:FindFirstChildWhichIsA("SurfaceGui")
        if surfaceGui then
            local textLabel = surfaceGui:FindFirstChild("TextLabel")
            if textLabel and textLabel.Text == "" then
                textLabel.Text = letter
                return
            end
        end
    end
end

-- Event handler for vowel block click
local function onVowelBlockClick()
    local letter = getRandomLetter("vowel")
    setLetterInSlot(letter)
end

-- Event handler for consonant block click
local function onConsonantBlockClick()
    local letter = getRandomLetter("consonant")
    setLetterInSlot(letter)
end

-- Set up click detectors for vowel and consonant blocks
local function initializeClickDetectors()
    local vowelBlock = game.Workspace:FindFirstChild("VowelBlock")
    local consonantBlock = game.Workspace:FindFirstChild("ConsonantBlock")

    if vowelBlock then
        local vowelClickDetector = vowelBlock:FindFirstChild("ClickDetector")
        if vowelClickDetector then
            vowelClickDetector.MouseClick:Connect(onVowelBlockClick)
        end
    end

    if consonantBlock then
        local consonantClickDetector = consonantBlock:FindFirstChild("ClickDetector")
        if consonantClickDetector then
            consonantClickDetector.MouseClick:Connect(onConsonantBlockClick)
        end
    end
end

-- Initialize click detectors
initializeClickDetectors()
1 Like

Don’t forget to put end when you’re done with the function.

1 Like