2017-10-13 69 views
0

我對Lua語言非常陌生,並且正在嘗試創建一個簡單的Tic Tac Toe遊戲。我很難搞清楚如何檢查贏家。我曾嘗試過if-then語句,但我認爲我錯誤地使用了它們。不知道檢查贏家的最佳方式是如何提供任何建議或幫助,非常感謝。檢查優勝者Naughts and Crosses遊戲 - Lua/Corona

的代碼 -

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 

回答

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 
+0

請給你的答案提供上下文。長期來看,只給代碼對OP沒有任何幫助:) –

+0

@RoelStrolenberg - 我的代碼應該在OP代碼的上下文中考慮(我的代碼實際上是一個函數checkWinner,它依賴於OP中定義的對象碼)。我同意我的代碼沒有上下文沒有任何價值。 –

+0

嗨@EgorSkriptunoff謝謝你的回覆。我已經將它包含在代碼中,並且不能做正確的事情,因爲它似乎沒有工作。它似乎根本不運行該功能。有什麼我應該包括讓調用一個函數,因爲我一直無法找到任何告訴我如何? – Katie