资源图片 http://yunpan.cn/cQ63WwezMEmWD (提取码:715f)



棋盘绘制好了,接下来就是触摸了

通过触摸上一层,使其显示下一层的情况


触摸代码

bool HelloWorld::ccTouchBegan(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent)
{
CCPoint p=pTouch->getLocation();


if (spLayer->boundingBox().containsPoint(p)&&Cantouch==true)//判断触摸点是否在棋盘界面里,Cantouch true表示还能触摸,赢输的时候把该值设为false
{
CCPoint orgin=spLayer->getPosition()-ccp(spLayer->getContentSize().width/2,spLayer->getContentSize().height/2);//得到spLayer层的左下角点的坐标,每种难度该坐标都不一样
CCPoint temp=p-orgin;
hang=temp.y/32+1;//把触摸点的坐标,换算成 是第几行和第几列
lie=temp.x/32+1;


if (maze[0][hang][lie]==9||maze[0][hang][lie]==11||maze[0][hang][lie]==12)//只有上一层的值是 正常的 红旗 问号的时候才能进行触摸
{


if (brush==1)//brush 表示 画笔,1表示当前选择的是 正常的,2表示红旗,3问号
{
if (maze[0][hang][lie]==11)//每少一个红旗,地雷输就+1
{
temp_mine_Number++;
mine_Number_label->setString(CCString::createWithFormat("%d",temp_mine_Number)->m_sstring.c_str());
}









maze[0][hang][lie]=maze[1][hang][lie];//使上一行的值等于下一行的值
sp[hang][lie]->initWithFile(CCString::createWithFormat("%d.png",maze[0][hang][lie])->m_sstring.c_str());


if (maze[0][hang][lie]==10)//如果下一层是地雷,游戏结束
{
Cantouch=false;


tips->setString("Game Over");
}


if (maze[0][hang][lie]==0)//如果下一层是空的,就显示这个格子周围全部为空白的格子,用到遍历
{
CCPoint m_location;
for (int a=LocationList.size()-1;a>=0;a--)
{
m_location=LocationList[a];
std::vector<CCPoint>::iterator Locationiter=LocationList.begin()+a;
LocationList.erase(Locationiter);
}//清空列表


LocationList.push_back(ccp(hang,lie));
for (unsigned int k=0;k<(LocationList.size());k++)
{
m_location=LocationList[k];


int i,j,a,b;
i=m_location.x;
j=m_location.y;


a=i+1;
b=j;
PushList(a,b);//上


a=i;
b=j+1;
PushList(a,b);//右


a=i-1;
b=j;
PushList(a,b);//下


a=i;
b=j-1;
PushList(a,b);//左
}

for (unsigned int k=0;k<(LocationList.size());k++)//读取表里的数据,这些数据表示空白的格子
{
m_location=LocationList[k];
hang=m_location.x;
lie=m_location.y;
maze[0][hang][lie]=maze[1][hang][lie];
sp[hang][lie]->initWithFile(CCString::createWithFormat("%d.png",maze[0][hang][lie])->m_sstring.c_str());
}
}




int num=0;
for (int i=1;i<=height;i++)
{
for (int j=1;j<=width;j++)
{
if (maze[0][i][j]==9||maze[0][i][j]==11||maze[0][i][j]==12)
{
num++;
}

}
}



if (num==mine_Number)//maze[0][i][j]层等于9 11 12的格子加起来数量等于地雷数的话,说明剩下来的格子都是地雷了,游戏胜利
{
Cantouch=false;
tips->setString("Win");
}



}







if (brush==2)
{
if (maze[0][hang][lie]!=11)
{
maze[0][hang][lie]=11;
temp_mine_Number--;//每插一个红旗,地雷数-1
mine_Number_label->setString(CCString::createWithFormat("%d",temp_mine_Number)->m_sstring.c_str());


sp[hang][lie]->initWithFile(CCString::createWithFormat("11.png",maze[0][hang][lie])->m_sstring.c_str());
}
}


if (brush==3)
{

if (maze[0][hang][lie]!=12)
{
if (maze[0][hang][lie]==11)
{
temp_mine_Number++;
mine_Number_label->setString(CCString::createWithFormat("%d",temp_mine_Number)->m_sstring.c_str());
}


maze[0][hang][lie]=12;
sp[hang][lie]->initWithFile(CCString::createWithFormat("12.png",maze[0][hang][lie])->m_sstring.c_str());
}


}
}


}

return true;
}







PushList函数代码

void HelloWorld::PushList(int a,int b)
{
if (a>=1&&a<=height&&b>=1&&b<=width)
{
if (maze[1][a][b]==0)
{
CCPoint temp=ccp(a,b);
for (unsigned int n=0;n<(LocationList.size());n++)
{
CCPoint m_location=LocationList[n];


if (temp.x==m_location.x&&temp.y==m_location.y)
{
break;
}
else
{
if (n==(LocationList.size()-1))
{
LocationList.push_back(temp);
}
}


}
}


}
}










