For those that are wondering, it would be pretty easy to just compare the position of the touch to the known bounds of the tiles.
local tiles = {} local selectedLetters = {} local validWords = {"Hello", "World"} for i = 16 do --setup your tiles tiles[i] = display...... tiles[i].letter = "A" tiles[i].selected = false end local function touch(event) if event.phase == "moved" then for i = 1, #tiles do --prevent reusing same tile if not tiles[i].selected then --check if touch is currently over a tile if event.x \> tiles[i].x - (tiles[i].width \* 0.5) and event.x \< tiles[i].x + (tiles[i].width \* 0.5) and event.y \> tiles[i].y - (tiles[i].height \* 0.5) and event.y \< tiles[i].y + (tiles[i].height \* 0.5) then print("selecting tile "..i) tiles[i].selected = true selectedLetters[#selectedLetters+1] = tiles[i].letter end end end elseif event.phase == "ended" then local success = false for i = 1, #validWords do if table.concat(selectedLetters) == validWords[i] then success = true print("success - word found") end end if not success then print("not a valid word") end selectedLetters = {} for i = 1, #tiles do tiles[i].selected = false end end end