quick-cocos2d-x 学习系列之二样例2048游戏学习
quick-cocos2d-x 学习系列之二样例2048游戏学习
最近蛤蟆会来看下quick中提供的几个SAMPLE例子,例子不多那咱们就一一过一下呗。先从2048这个游戏开始吧。 该游戏不介绍了,没听过的就去小黑屋哭泣吧~ 源码路径 ..quick-3.3quicksamples2048 1.文件介绍1.1res文件这个是资源文件夹,里面就放了2个图片GreenButton.png,GreenScale9Block.png。 1.2src文件这个是LUA代码文件夹了,所有逻辑都在此中。也是蛤蟆要重点照顾的文件夹。 2.代码执行逻辑2.1Main.lua这个LUA文件是程序的入口函数 然后文件会调用appentry函数,代码如下 require("appentry") 这个,其实可以理解成C语言中的 #include <appentry> 2.2appentryappentry文件,包含logic和game文件,然后调用game文件的startup函数如下: require("logic") require("game") game.startup() 2.3gamegame文件中有一个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,也可以养成良好的编程习惯。 下回再见。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |