我的博客:http://blog.csdn.net/dawn_moon

这一节来讲地图初始化实现。

连连看地图初始化有非常多实现方式,大概会有下面几种:

  1. 每一格的位置随机取图片放上去
  2. 随机取图片放到随机的位置上去
  3. 把图片铺满地图。随机打乱位置

我们採用第三种方式。

要注意的是。为了保证最后全部的图片都被消掉,那么全部的图片都要是偶数个。我们採用逐格绘制。每次放两张同样的图片,铺满地图以后,随机打乱。

初始例如以下:

0 0 0 0 0 0 0 0 0 0
0 1 1 2 2 3 3 4 4 0
0 5 5 6 6 7 7 8 8 0
0 9 9 10 10 11 11 12 12 0
0 13 13 14 14 15 15 16 16 0
0 0 0 0 0 0 0 0 0 0

然后随机打乱就能够了,注意仅仅随机打乱非零的位置。

代码里面怎样实现呢。非常easy。

定义一个二维数组。地图每一格相应一个值。 其值为0表示是一个空格,其它数字就是图片的id。
数组初始化都是0。然后遍历一遍,四个边框还是零,里面的位置按图片id,成对赋值。

我把地图数组赋值和图片绘制分成两部分,先初始化地图数组。然后再画棋盘。看代码:

