事件听众 - Nil - Lua

时间:2017-11-03 02:58:02

标签: lua corona event-listener

我对Lua很新,我已经创建了下面的代码来处理Naughts and Crosses游戏的游戏。它目前为checkWinner监听器提出一个错误,说该值为零,所以我怀疑我已经错误地设置了它。如果有人可以建议可能的解决方案,我会非常感激。

local composer = require( "composer" )

local scene = composer.newScene()

d = display
w20 = d.contentWidth * .2
h20 = d.contentHeight * .2
w40 = d.contentWidth * .4
h40 = d.contentHeight * .4
w60 = d.contentWidth * .6
h60 = d.contentHeight * .6
w80 = d.contentWidth * .8
h80 = d.contentHeight * .8

----DRAW LINES FOR BOARD
local lline = d.newLine(w40,h20,w40,h80 )
lline.strokeWidth = 5

local rline = d.newLine(w60,h20,w60,h80 )
rline.strokeWidth = 5

local bline = d.newLine(w20,h40,w80,h40 )
bline.strokeWidth = 5

local tline = d.newLine(w20,h60,w80,h60 )
tline.strokeWidth = 5


--PLACE BOARD COMPARTMENT DIMENSIONS IN TABLE
board ={
{"tl",1,w20,h40,w40,h20,0},
{"tm",2,w40,h40,w60,h20,0},
{"tr",3,w60,h40,w80,h20,0},
{"ml",4,w20,h60,w40,h40,0},
{"mm",5,w40,h60,w60,h40,0},
{"mr",6,w60,h60,w80,h40,0},
{"bl",7,w20,h80,w40,h60,0},
{"bm",8,w40,h80,w60,h60,0},
{"br",9,w60,h80,w80,h60,0}
}
--

local EMPTY, X, O = 0, 1, 2
local whichTurn = 0



--FILL COMPARTMENT W/ COLOUR WHEN TOUCHED
local function fill(event)
if (event.phase == "ended") then
    for t = 1,9 do
        if event.x > board[t][3] and event.x < board[t][5] then
            if event.y < board[t][4] and event.y > board[t][6] then 
             if board[t][7] == EMPTY then
              if whichTurn == 1 then
                whichTurn = 2
              else
                whichTurn = 1
              end
                board[t][7] = whichTurn
                 if board[t][7] == 1 then
           local xText = display.newText("X", board[t][3], board[t][4], "Arial", 80)
           xText.anchorX = 0
           xText.anchorY = 100
                 elseif board[t][7] == 2 then 
                   local oText = display.newText("O", board[t][3], board[t][4], "Arial", 80)
                   oText.anchorX = 0
                   oText.anchorY = 100
                 end
             end
          end
        end
    end
end

local All_Lines = {{1,5,9}, {3,5,7}, {1,2,3}, {4,5,6}, {7,8,9}, {1,4,7}, {2,5,8}, {3,6,9}}

local function checkWinner(event)
if (event.phase == "ended") then
   for _, Line in ipairs(All_Lines) do
      local values = 0
      for _, idx in ipairs(Line) do
         values = values * 10 + board[idx][7]
      end
      if values == 111 then
         composer.gotoScene("playerOneWinner")
         return
      elseif values == 222 then
         composer.gotoScene("playerTwoWinner")
         return
      end
   end
end
end
end



Runtime:addEventListener ("touch", fill)
Runtime:addEventListener( "touch", checkWinner )

return scene

感谢您提供的任何帮助。

0 个答案:

没有答案