前几天刚刚在学习cocos2d-x,无聊之下自己做了一个类似Diamond dash的消类游戏,今天放到网上来和大家分享一下。我相信Diamond dash这个游戏大家都玩过,游戏的规则是这样的,有一个6*7的棋盘,每个格子中有不同颜色的方块(我这里选取了5种颜色),当点击某一个方块时,如果和这个相连的方块的个数大于等于三个,那么这些相连的方块都会被消去,然后在这些消去的方块上面的方块都会掉下来,补充这些消去的方块,同时,上面的方块掉下来之后在上面就回产生空缺,然后需要随机生成方块来补全上面的空缺,每次消去的得分为2^n,n是连续的方块的个数,游戏计时为1分钟。

在游戏设计的过程中最主要的是游戏逻辑的设计,这个游戏的逻辑很明确,首先随机生成一个棋盘,棋盘中放随机一种颜色的方块,方块的摆放并没有限制(并不像三消游戏,要求生成的棋盘不能在行中或者列中有相邻的三个颜色相同);随机生成方块的代码如下:

void GameLogic::init()
{srand((unsigned)time(0));for (int i=0; i<WIDTH_CNT; i++){lack[i] = 0;for (int j=0; j<HEIGHT_CNT; j++){blocks[i][j].moveToY = j;blocks[i][j].color = rand() % colorCount;}}memset( visit, false, sizeof(visit) );totalScore = 0;
}

然后当用户点击里面某个方块时,需要计算出和该方块相邻的相同颜色的方块的个数,这里用了深度优先遍历,数出这样的方块的个数,并且用visit标记了这些方块在棋盘中的位置。

int GameLogic::dfs(int i, int j)
{int ret = 1;visit[i][j] = true;for (int p=0; p<4; p++){int x = i + dir[p][0];int y = j + dir[p][1];if (x >= WIDTH_CNT || x < 0) continue;if (y >= HEIGHT_CNT || y < 0) continue;if ( !visit[x][y] && blocks[x][y].color == blocks[i][j].color){ret += dfs(x, y);}}return ret;
}

接下去是把标记的这些方块消去,这是游戏中比较难的一个地方,因为要实现方块移动的一个效果,我是这样实现的:每个方块掉落的位置和它下面消掉的方块个数有关,记录每个方块下面消去的游戏个数,然后当前位置减去这个个数就是该方块需要移动到的位置,并且记录这个位置。

void GameLogic::blocksCancel()
{for (int i=0; i<WIDTH_CNT; i++){for (int j=0; j<HEIGHT_CNT; j++){if ( visit[i][j] ){lack[i] ++;}else{blocks[i][j].moveToY = j-lack[i];blocks[i][j-lack[i]].color = blocks[i][j].color;}}}
}

掉落之后,补齐上面的方块,同样也随机生成。

void GameLogic::makeUpBlocks()
{srand((unsigned)time(0));for (int i=0; i<WIDTH_CNT; i++){for (int j=HEIGHT_CNT-lack[i]; j<HEIGHT_CNT; j++){blocks[i][j].color = rand() % colorCount;}}
}

最后在下一次点击之前,别忘了把状态恢复到初始状态。

游戏截图如下图:

这是运行之前的截图

时间到,游戏结束:

最近在研究另外的一个游戏,三消游戏,逻辑比这略复杂。

只是一个简单的游戏,纯供娱乐,另外如需交流,请在下面留言,源代码就不在这里提供了,我提供这个游戏的win32 pc版下载:

地址如下:

点击打开链接

转载于:https://www.cnblogs.com/dyllove98/p/3184567.html

