前几天刚刚在学习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版下载:

地址如下:

点击打开链接

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

  1. 消除类游戏(js版)

    最近一直在玩一款消灭星星的消除类游戏,周末无聊就用js也写了一遍,感觉玩比写还困难一直玩不到10000分.废话不多说直接上源码. 效果图(ps 页面有点难看木有美工) 代码总共456行,未经过严格测试 ...

  2. 【Unity3D】使用鼠标键盘控制Camera视角(即时战略类游戏视角):缩近,拉远,旋转

    今天写一个demo,要用到鼠标键盘控制三维视角,因此写了个脚本用于控制. 该脚本可以用于即时战略类游戏的视角,提供了缩进,拉伸,旋转.同时按住鼠标右键不放,移动鼠标可以实现第一人称视角的效果. usi ...

  3. 网狐6603 cocos2dx 棋牌、捕鱼、休闲类游戏《李逵捕鱼》手机端完整源码分析及分享

    该资源说明: cocos2d 棋牌.捕鱼.休闲类游戏<李逵捕鱼>手机端完整源码,网狐6603配套手机版源码,可以选桌子,适合新手学习参考,小编已亲测试,绝对完整可编译手机端,下载后将文件考 ...

  4. 用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

    系统主菜单如下图所示: 首先,介绍下这个主菜单,它包含了一个动画logo以及一个按钮选项,动画logo每隔1秒钟切换一张图片,点击相应的按钮选项会切换不同的游戏场景. 下面看下这个界面的源码: /** ...

  5. 使用EasyX和C++写一个消砖块游戏

    第一次玩EasyX,写一个比较简单的消砖块游戏. 主函数包括Game的类的开始,运行和结束. 1 #include "BrickElimination.h" 2 3 int mai ...

  6. UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合

    前一篇已经确定神海类游戏原型的目标,首先要做的就是3C's(Character, Controls, Camera)的开发.   UE4的3C's的程序部分开发主要也就是基于他的GamePlay Fr ...

  7. 对弈类游戏的人工智能(4)--游戏AI的落地

    前言: 对弈类游戏的智能算法, 网上资料颇多, 大同小异. 然而书上得来终觉浅, 绝知此事要躬行. 结合了自己的工程实践, 简单汇总整理下. 一方面是对当年的经典<<PC游戏编程(人机博弈 ...

  8. 对弈类游戏的人工智能(5)--2048游戏AI的解读

    前言: 闲得没事, 网上搜"游戏AI", 看到一篇<<2048游戏的最佳算法是?来看看AI版作者的回答>>的文章. 而这篇文章刚好和之前讲的对弈类游戏AI对 ...

  9. js&html5实现消星星游戏

    前段时间看见园子里有同学用js+jquery实现了消星星游戏,自己也早有这个想法,于是就利用业余时间用js+html5实现了一下消星星游戏. 主要是想实现效果,运用了css3中的动画属性.游戏积分算法 ...

随机推荐

  1. Get Cordova Ready for Grunt and CoffeeScript

    Cordova, Grunt and Coffee You may reference to below if you deside to work with coffee instead of Ja ...

  2. Unity 3D 文件导入出错

    Unity 3D 文件导入出错 安装unity 时我选择了free版的,打开已有项目时出现例如以下错误提示 解决的方法: 先把要导入的文件先复制到unity3d安装文件夹下相应的文件夹内,之后再返回u ...

  3. ftk学习记(对话框篇)

    [声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面谈到了输入法,首先看一看效果. 上面有4个输入框,大家能够分别试试,看看效果怎样. 今天,我 ...

  4. Swift - 多线程实现方式(1) - NSThread

    1,Swift继续使用Object-C原有的一套线程,包括三种多线程编程技术: (1)NSThread (2)Cocoa NSOperation(NSOperation和NSOperationQueu ...

  5. Android中Activity之间访问互传参数

    public class MainActivity extends Activity { private static final int OTHER = 1; @Override protected ...

  6. 浅谈MySQL 数据库性能优化

    MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...

  7. 中国本土管理咨询公司排名TOP50

    中国本土管理咨询公司排名TOP50 1. 北京正略钧策管理顾问有限公司 2. 北京和君咨询公司 3. 北大纵横管理咨询公司 4. 远卓管理顾问公司 5. AMT管理咨询公司 6. 华夏基石管理咨询有限 ...

  8. ASP.NET - 分页

    效果: SQL-存储过程(Paging): ROW_NUMBER() over(order by MessageDateTime desc)  其中的 MessageDateTime desc 代表的 ...

  9. Qml 写的弹出层控件(13篇博客)

    QML弹出窗口组件,灯箱效果.动画效果,可拖拽 核心思路:一个mask层,一个最顶层,都用rectangle,禁止事件穿透 使用 Popup { id: popup width: 200; heigh ...

  10. Delphi的String内存结构(够清楚) good

    变量s的内存结构为(字符串编码)A8 03 (字符宽度)01 00 (引用计数)FF FF FF FF (字符串长度)0A 00 00 00 (实际内容)31 32 33 34 35 36 37 38 ...