2017-10-13 7 views
0

Je suis assez nouveau à la langue Lua et j'essaie de créer un jeu simple Tic Tac Toe. J'ai des difficultés à trouver comment vérifier le gagnant. J'ai essayé les affirmations if-then mais je pense que je les utilise mal. Je ne sais pas quelle est la meilleure façon de vérifier le gagnant est donc toute suggestion ou assistance est grandement appréciée.Chèque Winner Naughts and Crosses jeu - Lua/Corona

Le code est -

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 

Répondre

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

S'il vous plaît fournir le contexte de votre réponse. Juste donner le code n'aide pas le PO à long terme :) –

+0

@RoelStrolenberg - Mon code doit être considéré dans le contexte du code OP (mon code est en fait une fonction 'checkWinner' qui dépend des objets définis dans les OP code). Je suis d'accord que mon code sans le contexte n'a aucune valeur. –

+0

Bonjour @EgorSkriptunoff merci pour la réponse. Je l'ai inclus dans le code et je ne dois pas faire quelque chose de bien car cela ne semble pas fonctionner. Cela ne semble pas fonctionner du tout. Y at-il quelque chose que je suis censé inclure pour faire appel à une fonction car je n'ai pas été capable de trouver quelque chose qui me dit comment? – Katie