昨天做了[关闭卡死的电脑]这个关卡今天要做的是点击绿色按钮100下,这游戏真的坑爹,看你能不能玩过关,哈哈哈。

这关做起来比较简单游戏逻辑也比较简单,直接上第二关的源代码,注意最后面又当天的源码下载

对了一起来看看今天的游戏效果

HistoryGame02.h  和 HistoryGame02.cpp

HistoryGame02.h

#ifndef __HistoryGame02_SCENE_H__
#define __HistoryGame02_SCENE_H__#include "cocos2d.h"
#include <sstream>USING_NS_CC;class HistoryGame02 : public cocos2d::Layer
{
public:static cocos2d::Scene* createScene();virtual bool init();//判断精灵是否点击bool isInSprite(Touch *theTouch,Sprite *sp);//点击bool onTouchBegan(Touch *pTouch, Event  *pEvent);//游戏结束void gameover(float over);//游戏胜利void gamewin(float win);void menuCloseCallback(Object* pSender);//绿色按你点击void greeCallback(Object* pSender);//红色按钮点击void redCallback(Object* pSender);CREATE_FUNC(HistoryGame02);
};#endif // __HistoryGame02_SCENE_H__

HistoryGame02.cpp

#include "HistoryGame02.h"
#include "SWSpritePlayForTexturePacker.h"
#include "ScrollViewScene.h"
#include "CCEventDispatcher.h"
#include "CCEventListenerTouch.h"USING_NS_CC;static bool isClickGo;//定义一个点击的次数
int clickCount = 100;Scene* HistoryGame02::createScene()
{isClickGo = true;auto scene = Scene::create();auto layer = HistoryGame02::create();scene->addChild(layer);return scene;
}bool HistoryGame02::init()
{if ( !Layer::init() ){return false;}//cocos2d-x3.0中的点击事件auto dispatcher = Director::getInstance()->getEventDispatcher();auto touchListener = EventListenerTouchOneByOne::create();touchListener->onTouchBegan = CC_CALLBACK_2(HistoryGame02::onTouchBegan, this);dispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);//加入背景Size size = CCDirector::getInstance()->getWinSize();SpriteFrameCache *cache = SpriteFrameCache::getInstance();cache->addSpriteFramesWithFile("click_on_the_100_times.plist");Sprite* sprite =Sprite::createWithSpriteFrameName("background.png");sprite->setPosition(Point(size.width*0.5,size.height*0.5));addChild(sprite);//次数String *ns = String::createWithFormat("%d",clickCount);LabelTTF *scorettf = LabelTTF::create(ns->getCString(), "MarkerFelt-Thin", 80);scorettf->setPosition(Point(size.width*0.5+110, size.height*0.5+120));scorettf->setTag(107);addChild(scorettf);//两个按钮MenuItemImage *greeItem = MenuItemImage::create();greeItem->setNormalSpriteFrame(cache->spriteFrameByName("button_01.png"));greeItem->setSelectedSpriteFrame(cache->spriteFrameByName("button_02.png"));greeItem->initWithTarget(this, menu_selector(HistoryGame02::greeCallback));greeItem->setPosition(Point(size.width*0.5-150, size.height*0.5-50));greeItem->setTag(108);MenuItemImage *redItem = MenuItemImage::create();redItem->setNormalSpriteFrame(cache->spriteFrameByName("button_03.png"));redItem->setSelectedSpriteFrame(cache->spriteFrameByName("button_04.png"));redItem->initWithTarget(this, menu_selector(HistoryGame02::redCallback));redItem->setPosition(Point(size.width*0.5+150, size.height*0.5-50));redItem->setTag(109);auto menu = Menu::create(greeItem,redItem, NULL);menu->setPosition(Point::ZERO);menu->setTag(110);addChild(menu);MenuItemImage *closeItem = MenuItemImage::create();closeItem->setNormalSpriteFrame(cache->spriteFrameByName("back-1.png"));closeItem->setSelectedSpriteFrame(cache->spriteFrameByName("back-2.png"));closeItem->initWithTarget(this, menu_selector(HistoryGame02::menuCloseCallback));closeItem->setPosition(Point(80,80));auto menus = Menu::create(closeItem, NULL);menus->setPosition(Point::ZERO);this->addChild(menus, 1);return true;
}void HistoryGame02::menuCloseCallback(Object* pSender)
{//释放没有用到过的缓冲SpriteFrameCache *cache = CCSpriteFrameCache::getInstance();cache->removeSpriteFramesFromFile("click_on_the_100_times.plist");//实现Director::getInstance()->replaceScene(CCTransitionFade::create(0.5, ScrollViewScene::create()));
}void HistoryGame02::greeCallback(Object* pSender)
{//绿色按钮点击//当绿色按你点击的时候数字减1clickCount--;//更新显示的数据String *ns = String::createWithFormat("%d",clickCount);auto score = (LabelTTF *)getChildByTag(107);score->setString(ns->getCString());//判断当clickCount等于0的时候if (0 >= clickCount) {this->scheduleOnce(schedule_selector(HistoryGame02::gamewin), 0.1f);}//判断当数字小于20的时候开始随机交换两个按你的位置if (clickCount<30) {Size size = CCDirector::getInstance()->getWinSize();//定义两个位置int speed = CCRANDOM_0_1()*10;if (speed/2 == 0) {auto gree = (Menu *)getChildByTag(110)->getChildByTag(108);gree->setPosition(Point(size.width*0.5-150, size.height*0.5-50));auto red = (Menu *)getChildByTag(110)->getChildByTag(109);red->setPosition(Point(size.width*0.5+150, size.height*0.5-50));}else{auto gree = (Menu *)getChildByTag(110)->getChildByTag(108);gree->setPosition(Point(size.width*0.5+150, size.height*0.5-50));auto red = (Menu *)getChildByTag(110)->getChildByTag(109);red->setPosition(Point(size.width*0.5-150, size.height*0.5-50));}}
}
void HistoryGame02::redCallback(Object* pSender)
{Size size = CCDirector::getInstance()->getWinSize();auto sp_people2 = SWSpritePlayForTexturePacker::createPlay("blow_up",1, 3, 0.1f,true);sp_people2->setPosition(Point(size.width*0.5+150, size.height*0.5-50));sp_people2->setTag(106);addChild(sp_people2);this->scheduleOnce(schedule_selector(HistoryGame02::gameover), 1.0f);
}bool HistoryGame02::onTouchBegan(Touch *pTouch, Event  *pEvent){if (isInSprite(pTouch, (Sprite *)this->getChildByTag(102))) {//电线被点击//隐藏当前播放动画,显示结束动画Sprite *peo = (Sprite *)getChildByTag(101);peo->setOpacity(0);//加入人物的代码动画(显示等待)Size size = CCDirector::getInstance()->getWinSize();auto sp_people2 = SWSpritePlayForTexturePacker::createPlay("hero",5, 11, 0.5f,false);sp_people2->setPosition(Point(size.width*0.5+150,size.height*0.5-20));addChild(sp_people2);this->scheduleOnce(schedule_selector(HistoryGame02::gameover), 3.0f);return false;}else if(isInSprite(pTouch, (Sprite *)this->getChildByTag(103))){//按钮被点击//隐藏当前播放动画,显示结束动画Sprite *peo = (Sprite *)getChildByTag(104);peo->setOpacity(0);//加入人物的代码动画(显示等待)Size size = CCDirector::getInstance()->getWinSize();auto sp_people2 = SWSpritePlayForTexturePacker::createPlay("computerclose",1, 5, 0.5f,false);sp_people2->setPosition(Point(size.width*0.5-245,size.height*0.5+68));addChild(sp_people2);this->scheduleOnce(schedule_selector(HistoryGame02::gamewin), 3.0f);return false;}return false;
}bool HistoryGame02::isInSprite(Touch *theTouch,Sprite *sp){if (sp != NULL) {//返回当前触摸位置得OpenGL坐标Point touchPoint = theTouch->getLocation();//将世界坐标转换为当前得父View的本地坐标Point reallyPoint = this->getParent()->convertToNodeSpace(touchPoint);//获取当前基于父View的坐标系Rect rect = sp->boundingBox();if (rect.containsPoint(reallyPoint)) {//判断是否让用户再点击if (isClickGo) {isClickGo = false;return true;}else{return false;}}}return false;
}void HistoryGame02::gameover(float over){auto spss = (Sprite *)getChildByTag(106);spss->pause();//游戏失败Size size = CCDirector::getInstance()->getWinSize();LayerColor *layer = LayerColor::create(Color4B(0, 0, 0, 200), size.width, size.height);auto sp = Sprite::createWithSpriteFrameName("bg.png");sp->setPosition(Point(size.width*0.5, size.height*0.5));layer->addChild(sp);LabelTTF *scorettf = LabelTTF::create("失败", "MarkerFelt-Thin", 60);scorettf->setPosition(Point(size.width*0.5, size.height*0.5));layer->addChild(scorettf);this->addChild(layer);}void HistoryGame02::gamewin(float win){Size size = CCDirector::getInstance()->getWinSize();LayerColor *layer = LayerColor::create(Color4B(0, 0, 0, 200), size.width, size.height);auto sp = Sprite::createWithSpriteFrameName("bg.png");sp->setPosition(Point(size.width*0.5, size.height*0.5));layer->addChild(sp);LabelTTF *scorettf = LabelTTF::create("成功", "MarkerFelt-Thin", 60);scorettf->setPosition(Point(size.width*0.5, size.height*0.5));layer->addChild(scorettf);this->addChild(layer);
}

好了这样简单的一关就做好了,大家继续努力

飞机直达,下载地址

最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 003第二关:点击绿色按钮100下相关推荐

  1. 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 004第三关:让坦克过桥

    写在前面的话 ,最近的时间比较紧张,没有多余的时间来写博客,也没有什么实际来写代码,通过写这些博客我发现了一些问题,游戏中用到的技术都是一些基本的很平常的技术,大家只要努力的学习,就一定能够学会的,做 ...

  2. 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 001主画面以及关卡选择画面的制作

    cocs2d的开发环境我相信大家都能搭建好了,下面我们直接的进入正题,开始做我们的小游戏,如果对搭建环境还有不懂的童鞋请看我写的这篇博文 cocos2d-x 3.0游戏开发xcode5帅印博客教学 0 ...

  3. 最新cocos2d-x 3.0博客教学 小游戏[史上最坑爹的游戏] 002第一关:关闭卡死的电脑

    昨天做了主画面的选择,今天做第一关的关闭卡死的电脑,这个小游戏,这个游戏是很多的小游戏组合起来的,所以我们逐个击破,第一个游戏到底要如何做呢? 看看今天实现第一关的效果 这个第一个游戏不算太难 首先我 ...

  4. 最新hexo+github搭建个人博客详细教程

    最新hexo+github搭建个人博客详细教程 这是作者自己利用hexo+github搭建博客的完整过程,对自己搭建过程中踩过的坑做一个简单记录. 本人博客最终展示效果:https://huanyay ...

  5. 卢松松主题php,2017最新卢松松网站模板博客版 Zblog主题模板PHP程序 SEO最好的主题模板...

    2017最新卢松松网站模板博客版 Zblog主题模板PHP程序 SEO最好的主题模板 特别说明: 1.永久升级,免费更新 2.本店只出售模板,不提修改定制,图片编辑美工等等服务. 3.非常利于SEO优 ...

  6. 使用hugo生成静态博客并部署在GitHub上

    使用hugo生成静态博客并部署在GitHub上 hugo是一个用Go语言编写的静态网页生成器,只需要一个命令 hugo 就可以在几秒钟内生成一个静态的博客页面,被称为世界上最快的网站构建框架,使hug ...

  7. 即时通讯音视频开发(0):零基础,史上最通俗视频编码技术入门

    [来源申明]本文引用了微信公众号"鲜枣课堂"的<视频编码零基础入门>文章内容.为了更好的内容呈现,即时通讯网在引用和收录时内容有改动,转载时请注明原文来源信息,尊重原作 ...

  8. ModStartBlog v6.0.0 博客标签页面,采集接口增强

    系统介绍 ModStart 是一个基于 Laravel 模块化极速开发框架.模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发. 系统完全开源,基于 Apache 2.0 ...

  9. 【SSM框架最新项目】搭建个人博客实例讲解

    项目介绍 本项目为个人博客项目,旨在对SSM的综合应用,提高大家对这三个框架的的基本使用能力,项目分为前台和后台,博客基本的功能齐全. 技术架构 Spring+SpringMVC+Mybatis+My ...

最新文章

  1. java mybatis狂神说sql_帮你搞定Java面试,不要再错过了
  2. mysql--------命令来操作表
  3. NND年年回家这么难买火车票
  4. java中判断Object对象类型
  5. 小便利——免密钥简单写法
  6. linux-04-磁盘命令+进程命令
  7. Java泛型初探————泛型通配
  8. Linux技术学习要点,您掌握了吗---初学者必看
  9. 【奇技淫巧】在安卓模拟器中安装busybox
  10. NET 连接池救生员
  11. Spring整合Quartz
  12. MySQL基础面试题总结
  13. 鸿蒙太空是什么意思,[评论]林黛玉:“眼泪还债”暗洒闲抛知为谁?
  14. 基于hyperleger fabric区块链的校园化妆品交易平台搭建
  15. python猜字游戏
  16. 计算机制图专业是什么,专业设计制图需要什么样的电脑?制图电脑配置要求 (全文)...
  17. inventor(2):设置单位,显示完整工具区/功能区,创建分割面
  18. U盘中的文件夹都变成了.exe文件
  19. 剑三游戏总是显示服务器繁忙,剑网三缘起:终究低估了老玩家的热情,服务器被挤爆...
  20. 【无线串口模块应用实例】防小人不防君子的智慧安防监测系统

热门文章

  1. 关于sklearn因子分析(factor analysis)中因子旋转的问题
  2. 聊聊身边的嵌入式,热卖的九阳豆浆机,为什么藏着财富密码?
  3. 战略的意义与战略的产生——剖析盛大的网游新战略
  4. 数据转换软件_数据转换
  5. CAN总线与RS485的区别
  6. 【Linux】文本编辑器Vim
  7. 为什么大多数人的网站建设都是失败的?
  8. web服务器、应用服务器、web应用框架的关系
  9. EICAR测试反病毒软件代码
  10. seata的形象化比喻