cocos2d-x 消类游戏,类似Diamond dash 设计

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

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

[cpp] view
plain
copy

  1. void GameLogic::init()  
  2. {  
  3.     srand((unsigned)time(0));  
  4.     for (int i=0; i<WIDTH_CNT; i++)  
  5.     {  
  6.         lack[i] = 0;  
  7.         for (int j=0; j<HEIGHT_CNT; j++)  
  8.         {  
  9.             blocks[i][j].moveToY = j;  
  10.             blocks[i][j].color = rand() % colorCount;  
  11.         }  
  12.     }  
  13.     memset( visit, false, sizeof(visit) );  
  14.     totalScore = 0;  
  15. }  

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

[cpp] view
plain
copy

  1. int GameLogic::dfs(int i, int j)  
  2. {  
  3.     int ret = 1;  
  4.     visit[i][j] = true;  
  5.     for (int p=0; p<4; p++)  
  6.     {  
  7.         int x = i + dir[p][0];  
  8.         int y = j + dir[p][1];  
  9.         if (x >= WIDTH_CNT || x < 0)   
  10.             continue;  
  11.         if (y >= HEIGHT_CNT || y < 0)   
  12.             continue;  
  13.         if ( !visit[x][y] && blocks[x][y].color == blocks[i][j].color)  
  14.         {  
  15.             ret += dfs(x, y);  
  16.         }  
  17.     }  
  18.     return ret;  
  19. }  

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

[cpp] view
plain
copy

  1. void GameLogic::blocksCancel()  
  2. {  
  3.     for (int i=0; i<WIDTH_CNT; i++)  
  4.     {  
  5.         for (int j=0; j<HEIGHT_CNT; j++)  
  6.         {  
  7.             if ( visit[i][j] )  
  8.             {  
  9.                 lack[i] ++;  
  10.             }  
  11.             else  
  12.             {  
  13.                 blocks[i][j].moveToY = j-lack[i];  
  14.                 blocks[i][j-lack[i]].color = blocks[i][j].color;  
  15.             }  
  16.         }  
  17.     }  
  18. }  

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

[cpp] view
plain
copy

  1. void GameLogic::makeUpBlocks()  
  2. {  
  3.     srand((unsigned)time(0));  
  4.     for (int i=0; i<WIDTH_CNT; i++)  
  5.     {  
  6.         for (int j=HEIGHT_CNT-lack[i]; j<HEIGHT_CNT; j++)  
  7.         {  
  8.             blocks[i][j].color = rand() % colorCount;  
  9.         }  
  10.     }  
  11. }  

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

游戏截图如下图:

这是运行之前的截图

时间到,游戏结束:

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

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

地址如下:

点击打开链接

请尊重博主的劳动成果, 转载请注明出处: http://blog.csdn.net/usingnamespace_std/article/details/9299663

时间: 2024-10-08 20:13:33

cocos2d-x 消类游戏,类似Diamond dash 设计的相关文章

休闲消类游戏《泡泡玩具HD》限免中

<泡泡玩具HD>是一款基于物理基础的匹配相消类的游戏.游戏虽有不同模式,但基本玩法都是一样的.只要有相邻两个一样的动物,就可以消除,然后其他小泡泡 就会依重力落下来.<泡泡玩具HD>游戏截图<泡泡玩具HD>游戏截图当消除得比较好的时候,就会出校红色的小炸弹,可以炸掉周围几个泡泡.个人喜欢的点比较奇葩,我喜欢当屏幕积满泡泡时发出的咯吱咯吱声音,就像泳池里游泳圈互相挤压的声音.<泡泡玩具HD>游戏截图<泡泡玩具HD>游戏截图

使用Cocos2d-x制作三消类游戏Sushi Crush(第一部分)

https://github.com/cocos2d/cocos-docs/blob/master/tutorial/how-to-make-a-sushicrash-game-by-cocos2dx/part1/zh.md 欢迎大家斧正错误,提交PR. 视频教程地址:[教主视频教程]使用Cocos2d-x制作三消类游戏Sushi Crush(第一部分) 原创: 任珊 一直以来,消除类游戏以其简单明快的节奏.浓厚的趣味性和智慧性而被广大玩家所喜爱.其分支三消类游戏更是倍受广大游戏玩家的推崇,最近

大数据能否破解模拟体育竞技类游戏性质之谜?