void GameScene::initMap()
{// 这里x用来控制地图数组的每格的值,y用来控制两次反转。即每两个格标记同一个值int x = 1;int y = 0;// 数组下标从0開始。这里从1開始遍历,那么最外面一圈就是0不变for (int i = 1; i < xCount - 1; i++) {for (int j = 1; j < yCount - 1; j++) {// 地图数组赋值mMap[i][j] = x;// y控制反转。x控制每格值添加。增大到图片总数后从再1開始递增if (y == 1) {x++;y = 0;if ( x == iconCount) {x = 1;}}else{y = 1;}}}change();drawMap();}

上面的 change()函数就是随机打乱地图数组,drawMap()函数就是绘制棋盘,讲地图数组相应的图标绘制出来。

接下来看下change()函数:

// 随机改变一下棋局位置
void GameScene::change()
{// 随机种子srand((unsigned int)time(NULL));// 暂时变量,用来交换两个位置的数据int tempX, tempY, tempM;// 遍历地图数组,随机交换位置for (int x = 1; x < xCount - 1 ; x++)for (int y = 1; y < yCount - 1; y++) {tempX = 1 + (int)(CCRANDOM_0_1() * (xCount - 2));tempY = 1 + (int)(CCRANDOM_0_1() * (yCount - 2));tempM = mMap[x][y];mMap[x][y] = mMap[tempX][tempY];mMap[tempX][tempY] = tempM;}
}

非常easy是吧,不说了。

接着看drawMap()函数:

void GameScene::drawMap()
{// 绘制棋盘上精灵for (int x = 0; x < xCount; x++) {for (int y = 0; y < yCount; y++) {if (mMap[x][y] > 0) {char iconName[64] = {0};// 格式化图片名sprintf(iconName, "%d.png", mMap[x][y]);auto position = indextoScreen(x, y);// 全部图片已经加到帧缓存,这里直接用名字取一帧。创建一个精灵auto icon = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName(iconName));
//                icon->setAnchorPoint(Vec2(0, 0));icon->setPosition(position);// 设置一个tag,方便兴许识别点击的是那个图标int tag = (yCount - 2) * ( x - 1 ) + y;// 这是Z序和tag值,Z序设置大一些确保图标在其它精灵的前面addChild(icon, 100, tag);}}}
}

代码都加了非常多凝视。应该非常好理解。只是里面有一行凝视掉的代码,是设置锚点的。精灵的默认锚点是(0.5。0.5),也就是中心位置。可是我一開始想把它设为左下角,这样地图铺起来就比較直观。

做到后来做点击连线的时候发现从中间连线会非常麻烦,所以就把这行凝视掉了,直接用默认锚点。

这样做的话,后面的屏幕坐标和地图数组坐标转换就要做一下处理了。后面再讲。

好了。到这里地图就绘制完毕了。

转载于:https://www.cnblogs.com/mfrbuaa/p/5210009.html

cocos2d-x3.6 连连看随机地图实现相关推荐

  1. 类似元气骑士的九宫格随机地图实现

    类似元气骑士的九宫格随机地图实现 主要思路 代码部分 效果演示 补充 参考 主要思路 情况1.九宫格中随机选择7个方格出来必定可联通(可斜向联通). 情况2.九宫格中随机选择7个方格出来大部分情况可联 ...

  2. 游戏中随机地图的实现

    游戏中随机地图的实现 很多游戏都用到了随机地图,比如矮人要塞,CDDA,MineCraft,RimWorld. 随机地图带给游戏更多的趣味性,每一次新建游戏都有不同的体验. 一般游戏中生成随机地形都是 ...

  3. 这些坑别踩!游戏随机地图生成开发经验分享

    当时虽然简单实现了目的,但后来自己也感到世界地图的呈现并不十分完美,恐怕也就只值95分.为了精益求精且给自己找点事做,便想对大地图的呈现方式做些微调. 之前略有瑕疵的世界地图 为何选择2D? 素材好找 ...

  4. [Unity]Roguelike随机地图生成(一)

    初步随机地图生成 基础房间生成 房间门的判断 基础房间生成 首先需要确定每次房间生成都是在上一个房间的哪个方向上生成,为此需要声明一个枚举值来记录上下左右四个方向 创建脚本RoomGenerator, ...

  5. 一个简单的2DRoguelike游戏随机地图生成思路

    首先我们要先明确一张Roguelike地图里包含的最基本元素是什么,我的理解是房间与通道.我们可以将一张地图抽象成是房间与房间通过通道来连接. 那么基于这个大前提,我的思路如下. 以图中红色格子为中心 ...

  6. 随机地图生成--自己的一次尝试

    最近照着网上的元胞自动机随机地图生成算法自己尝试着写了一下,发现效果不是很满意 local count1 = Tile_map.CheckNeighborWall(i,j)--1层墙的数量 local ...

  7. Unity使用波函数坍缩 (Wave Collapse Function)算法生成随机地图

    在游戏领域和人工智能领域有一个随机生成地图用的比较多的算法叫做波函数坍缩 (Wave Collapse Function)算法,这个算法可以根据自己定制的规则生成随机地图. 根据波函数坍缩算法的源码 ...

  8. 关于“搭桥”游戏生成随机地图的设计思路

    是很久以前写的一个小游戏.名字为:Bridge Puzzle Game. 是一款益智类的小游戏. 游戏链接:http://www.puzzle-bridges.com/ 游戏中最重要的一个功能是随机生 ...

  9. Unity 2D随机地图

    最近翻起以前下载的一些老的教学视频,于是决定重新看一遍,且每周所学做个记录,下面就直接开始. 这篇文章就讲讲教程里面的随机2D地图的实现原理,以及代码展示. 首先效果如下: 右边是使用UntiyEdi ...

最新文章

  1. @RequestParam加与不加的区别
  2. 科大星云诗社动态20201210
  3. TensorFlow 2——【module ‘tensorflow.compat.v1‘ has no attribute ‘contrib‘】解决方案
  4. 两轮平衡机器人送披萨,旋转跳跃!
  5. charles请求转发_用免费开源的frp实现内网穿透,使用nginx转发的方式去掉端口号...
  6. Android -- 创建XML文件对象及其序列化, pull解析XML文件
  7. 使用AXIS开发Web Service的示例
  8. 重磅福利!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题...
  9. shell日志重定向到null
  10. oracle中慢sql优化思路
  11. 手机用久了很卡怎么办?
  12. c# dynamic 类型调用静态方法实例
  13. 江西科技师范大学泰豪校区计算机专业,扎心了!比取经还艰难的大学路,南昌居然占了这么多……...
  14. delphi 热部署_DelphiWebMVC微信公众号开发
  15. docker for desktop一直starting
  16. Win系统 - 你知道 insert 键的隐藏功能吗?
  17. 微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序
  18. 广州科二化龙考场_广州化龙科目二?
  19. 基于微信小程序的菜谱管理系统(菜谱小程序设计后台JavaSSM)
  20. 计算机辅助英语训练新方法,一种新的计算机辅助英语教学模式

热门文章

  1. 去越南旅游一个人玩一个月需要多少人民币?
  2. 自己创业做电商,应该怎么做?
  3. 为什么有的安卓手机越用越慢,刷机也不行?
  4. 十多年前国内的三大杀毒软件瑞星、江民和金山毒霸的现状如何?
  5. Java OpenCV之Mat类的概述、常用构造方法、常用函数
  6. 关于js中replace()只能替换字符串中第一个对象的问题
  7. uni-app中image组件的基本使用
  8. Jinja2模板引擎语法
  9. 在SQL Server中导入和使用CSV文件
  10. 德鲁伊 oltp oltp_内存中OLTP –招待看门狗的三个关键点–检查点文件