首页 技术 正文
技术 2022年11月17日
0 收藏 804 点赞 4,403 浏览 3095 个字

学习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两章)。

quick cocos2d-x 入门—井字棋

一。准备工作:

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文件 中

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

return Board

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

3.如何增加touch事件

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

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

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

function Board:onEnter()
self:setTouchEnabled(true)
endfunction Board:onExit()
self:removeAllEventListeners()
end

3.3 在Board:onTouch中处理事件

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

二。定义数据 

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

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

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

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

三。程序流程

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

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

turn = "O"
function Board:makeMove(x,y)
if theWiner ~= "-1" then
return
end
row,co = self:getBoardLocation(x,y)
if row == - 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+*(co-) , display.cy+*(-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- or x >display.cx+ then
return -
end
if y > display.cy+ or y < display.cy- then
return -
end local co
if x <= display.cx - then
co =
elseif x > display.cx- and x < display.cx+ then
co =
else
co =
end local row
if y <= display.cy - then
row =
elseif y > display.cy- and y < display.cy+ then
row =
else
row =
end return row,coend

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

function Board:winCheck(row,co)
local cur = myBoard[row][co] if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] ==cur then
return cur
end if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end
if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end
if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end if myBoard[][] == cur and myBoard[][] == cur and myBoard[][] == cur then
return cur
end open = true;
for i = , do
for j = , do
if myBoard[i][j] == "-" then
open = false
end
end
end if open then
return "He"
else
return "Wh"
end
end

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,492
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,495
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,133
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,297