Cocos2dx------详细介绍如何编写扫雷这个游戏含源码(一)
本人用的Cocos2dx 2.2.3版本
第一步 明确 编写的思路 扫雷需要实现的功能 1.有3种难度 初级9*9,10个雷 中级16*16,40个雷 高级30*16,99个雷 2.有个按钮点击可以重新开始游戏 3.有个文本显示剩余的雷数 4.可以放红旗和问号,由于电脑里的扫雷是通过右键设置红旗的,但是我这游戏最后移植到手机,手机上只有触摸,没有所谓的右键,所以我这里就设置了一个画笔, 画笔 有 正常 红旗 问号 3种 选择什么画笔,在下面触摸的时候显示的就是画笔的内容 5.核心功能,在一个N*M的棋盘上的随机位置放入指定数量的雷,在每个非雷位置上显示周围格子里的雷数,然后在上面覆盖一层,使点击上层的时候,显示下层的内容,点击到的是空白的区域的时候显示该格子周围全部空白的区域。 6.游戏输赢的判定。
我这里暂时就写了这些功能,额外的可以加关卡,分数,声音等功能。
第二步 开始编写代码
我这里就额外的添加了VisibleRect类(用这个类设置坐标的时候方便很多),其余的代码都是在HelloWorldScene类里编写 VisibleRect类 下载地址 http://yunpan.cn/cQ6mn5LBtSxYX (提取码:6384)
先选定屏幕的分辨率 我这里根据资源图片来 把屏幕设为了960*576 eglView->setFrameSize(960,576);
添加主背景 CCSprite *bg=CCSprite::create("bg.png");
由于游戏有3种难度,所以初始化场景的时候,要用一个参数区分是什么难度 我这里设置了一个int lv;
场景的初始化代码 void HelloWorld::gameinit(int lv) spLayer->ignoreAnchorPointForPosition(false);
getValue函数代码 这个函数就是通过参数i,j判断第i行,第j列这个格子的四周有几个maze[1][a][b]值等于10,也就是地雷的格子有几个 int HelloWorld::getValue(int i,int j) { int count=0; int a,b; ///////左上 a=i+1; b=j-1; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////正上 a=i+1; b=j; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////右上 a=i+1; b=j+1; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////正右 a=i; b=j+1; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////右下 a=i-1; b=j+1; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////正下 a=i-1; b=j; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////左下 a=i-1; b=j-1; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } ///////正左 a=i; b=j-1; if (a>=1&&a<=height&&b>=1&&b<=width) { if (maze[1][a][b]==10) { count+=1; } } return count; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |