quick cocos2d-x 入门---井字棋

前端之家收集整理的这篇文章主要介绍了quick cocos2d-x 入门---井字棋前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
学习quick cocos2d-x 第二天 ,使用quick-x 做了一个井字棋游戏 。

我假设读者已经http://wiki.quick-x.com/doku.PHP?id=zh_cn阅读了这个链接下的内容 ,并学会了如何搭建环境和创建新的工程,并假高读者有一定cocos2d-x基础

建议读者多研究一下quick-x自带的例子coinflip。并阅读framework下的lua源码,尤其注意用lua模拟出面象对象的部分(可参考《Lua程序设计》第二版的13,16两章)。

一。准备工作:

1.如何在场景(层)添加一个Sprite

我们在MainScene中添加一个Sprite

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

display 是处理显示有关的一个“类”。

newSprite则类似cocos2d-x中的CCSprite::create()

注意:Lua中除用local 修饰的变量都是全局变量。我们self.bg这样定义,而不直接定义,目的是不污染全局环境,和把bg作为MainScene“类”(其实是表)的一个变量。

2.定义一个Layer

Board是我定义的一个层,添加在MainScene上。

定义层的方法为:

在Board.lua文件

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

return Board

大家可以到framework下看看class是如何实现的。

3.如何增加touch事件

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

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

3.2 在onEnter,onExit中分别设置和移除相关事件监听

  1. function Board:onEnter()
  2. self:setTouchEnabled(true)
  3. end
  4.  
  5. function Board:onExit()
  6. self:removeAllEventListeners()
  7. end

3.3 在Board:onTouch中处理事件

  1. function Board:onTouch(event,x,y)
  2. //TODO 处理点击事件
  3. end

二。定义数据

我使用一个2维的表来描述整个棋盘(也可以使用一维表)

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

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

theWiner表示获胜者,初始为-1。

三。程序流程

1.玩家点击事件后,在相应的位置放置棋子,并修改myBoard数据

比如简单,直接附代码了,写的比较粗糙,因为 也刚学Lua才两三天。

  1. turn = "O"
  2. function Board:makeMove(x,y)
  3. if theWiner ~= "-1" then
  4. return
  5. end
  6. row,co = self:getBoardLocation(x,y)
  7. if row == -1 then
  8. return
  9. end
  10. self:makeEle(row,co)
  11. end
  12. function Board:makeEle(row,co)
  13. local file = "piece_o.png"
  14. if turn == "X" then
  15. file = "piece_x.png"
  16. else
  17. file = "piece_o.png"
  18. end
  19. myBoard[row][co] = turn;
  20. self.ele = display.newSprite(file,display.cx+100*(co-2),display.cy+100*(2-row))
  21. self:addChild(self.ele)
  22. local ret = Board:winCheck(row,co)
  23. print("winCheck",ret)
  24. if ret == "O" then
  25. self.lable:setString("O is the winer")
  26. end
  27. if ret == "X" then
  28. self.lable:setString("X is the winner")
  29. end
  30. if ret == "He" then
  31. self.lable:setString("No one is the winner")
  32. end
  33. if ret == "Wh" then
  34. self.lable:setString("Continue")
  35. end
  36. if turn == "X" then
  37. turn = "O"
  38. else
  39. turn = "X"
  40. end
  41. end
  1. function Board:getBoardLocation(x,y)
  2. if x < display.cx-150 or x >display.cx+150 then
  3. return -1
  4. end
  5. if y > display.cy+150 or y < display.cy-150 then
  6. return -1
  7. end
  8. local co
  9. if x <= display.cx - 50 then
  10. co = 1
  11. elseif x > display.cx-50 and x < display.cx+50 then
  12. co = 2
  13. else
  14. co = 3
  15. end
  16. local row
  17. if y <= display.cy - 50 then
  18. row = 3
  19. elseif y > display.cy-50 and y < display.cy+50 then
  20. row = 2
  21. else
  22. row = 1
  23. end
  24.  
  25. return row,co
  26. end

2.检查玩家是否获胜或平局

  1. function Board:winCheck(row,co)
  2. local cur = myBoard[row][co]
  3. if myBoard[1][2] == cur and myBoard[1][3] == cur and myBoard[1][1] ==cur then
  4. return cur
  5. end
  6. if myBoard[2][2] == cur and myBoard[2][3] == cur and myBoard[2][1] == cur then
  7. return cur
  8. end
  9.  
  10. if myBoard[3][2] == cur and myBoard[3][3] == cur and myBoard[3][1] == cur then
  11. return cur
  12. end
  13.  
  14. if myBoard[1][1] == cur and myBoard[2][1] == cur and myBoard[3][1] == cur then
  15. return cur
  16. end
  17. if myBoard[1][2] == cur and myBoard[2][2] == cur and myBoard[3][2] == cur then
  18. return cur
  19. end
  20. if myBoard[1][3] == cur and myBoard[2][3] == cur and myBoard[3][3] == cur then
  21. return cur
  22. end
  23.  
  24. if myBoard[1][1] == cur and myBoard[2][2] == cur and myBoard[3][3] == cur then
  25. return cur
  26. end
  27.  
  28. if myBoard[1][3] == cur and myBoard[2][2] == cur and myBoard[3][1] == cur then
  29. return cur
  30. end
  31. open = true;
  32. for i = 1,3 do
  33. for j = 1,3 do
  34. if myBoard[i][j] == "-" then
  35. open = false
  36. end
  37. end
  38. end
  39. if open then
  40. return "He"
  41. else
  42. return "Wh"
  43. end
  44. end

搞了一天,有点累了,写的不详细,有问题请大家在评论里问吧

猜你在找的Cocos2d-x相关文章