cocos2d-x 消类游戏,类似Diamond dash 设计相关推荐

  1. mysql服务端放置_放置类游戏后端服务器架构设计与实现

    前言: 停更了一段时间.2020年也接近尾声了,调整了一下人生状态,继续前进. 今年完全参与了一款放置类游戏从0到开发上线再到合服.从目前市场上买量游戏的发展线路来看,合服意味着游戏走向压榨玩家的最后 ...

  2. 捕鱼类游戏计算方式的设计思路

    公司最近准备做一款以植物大战僵尸为素材的捕鱼类游戏,初期讨论的时候发现大家的思路都比较混乱.本人通过一段时间玩捕鱼之后,大致规划了一个捕杀的计算公式.大家可以参考一下,也欢迎各位朋友指出不足和漏洞. ...

  3. [源码和文档分享]基于Android的益智闯关类游戏“超级小猫”的设计与实现

    摘 要 在科技文化高速发展的今天,人们对电子游戏娱乐的需求也日益高涨.从最初的运行于掌上游戏机的"贪吃蛇"和"俄罗斯方块"到如今风靡全世界的网游无不体现了游戏的 ...

  4. Android游戏开发教程:手教你写跳跃类游戏

    Android游戏开发教程:手教你写跳跃类游戏 package jumpball.game; import android.app.Activity; import android.os.Bundle ...

  5. 类似冒险岛这类游戏是用什么语言编写?或者说它的制作流程是什么?

    类似冒险岛这类游戏是用什么语言编写?或者说它的制作流程是什么? 一.总结 1.多种语言混合,VS(C++)和JAVA都是非常可取的 2.注重编写脚本 3.游戏引擎很多大公司都是自己开发 二.简介 应该 ...

  6. 暗黑系游戏_有哪些类似暗黑破坏神的游戏_暗黑类游戏盘点

    暗黑风格的单机游戏,是指以暴雪<暗黑破坏神>系列为代表的2.5D视角的装备驱动类游戏.这类游戏以自身独特而完善的装备系统,吸引着那些爱好刷的玩家们.接下来就给大家推荐几款好玩的暗黑风格的游 ...

  7. 最齐全的Cocos2D Cocos creator Cocos2Dx游戏源代码素材,速来收藏

    Cocos2D Cocos creator Cocos2Dx游戏源代码类资源应该算是素材类网站中必不可少的资源类型了吧~今天给大家推荐超好用,免费质量高的素材噢,让你坐拥海量资源同时又不撞款! 本人曾 ...

  8. Python-CSP 201512-2 消除类游戏

    文章目录 一.题目 二.算法思想 三.代码 一.题目 二.算法思想 使用二维列表来存储输入的棋子,进行消除的操作时,需要遍历所有的棋子. 对于第i+1行第j+1列的棋子来说,只需要从当前棋子开始往右遍 ...

  9. 格斗类游戏和休闲类游戏不同

    前阵子我开发了Match3D, 一个可以把三维动画输出成为swf的工具, 而且实现了swf渲染的实时三维角色动画, 这可以说是我真正推出的第一个flash第三方软件, 其实这以前, 我曾经开发过几个其 ...

最新文章

  1. matplotlib可视化时间序列数据、并高亮时间序列中的指定区域(Highlight a Region of Time-Series Plot with Matplotlib)
  2. c语言太极图编程语言,利用C语言的Cairo图形库绘制太极图实例教程.pdf
  3. kafka server 参数解释
  4. matlab msgbox 换行,[转载]Matlab/GUI笔记
  5. mysql数据库建立的数据库在哪个文件夹?
  6. qt创建简单的单例模式
  7. OGG ORA-1403 NO DATA FOUND
  8. TrackMouseEvent 与_TrackMouseEvent
  9. 孔浩javascript笔记三
  10. Unity + Rider + EmmyLua使用中遇到的问题
  11. 切片器可以设置日期格式?_excel神器——切片器
  12. 程序人生丨如何体现测试工程师的价值
  13. 多无线路由器AP使用同一个SSID号无缝连接漫游
  14. 卖油条年入三十万,大学还有必要去上吗?
  15. mybatis mysql ssh_SSH Mybatis 框架
  16. vue canvas画框调大小
  17. 一文带你全面了解MVC、MVP、MVVM模式(实例讲解)
  18. 蚂蚁数字科技与梆梆安全达成战略合作 共同构建移动端全链路的安全能力
  19. Matlab中feedback函数的用法
  20. 潇洒郎: PostgreSQL学习——安装、启动、执行sql,修改数据库密码

热门文章

  1. BZOJ-3473 (广义后缀自动机:拓扑 or 启发式合并)
  2. CF-1207 G.Indie Album(Trie上跑AC自动机)
  3. 2263: neighbor(贪心)
  4. 设置iis网页服务器cpu占比,为什么iis的一个线程池占了100%cpu
  5. 买卖股票的最佳时机含手续费
  6. oracle插入回车换行符
  7. java操作poi如何更改excel中的数据
  8. Blueprint 使用手记
  9. JasperReport学习笔记2-创建简单的报表例子
  10. 【题解】lugu P4095 Eden的新背包问题