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
require("appentry")
这个,其实可以理解成C语言中的
#include <appentry>
2.2appentry
appentry文件,包含logic和game文件,然后调用game文件的startup函数如下:
require("logic")
require("game")
game.startup()
2.3game
该函数设置了一个资源路径。然后进入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)
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的矩阵。
90%的概率是2,10%的概率是4.,其他都为0。
self:createLabel("2048")
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
失败后重启游戏
通过全局变量isOver来控制游戏是否结束
不过当前游戏并不会自动根据状态来判断游戏是否OVER,只是在点击new game按钮的时候才能重启。
重启游戏函数中,重新创建一个4X4矩阵,同时将一些全局变量保存到hxgame.config 文件中。
2.4.2function MainScene:onEnter()
该函数会在调用完毕MainScene:ctor()后调用,MainScene:ctor()函数类似对象类编程的构造函数。
onEnter()函数会设置一个TOUCH监听。其他基本没有了。
2.4.3function MainScene:onTouch(event,x,y)
onTouch函数,根据触摸情况调用logic文件中的上下左右逻辑。然后调用logic文件中的函数touch_op ,该函数实现前一次矩阵临时保存,然后调用相应上下左右并得到当前分数。然后通过函数getOpList返回变化后的矩阵,接着用doOpList函数来处理一下变化后的数字。
继续就是计算得分,是否超过历史最高。
再调logic文件中的canMove函数来判断 游戏是否出现僵局,并赋值给全局变量isOver.
这里:我们来看下移动的函数,这里只说明向下移动
local functionmoveDown(grid)
先取出每列的数字放到一个表中,然后处理原始矩阵的每一列,将他们自下往上堆叠起来。然后判断同一列中是否有相同的数字,如果有则进行重合并判断积分是否达到2048.最后返回分数和是否胜利(改变后的矩阵不需要返回,因为本身就是一个全局变量)
2.5logic
这个文件是游戏主要逻辑,实现了 随机数产生,随机位置,左移,右移,上移,下移等函数。
2小结:
2048通过LUA实现逻辑上和用其他语言实现没撒大的区别,主要要注意的是实现逻辑上功能模块化。这样不但利用DEBUG,也可以养成良好的编程习惯。
下回再见。