检查Winner Naughts and Crosses游戏 - Lua / Corona

时间:2017-10-13 02:37:55

标签: lua corona

我对Lua语言很陌生,正在尝试创建一个简单的Tic Tac Toe游戏。我很难搞清楚如何检查胜利者。我试过if-then语句,但我认为我错了。不确定检查获胜者的最佳方式是什么,所以任何建议或帮助都非常感谢。

代码是 -

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 function checkWinner()
  for i = 1,9 do
    if board[i][2] == 1 and board[i][7] == 1 then
      boxOne = "x"
    end
    if board[i][2] == 2 and board[i][7] == 1 then
      boxTwo = "x"
    end
    if board[i][2] == 3 and board[i][7] == 1 then
      boxThree = "x"
    end
    if boxOne == "x" and boxTwo == "x" and boxThree == "x" then
      display.newText("Winner", 10, 100, "Arial", 200)
    end
  end
end



end

Runtime:addEventListener ("touch", fill)



return scene

1 个答案:

答案 0 :(得分:0)

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()
   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
         display.newText("Winner", 10, 100, "Arial", 200)
         return
      elseif values == 222 then
         display.newText("Loser", 10, 100, "Arial", 200)
         return
      end
   end
end