0
votes

OK my first question was too vague so I'm going to start simple here. I am trying to get a random word from a table in another lua file (content.lua). I have gotten the code to run without errors but cannot get a word to display on the screen or via print in the command console. What am I missing?

game.lua

--lua for game


--Loading the local variables

--creates the storyboard variable and calls the storyboard api
local storyboard = require ("storyboard")

--calls the mydata.lua module 
local myData = require( "mydata" )

--calls the sfx.lua where sounds are stored 
local sfx = require( "sfx" )
--calls the operations.lua
local operations = require("operations")
local content = require("content")
local playOrder
local wordGraphic
local currQuestion = 1
local homeButton


--tells storyboard to create a new scene
local scene = storyboard.newScene()

function scene:createScene(event)

    local gameScreen = self.view

        --creates a transparent background image centered on the display
    local gameBackground = display.newImage("images/graphics/jungle1.jpg")
        gameBackground.x = display.contentWidth/2
        gameBackground.y = display.contentHeight/2
        gameScreen:insert(gameBackground)

    homeButton = display.newImage("images/buttons/home.png")
        homeButton.alpha = .8
        homeButton.y = 70
        gameScreen:insert(homeButton)

    playOrder = operations.getRandomOrder(#content)

end


local function onHomeTouch(event)
        if event.phase == "began" then
        storyboard.gotoScene("start")
        end
    end 

    function scene:enterScene(event)
    homeButton:addEventListener("touch", onHomeTouch)   
    audio.play(sfx.Bkgd)

    --uses the operations.lua to get words in a random order from the content.lua



    --shows a random word from the content.lua table
    function showWord()
    local word = content[playOrder[currQuestion]].word
    print(word)

        wordGraphic = self.view
        wordGraphic:insert(word)

    wordGraphic.x = display.contentWidth/2
    wordGraphic.y = display.contentHeight/2
    end 
end



    --next question function which clears the screen and loads a new random word


    function scene:exitScene(event)
    homeButton:removeEventListener("touch", onHomeTouch)
    end




function scene:destroyScene(event)

end


--the actual event listeners that make the functions work
scene:addEventListener("createScene", scene)
scene:addEventListener("enterScene", scene)
scene:addEventListener("exitScene", scene)
scene:addEventListener("destroyScene", scene)



return scene

Here is the operations.lua that gets the random order function

--operations.lua
module(..., package.seeall)


--function to get a random piece of data
function getRandomOrder(amount)
    local order ={}
    local i
    local temp
    local temp1
    for n = 1,amount do
        order[n] = n
    end
    for i=0,9 do
        for temp = 1,amount do
            n = math.random(1, amount)
            temp1 = order[temp]
            order[temp] = order[n]
            order[n] = temp1
        end
    end
    return order
end 

This is where the words I am attempting to display are stored. I did not include all of them.

--content.lua
return {
    {
        id = "after",
        word = "after"
    },

    {
        id = "again",
        word = "again"
    },

    {
        id = "an",
        word = "an"
    },

    {
        id = "any",
        word = "any"
    },

    {
        id = "ask",
        word = "ask"
    },

    {
        id = "as",
        word = "as"
    },

    {
        id = "by",
        word = "by"
    }
}
1
Why is content.lua in such a format? Why not return {'after', 'again', 'any', ...}? I assume getRandomOrder is something like a shuffle function. - Ryan Stein
I have based my code off a similar app. Part of my plan for the app is to call 3 words to be displayed and then play a recording of one word. The player will then tap on the word they hear and will progress to the next word if the answer is correct. - user3029068

1 Answers

0
votes

You're not calling showWord in any of the code that you've shown so far. This is probably why it isn't even printing to the console. The function is just contained within scene:enterScene and exits to the outer scope, defining itself as a global variable when enterScene is called.