"每日"模拟体育竞技类游戏(以下简称DFS)的走红是一个近期值得关注的现象, 有人认为这绝对是一个依靠技巧的游戏,而其他人则声称这是另一种形式的赌博,而且应该是非法的. 号称"下一个热点"的DFS正在席卷北美市场并逐渐蔓延到了欧洲.其实它的玩法非常简单:体育爱好者可以在全世界范围内挑选自己喜爱的世界级运动明星组成队伍,然后根据特定的得分规则来获取模拟积分. 目前,在美国大多数州,模拟体育竞技(包括DFS)通常被认为是一个依靠技巧的游戏,因此并未被视为赌博(通常赌博会

对于类似三国杀的游戏我该怎么设计

问题描述 我想用java实现一个类似三国杀的大概4~5人的桌游程序,不为什么,就为练练手,可是在设计时就迷惑了,我到底该怎么设计其中的各个类,比方说一张在桌面显示的牌,我设计一个牌类?类似的问题让我很迷惑,我觉得自己什么都不会编了,太失败了,不知道谁能够给咱点拨一下,现在对面向对象的设计真的不知道该怎么下手,很难受,憋得慌. 解决方案 解决方案二:牌类:属性(例如,有点数,有说明文字,有隐藏的用来判断和另一张牌比较大小的主键...)功能(例如,用以返回各项值的方法,用以设置各项属性的方法...)

《Android 游戏开发大全(第二版)》——6.10节体育类游戏

6.10 体育类游戏Android 游戏开发大全(第二版)体育类游戏是面向体育爱好者的一类游戏,虽然拥有的玩家群体不如角色扮演或益智类游戏多,但是体育类游戏还是在众多的手机游戏种类中因独特的内容题材占有一席之地. 6.10.1 游戏玩法玩家人数由于手机平台下的局限性,一般的体育类游戏都为单机模式,即玩家进行体育竞技的对象是电脑AI,这时游戏的可玩性很大程度上取决于AI的真实程度. 取胜方式体育类游戏主要是模仿现实中体育竞技运动,所以取胜方式就是赢得比赛的胜利,或根据剧情需要赢得一系列比赛的胜利,

消除类游戏(js版)

原文:消除类游戏(js版) 最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工)  代码总共456行,未经过严格测试 1 <html lang="zh-CN"> 2 <head> 3 <meta charset="utf-8"> 4 <meta http-equiv="X-UA-Compatible&q

童年春节的那些游戏情怀细数街机类游戏演变

当90后都到了法定结婚年龄的今天,80后开始集体怀旧,从红白机到游戏厅,各种游戏可以说是填充了这个80后的课余生活. 临近春节,提到"街机",又一个尘封的记忆被打开,儿时有多少欢乐在这里头,压岁钱可是花了不少在这里头.虽说时代向前奔涌而毫无停歇,虽说游戏世界永远都是引领潮流的一片纷飞战场.然而向前迈进的同时,就意味着我们一定不能忘记过去,更何况作为中国的玩家而言,街机房和街机游戏,又对我们有着如此与众不同的意义,并蕴含着如此深厚的回忆和感动......那么我们就一起回味一下从曾经的经典

一窝蜂还是深思熟虑?Dota类游戏狼烟四起

4月2日网易高调发布电竞战略,并且力推其新品<http://www.aliyun.com/zixun/aggregation/6801.html">英雄三国>为进军电竞行业的排头兵.而与此同时,盛大游戏也在不久之前公布了一款类似与Dota的游戏产品.再加上完美去年代理的Dota2,腾讯英雄联盟,杭州电魂梦三国,上海起凡三国争霸,圣光天翼的天翼决等,一时间类Dota游戏领域烽烟四起,再次成为行业的焦点. 英雄联盟 类Dota游戏又称为MOBA游戏,意为多人联机在线竞技游戏,与传统

Gameloft即将发布DOTA类游戏Heroes of Order & Chaos

移动游戏巨头Gameloft近日透露了其首款MOBA(多人联机在线竞技游戏)类型游戏Heroes of Order & Chaos.相信英雄联盟及DOTA2的玩家们一定会感兴趣.Heroes of Order & Chaos游戏画面就像其他MOBA类游戏一样,Heroes of Order & Chaos也是以多人游戏为主(玩家也可以选择单机模式与机器人对战),每一方拥有三至五位玩家,分别控制不同的英雄,目的就是摧毁对方的基地.游戏同样采用三条主要通道的地图设计,估计之前玩过类似游