@H_301_0@function MainScene:ctor()
self.bg = display.newSprite("board.png",display.cx,display.cy)
self:addChild(self.bg) @H_301_0@ -- keypad layer,for android
self.layer = Board.new()
self:addChild(self.layer)
end
@H_301_0@display 是处理显示有关的一个“类”。
@H_301_0@newSprite则类似cocos2d-x中的CCSprite::create()
@H_301_0@注意:Lua中除用local 修饰的变量都是全局变量。我们self.bg这样定义,而不直接定义,目的是不污染全局环境,和把bg作为MainScene“类”(其实是表)的一个变量。
@H_301_0@2.定义一个Layer
@H_301_0@Board是我定义的一个层,添加在MainScene上。
@H_301_0@定义层的方法为:
@H_301_0@在Board.lua文件 中
self.bg = display.newSprite("board.png",display.cx,display.cy)
self:addChild(self.bg) @H_301_0@ -- keypad layer,for android
self.layer = Board.new()
self:addChild(self.layer)
end
local Board = class("Board",function() return display.newLayer() end)@H_301_0@return Board
self:addTouchEventListener(handler(self,self.onTouch)) self:setNodeEventEnabled(true)
function Board:onEnter() self:setTouchEnabled(true) end function Board:onExit() self:removeAllEventListeners() end
function Board:onTouch(event,x,y) //TODO 处理点击事件 end
myBoard = {{"-","-","-"},{"-","-"}} theWiner = "-1"
turn = "O" function Board:makeMove(x,y) if theWiner ~= "-1" then return end row,co = self:getBoardLocation(x,y) if row == -1 then return end self:makeEle(row,co) end function Board:makeEle(row,co) local file = "piece_o.png" if turn == "X" then file = "piece_x.png" else file = "piece_o.png" end myBoard[row][co] = turn; self.ele = display.newSprite(file,display.cx+100*(co-2),display.cy+100*(2-row)) self:addChild(self.ele) local ret = Board:winCheck(row,co) print("winCheck",ret) if ret == "O" then self.lable:setString("O is the winer") end if ret == "X" then self.lable:setString("X is the winner") end if ret == "He" then self.lable:setString("No one is the winner") end if ret == "Wh" then self.lable:setString("Continue") end if turn == "X" then turn = "O" else turn = "X" end end
function Board:getBoardLocation(x,y) if x < display.cx-150 or x >display.cx+150 then return -1 end if y > display.cy+150 or y < display.cy-150 then return -1 end local co if x <= display.cx - 50 then co = 1 elseif x > display.cx-50 and x < display.cx+50 then co = 2 else co = 3 end local row if y <= display.cy - 50 then row = 3 elseif y > display.cy-50 and y < display.cy+50 then row = 2 else row = 1 end return row,co end
function Board:winCheck(row,co) local cur = myBoard[row][co] if myBoard[1][2] == cur and myBoard[1][3] == cur and myBoard[1][1] ==cur then return cur end if myBoard[2][2] == cur and myBoard[2][3] == cur and myBoard[2][1] == cur then return cur end if myBoard[3][2] == cur and myBoard[3][3] == cur and myBoard[3][1] == cur then return cur end if myBoard[1][1] == cur and myBoard[2][1] == cur and myBoard[3][1] == cur then return cur end if myBoard[1][2] == cur and myBoard[2][2] == cur and myBoard[3][2] == cur then return cur end if myBoard[1][3] == cur and myBoard[2][3] == cur and myBoard[3][3] == cur then return cur end if myBoard[1][1] == cur and myBoard[2][2] == cur and myBoard[3][3] == cur then return cur end if myBoard[1][3] == cur and myBoard[2][2] == cur and myBoard[3][1] == cur then return cur end open = true; for i = 1,3 do for j = 1,3 do if myBoard[i][j] == "-" then open = false end end end if open then return "He" else return "Wh" end end