2016-11-04 7 views
0

私はこのLua tic-tac-toeチュートリアルをCorona SDKで完成させようとしています。 私は1st partを通過することができましたが、この間に失われました2nd part "x"と "o"の交互ターンを登録するテーブル内の変数を設定しています。Lua Tic Tac Toeチュートリアル(Corona)

彼はタップカウントを使用してそれがどのターンであるかを判断しています。このテクニックを模倣するためにCoronaのtouch.idを使用しようとしましたが、無駄です。

私は、誰かがコロナを使ってこれをどのように達成できるのか説明できることを望んでいます。ここで

は、私がこれまでに(チュートリアルのパート1から)持っているものです。

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} 
    } 
-- 

--FILL COMPARTMENT W/ COLOR WHEN TOUCHED 
local function fill (event) 
    if event.phase == "began" then 
    tap = 0 

    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 

      r = d.newRect(board[t][3],board [t][6],w20,h20) 
      r:setFillColor(1,1,0) 
      r.anchorX=0 
      r.anchorY=0 
     end 
     end 
    end 
    end 

end 
Runtime:addEventListener("touch", fill) 
+0

"ありがとうございました!"取り除かれた。 –

答えて

0

私は、各ターンにボードを置くために何を把握するために、新たな変数whichTurnを使用しています。私はコードが自明だと思う。お試しください

... 

local EMPTY, X, O = 0, 1, 2 
local whichTurn = X -- X is starting game 

... 

--FILL COMPARTMENT W/ COLOR WHEN TOUCHED 
local function fill (event) 
    if event.phase == "began" 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 
      board[t][7] = whichTurn 
      --[[ 
      The operator AND returns its first argument if it is false; 
      otherwise, it returns its second argument. The operator OR 
      returns its first argument if it is not false; otherwise, it 
      returns its second argument. 
      --]] 
      whichTurn = whichTurn == X and O or X 
      end 
     end 
     end 
    end 
    end 

end 
Runtime:addEventListener("touch", fill) 

タップとタッチイベントの違いについては、Coronaで詳しく読むことができます。

チェックevent.numTapsプロパティを使用しても、このコロナからdocumentation

フィルタリングマルチタップ

は、あなたが簡単に オブジェクトを複数回タップされたかどうかを判断すると同時に、単一のタップに上 を無視することができますオブジェクト。

+0

応答のためにありがとうIdurniat。私はあなたのコードを追加しましたが、それを動作させるのに問題があります。テーブルは私の存在の狂気です。あなたの提案された読書を見直した後、私は別のルートに行くかもしれません。 –

+0

「私はそれをうまく動作させるのに苦労しています」とはどういう意味ですか?私はXsとOsを描画する責任を負いません。これはあなたの問題です。 – ldurniat

+0

私は実際にXsとOsに対して自分のコードを追加しました。私は、コード全体を私が望むように動作させることにはまだ問題があることを意味していました。私は間に合わなかった。もう一度私は助けに感謝します。 –