HelloWorldScene.h文件的源码

#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_NS_CC; class HelloWorld : public cocos2d::cclayer { public: // Here's a difference. Method 'init' in cocos2d-x returns bool,instead of returning 'id' in cocos2d-iphone virtual bool init(); // there's no 'id' in cpp,so we recommend returning the class instance pointer static cocos2d::CCScene* scene(); // implement the "static node()" method manually CREATE_FUNC(HelloWorld); CCSize winSize;//屏幕大小 int width;//棋盘宽度 int height;//棋盘高度 int mine_Number;//地雷数 int lv; //游戏难度 int brush;//画笔 void Menu_button(CCObject* pSender);//点初级 中级 高级 按钮时候的回调 void Menu_restart(CCObject* pSender);//重新开始 void Menu_brush(CCObject* pSender);//画笔设置的回调 void gameinit(int lv);//根据难度初始化棋盘 int maze[2][50][50];//3维数组 int lie,hang;//列 行 int getValue(int i,int j);//得到格子的值 CCSprite* sp[50][50];//显示在棋盘上的每个格子 cclayer* spLayer;//棋盘层 virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent); virtual void ccTouchMoved(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent); virtual void ccTouchEnded(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent); void onEnterTransitionDidFinish();//注册触摸函数 std::vector<CCPoint> LocationList;//一个存放CCPoint类数据的表 点的横坐标表示行 纵坐标表示列 void PushList(int a,int b);//把 ccp(a,b)这个点压人表 cclabelTTF*tips;//右上角的提示文本框 cclabelTTF*mine_Number_label;//地雷数文本 CCSprite *check1;//左边的勾 CCSprite *check2;//右边的勾 CcmenuItemImage *button1item;//初级按钮 CcmenuItemImage *button2item;//中级按钮 CcmenuItemImage *button3item;//高级按钮 CcmenuItemImage *brush1item;//正常的 CcmenuItemImage *brush2item;//红旗 CcmenuItemImage *brush3item;//问号 int temp_mine_Number; bool Cantouch;//能否触摸 }; #endif // __HELLOWORLD_SCENE_H__

Cocos2dx------详细介绍如何编写扫雷这个游戏含源码二的更多相关文章

  1. 详解iOS游戏开发中Cocos2D的坐标位置关系

    这篇文章主要介绍了iOS游戏开发中Cocos2D的坐标位置关系,Cocos2D是专门用来开发iOS游戏的开源框架,文中示例代码采用Objective-C语言,需要的朋友可以参考下

  2. 剖析iOS开发中Cocos2d-x的内存管理相关操作

    这篇文章主要介绍了剖析iOS开发中Cocos2d-x的内存管理相关操作,Cocos2d-x是开发游戏的利器,需要的朋友可以参考下

  3. iOS开发中使用cocos2d添加触摸事件的方法

    这篇文章主要介绍了iOS开发中使用cocos2d添加触摸事件的方法,cocos2d是制作iOS游戏的利器,需要的朋友可以参考下

  4. ios – cocos2d 2.0-rc2:结束导演并重启

    我有一个使用UIKitmenues的cocos2d驱动游戏,所以我只使用一个viewcontroller的框架,这是游戏本身.此外,它只有一个场景.由于cocos2d2.0导演本身是一个UIViewController子类,所以我只需在用户点击一个开始按钮时将其推送到我的MenuViewController中:当用户启动第一个游戏时,第一次调用该方法时,这很好.当游戏结束时,我调用[[CCDire

  5. cocos2d 基本知识

    1.DrawNodedrawRect全屏:pad:460,320.iphone:400,3002.cocos2d-x-3.13.1&ios10.1:不设置position,ios模拟器屏幕上就看不到了3.cocos2d-xconsole生成初始项目:~/Desktop/cocos2d-x-3.13.1/tools/cocos2d-console/bin/cocosnewHelloMath-lcpp

  6. cocos2d随机数

    srand;intn=rand()%100+1;//生成1-100之间的随机数,包括100

  7. Cocos2d 2.0将UIView添加到CClayer openglview已弃用

    我有一些麻烦添加一个UIView到cocos2dv2.0,因为openGlView已被弃用,我无法添加视图.我在寻找另外一种方法来做到这一点,但是找不到任何东西.任何人都可以告诉我在所有cc层之前添加一个UIView的新方法?或者我该如何完成这个?使用这个而不是openGLView:

  8. cocos2d-x-3.3rc0事件处理

    1.头文件2.代码

  9. 一张图了解cocos2d坐标系

    一张图了解cocos2d坐标系平面直角坐标系

  10. cocos2d clippindNode,新手引导

    需要明确的一点就是CcclippingNode本质上是一个节点,什么是节点,节点就是可以存放东西,它也可以放到其他的节点上。还有就是如果用户没有按照要求点击的话,CcclippingNode的模板应该回到上一步的位置处才对,这里没有实现,不过项目中用的时候就需要根据你自己的需要去做了,这里只是为了说明原理。

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部