小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

quick cocos2d

 愛藍(lán)斯 2014-01-06

學(xué)習(xí)quick cocos2d-x 第二天 ,使用quick-x 做了一個(gè)井字棋游戲 。

我假設(shè)讀者已經(jīng) http://wiki./doku.php?id=zh_cn閱讀了這個(gè)鏈接下的內(nèi)容 ,并學(xué)會(huì)了如何搭建環(huán)境和創(chuàng)建新的工程,并假高讀者有一定cocos2d-x基礎(chǔ) 

建議讀者多研究一下quick-x自帶的例子coinflip。并閱讀framework下的lua源碼,尤其注意用lua模擬出面象對(duì)象的部分(可參考《Lua程序設(shè)計(jì)》第二版的13,16兩章)。

 

 

一。準(zhǔn)備工作:

1.如何在場(chǎng)景(層)添加一個(gè)Sprite

我們?cè)贛ainScene中添加一個(gè)Sprite 

復(fù)制代碼

function MainScene:ctor()
self.bg = display.newSprite("board.png", display.cx, display.cy)
self:addChild(self.bg)

-- keypad layer, for android
self.layer = Board.new()
self:addChild(self.layer)
end

復(fù)制代碼

display 是處理顯示有關(guān)的一個(gè)“類”。

newSprite則類似cocos2d-x中的CCSprite::create()

 

注意:Lua中除用local 修飾的變量都是全局變量。我們self.bg這樣定義,而不直接定義,目的是不污染全局環(huán)境,和把bg作為MainScene“類”(其實(shí)是表)的一個(gè)變量。

2.定義一個(gè)Layer

Board是我定義的一個(gè)層,添加在MainScene上。

定義層的方法為:

在Board.lua文件 中

local Board = class("Board", function()
    return display.newLayer()
end)

return Board

大家可以到framework下看看class是如何實(shí)現(xiàn)的。

3.如何增加touch事件

3.1在 Board:actor中增加以下代碼 

self:addTouchEventListener(handler(self, self.onTouch))
self:setNodeEventEnabled(true)

3.2 在onEnter,onExit中分別設(shè)置和移除相關(guān)事件監(jiān)聽

復(fù)制代碼
function Board:onEnter()
    self:setTouchEnabled(true)
end

function Board:onExit()
    self:removeAllEventListeners()
end
復(fù)制代碼

3.3 在Board:onTouch中處理事件

 

function Board:onTouch(event, x, y)
    //TODO 處理點(diǎn)擊事件
end

 

二。定義數(shù)據(jù) 

我使用一個(gè)2維的表來描述整個(gè)棋盤(也可以使用一維表)

myBoard = {{"-","-","-"},
            {"-","-","-"},
            {"-","-","-"}}
theWiner = "-1"

myBoard即棋盤,“-1”表示沒有棋子,“X”表示有“X”形棋子,“O”表示有“O”型棋子。

theWiner表示獲勝者,初始為-1。

 

三。程序流程

1.玩家點(diǎn)擊事件后,在相應(yīng)的位置放置棋子,并修改myBoard數(shù)據(jù)

比如簡單,直接附代碼了,寫的比較粗糙,因?yàn)?也剛學(xué)Lua才兩三天。

復(fù)制代碼
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
復(fù)制代碼
復(fù)制代碼
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
復(fù)制代碼

 

2.檢查玩家是否獲勝或平局

復(fù)制代碼
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
復(fù)制代碼

 

搞了一天,有點(diǎn)累了,寫的不詳細(xì),有問題請(qǐng)大家在評(píng)論里問吧

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多