quick-cocos2d-x 学习系列之二样例2048游戏学习

前端之家收集整理的这篇文章主要介绍了quick-cocos2d-x 学习系列之二样例2048游戏学习前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

quick-cocos2d-x 学习系列之二样例2048游戏学习

最近蛤蟆会来看下quick中提供的几个SAMPLE例子,例子不多那咱们就一一过一下呗。先从2048这个游戏开始吧。

该游戏不介绍了,没听过的就去小黑屋哭泣吧~

源码路径 ..\quick-3.3\quick\samples\2048

1.文件介绍

1.1res文件

这个是资源文件夹,里面就放了2个图片GreenButton.png,GreenScale9Block.png。

1.2src文件

这个是LUA代码文件夹了,所有逻辑都在此中。也是蛤蟆要重点照顾的文件夹。

2.代码执行逻辑

2.1Main.lua

这个LUA文件是程序的入口函数

然后文件调用appentry函数,代码如下

require("appentry")

这个,其实可以理解成C语言中的

#include <appentry>

2.2appentry

appentry文件,包含logic和game文件,然后调用game文件的startup函数如下:

require("logic")

require("game")

game.startup()

2.3game

game文件中有一个startup函数

函数设置了一个资源路径。然后进入game文件中的另一个函数enterMainScene

enterMainScene函数通过scenes文件夹中的MainScene文件创建了一个新的场景,显示场景后完毕退出game文件。之后程序就进入到了游戏主体函数中了。

2.4MainScene.lua文件

我们来看下这个MainScene.lua主要文件。创建场景后先运行函数

2.4.1function MainScene:ctor()

函数先给游戏增加一个颜色,如下图

display.newColorLayer(cc.c4b(0xfa,0xf8,0xef,255)):addTo(self)

然后调用function initGrid(m,n)

显示一个网格,该函数在logic.lua文件中,具体如下

function initGrid(m,n)

local grid = {}

for i=1,m do

if not grid[i] then

grid[i] = {}

end

for j=1,n do

grid[i][j] = 0

end

end

randomNum(grid)

randomNum(grid)

return grid

end

输入参数为m,n。创建一个mxn的矩阵。

最后返回一个矩阵,矩阵会随机生成2个随机数2或者4

90%的概率是2,10%的概率是4.,其他都为0。

接着增加游戏标题

self:createLabel("2048")

createLabel函数在该文件中实现。

增加了游戏标题和游戏得分。

增加网格显示

通过如下函数来实现网格显示

self:createGridShow()

将矩阵数字显示在屏幕上。

函数将数字转变为字符然后显示

如果为0就不显示了。

数字的大小为40,每个数字底部的宽度为140。

:该函数调用了show函数,该函数的输入参数是一个CELL结构体和 矩阵坐标)

增加按钮

self:createButtons()

增加一个new Game按钮,按下后调用restartGame函数

加载状态

判断文件hxgame.config是否存在,如果存在则读取文件

文件在蛤蟆现在这一时刻的内容如下:

do localgrid,bestscore,totalscore,WINSTR,isOver

={[1]={[1]=0,[2]=0,[3]=0,[4]=2},[2]={[1]=0,[3]=2,[4]=0},[3]={[1]=0,[4]={[1]=0,[4]=0}},356,'',falsereturn grid,isOver end

然后调用函数reLoadGame

这个函数将历史最好分数和当前分数显示在屏幕上。

失败后重启游戏

通过全局变量isOver来控制游戏是否结束

结束则调用函数restartGame.

不过当前游戏并不会自动根据状态来判断游戏是否OVER,只是在点击new game按钮的时候才能重启。

重启游戏函数中,重新创建一个4X4矩阵,同时将一些全局变量保存到hxgame.config 文件中。

2.4.2function MainScene:onEnter()

函数会在调用完毕MainScene:ctor()后调用,MainScene:ctor()函数类似对象类编程的构造函数

onEnter()函数会设置一个TOUCH监听。其他基本没有了。

当有触摸时候调用函数onTouch

2.4.3function MainScene:onTouch(event,x,y)

onTouch函数,根据触摸情况调用logic文件中的上下左右逻辑。然后调用logic文件中的函数touch_op ,该函数实现前一次矩阵临时保存,然后调用相应上下左右并得到当前分数。然后通过函数getOpList返回变化后的矩阵,接着用doOpList函数来处理一下变化后的数字。

继续就是计算得分,是否超过历史最高。

再调logic文件中的canMove函数来判断 游戏是否出现僵局,并赋值给全局变量isOver.

最后调用saveStatus 函数,保存全局参数到文件中。

这里:我们来看下移动的函数,这里只说明向下移动

local functionmoveDown(grid)

先取出每列的数字放到一个表中,然后处理原始矩阵的每一列,将他们自下往上堆叠起来。然后判断同一列中是否有相同的数字,如果有则进行重合并判断积分是否达到2048.最后返回分数和是否胜利(改变后的矩阵不需要返回,因为本身就是一个全局变量

2.5logic

这个文件是游戏主要逻辑,实现了 随机数产生,随机位置,左移,右移,上移,下移等函数

2小结:

2048通过LUA实现逻辑上和用其他语言实现没撒大的区别,主要要注意的是实现逻辑上功能模块化。这样不但利用DEBUG,也可以养成良好的编程习惯。

下回再见。

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