//
// CGameLayer.cpp
// MyPopStar
//
// Created by sky on 14-9-15.
//
//
#define winSize Director::getInstance()->getWinSize()
#include "CGameLayer.h"
CGameLayer::CGameLayer():m_sameNum(0),m_sameNumOver(0),m_score(0)
{
}
CGameLayer::~CGameLayer()
{
}
Scene* CGameLayer::createGameScene()
{
Scene *gsc = Scene::create();
CGameLayer *layer = CGameLayer::create();
gsc -> addChild(layer);
CStataLayer *stateL = CStataLayer::create();
layer -> setScoreFunc = std::bind(&CStataLayer::setScore, stateL,std::placeholders::_1);
gsc -> addChild(stateL);
return gsc;
}
bool CGameLayer::init()
{
if (!Layer::init()) {
return false;
}
createArray();
createAllStar();
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = std::bind(&CGameLayer::onTouchBegan, this,std::placeholders::_1,std::placeholders::_2);
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
return true;
}
bool CGameLayer::onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *event)
{
Vec2 pos = touch -> getLocation();
CCLOG("---onTouchBegan:(%f,%f)---",pos.x,pos.y);
for (Node *node : this -> getChildren()) {
CStar *star = dynamic_cast<CStar*>(node);
if (star && star->getBoundingBox().containsPoint(pos))
{
if(star->m_hasSelected)
{
ifSelectedDo(star);
}
else
{
ifNoSelectedDo(star);
}
break;
}
}
return true;
}
void CGameLayer::ifSelectedDo(CStar *star)
{
CCLOG("---ifSelectedDo---");
deleteSameStar();
if (m_sameNum<=3) {
m_score += m_sameNum*5;
}
else{
m_score += m_sameNum*10;
}
setScoreFunc(m_score);
return;
}
void CGameLayer::ifNoSelectedDo(CStar *star)
{
CCLOG("---ifNoSelectedDo---");
//首先移除所有星星的被选中状态
for (int i = 0; i<10; i++)
{
for(CStar *star : m_starArray[i])
{
star -> cancleSelected();
}
}
m_sameNum = 1;
star->beSelected();
getSameStar(star);
if(m_sameNum>1)
{
}
else
{
//删除所有被选中状态
for (int i = 0; i<10; i++)
{
for(CStar *star : m_starArray[i])
{
star -> cancleSelected();
}
}
}
CCLOG("---m_sameNum:%d---",m_sameNum);
return;
}
void CGameLayer::deleteSameStar()
{
for (int i = 0; i<10; i++)
{
for(int j = 0;j<m_starArray[i].size();j++)
{
CStar *star = m_starArray[i].at(j);
if (star->m_hasSelected)
{
//动态数组,移除后后面的元素自动前移,之后更新星星的位置
m_starArray[i].eraseObject(star);
// m_starArray[i].pushBack(NULL);
j--;
removeAndaddParticleEffect(star);
}
}
}
moveStarDown();
// moveStarLeft(0);
//必须等动画执行完毕才能执行下一个动作
scheduleOnce(schedule_selector(CGameLayer::moveStarLeft), 0.2f);
scheduleOnce(schedule_selector(CGameLayer::isGameOver), 0.5f);
return;
}
void CGameLayer::removeAndaddParticleEffect(CStar* star)
{
Vec2 pos = star->getPosition();
ParticleSystem *starEffect = ParticleSystemQuad::create("star.plist");
starEffect -> setPosition(pos);
this -> addChild(starEffect,1);
star -> removeFromParentAndCleanup(true);
return;
}
void CGameLayer::getSameStar(CStar *star)
{
// CCLOG("---get same star---");
//up star
if(isExist(star->px, star->py+1) && star->m_type == m_starArray[star->px].at(star->py+1)->m_type && !m_starArray[star->px].at(star->py+1)-> m_toUp )
{
m_sameNum++;
m_sameNumOver++;
m_starArray[star->px].at(star->py+1)->m_toUp = true;
m_starArray[star->px].at(star->py+1)->beSelected();
//递归找到相同的星星
getSameStar(m_starArray[star->px].at(star->py+1));
}
//down star
if(isExist(star->px, star->py-1) && star->m_type == m_starArray[star->px].at(star->py-1)->m_type && !m_starArray[star->px].at(star->py-1)->m_toDown)
{
m_starArray[star->px].at(star->py-1)->beSelected();
m_starArray[star->px].at(star->py-1)->m_toDown = true;
m_sameNum++;
m_sameNumOver++;
//递归找到相同的星星
getSameStar(m_starArray[star->px].at(star->py-1));
}
//left star
if(isExist(star->px-1, star->py) && star->m_type == m_starArray[star->px-1].at(star->py)->m_type && !m_starArray[star->px-1].at(star->py)->m_toLeft)
{
m_starArray[star->px-1].at(star->py)->beSelected();
m_starArray[star->px-1].at(star->py)->m_toLeft = true;
m_sameNum++;
m_sameNumOver++;
//递归找到相同的星星
getSameStar(m_starArray[star->px-1].at(star->py));
}
//right star
if(isExist(star->px+1, star->py) && star->m_type == m_starArray[star->px+1].at(star->py)->m_type && ! m_starArray[star->px+1].at(star->py)->m_toRight)
{
m_starArray[star->px+1].at(star->py)->beSelected();
m_starArray[star->px+1].at(star->py)->m_toRight = true;
m_sameNum++;
m_sameNumOver++;
//递归找到相同的星星
getSameStar( m_starArray[star->px+1].at(star->py));
}
return;
}
bool CGameLayer::isExist(int x, int y)
{
if (x>=0 && x< m_starArray.size() && y>=0 && y<m_starArray[x].size())
{
return true;
}
return false;
}
void CGameLayer:: createArray()
{
for (int y = 0; y<10; y++)
{
for (int x = 0; x<10; x++)
{
Vec2 pos = Vec2(32+64*x, 32+64*y);
m_starPosArray[x][y]=pos;
}
}
return;
}
void CGameLayer::createAllStar()
{
m_starArray.resize(10);
for (int x = 0; x<10; x++)
{
for (int y = 0; y<10; y++)
{
Vec2 pos = m_starPosArray[x][y];
// CCLOG("pos(%.f,%.f)",pos.x,pos.y);
CStar *star = CStar::createRand();
star -> setScale(0.5f);
star -> setPosition(pos);
star->px = x;
star->py = y;
this -> addChild(star);
m_starArray[x].pushBack(star);
}
}
return;
}
void CGameLayer::moveStarDown()
{
CCLOG("---move star down---");
for(int i = 0;i<10;i++)
{
for(int j = 0;j<m_starArray[i].size();j++)
{
CStar *star = m_starArray[i].at(j);
//m_starArray动态数组自动填补删除后的位置,此时需要刷新星星的坐标,使其和数组一致
if (star->getPosition() != m_starPosArray[i][j])
{
star ->py = j;
star -> runAction(MoveTo::create(0.15f, m_starPosArray[i][j]));
// star -> setPosition(m_starPosArray[i][j]);
}
}
}
return;
}
void CGameLayer::moveStarLeft(float dt)
{
CCLOG("---move star left---");
for(int i = 0;i<m_starArray.size();i++)
{
if (m_starArray[i].size() == 0)
{
std::vector<Vector<CStar*> >::iterator iter = m_starArray.begin()+i;
m_starArray.erase(iter);
i--;
}
}
for(int i = 0;i<m_starArray.size();i++)
{
for(int j = 0;j<m_starArray[i].size();j++)
{
CStar *star = m_starArray[i].at(j);
if (star->getPosition() != m_starPosArray[i][j])
{
star ->px = i;
star -> runAction(MoveTo::create(0.1f, m_starPosArray[i][j]));
// star -> setPosition(m_starPosArray[i][j]);
}
}
}
return;
}
void CGameLayer::isGameOver(float dt)
{
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
归档.zip (40个子文件)
Resources
select.png 3KB
5.png 31KB
CloseSelected.png 5KB
Icon-114.png 24KB
fonts
Marker Felt.ttf 25KB
CloseNormal.png 6KB
1.png 32KB
Icon-120.png 32KB
HelloWorld.png 136KB
.DS_Store 6KB
Icon-57.png 11KB
未命名文件夹
select.png 1KB
10.png 2KB
5.png 2KB
9.png 3KB
1.png 3KB
.DS_Store 6KB
6.png 3KB
2.png 2KB
7.png 2KB
4.png 3KB
8.png 2KB
3.png 3KB
star.plist 9KB
2.png 29KB
4.png 35KB
3.png 28KB
Classes
CStar.cpp 2KB
CStataLayer.h 435B
CGameLayer.h 2KB
AppDelegate.cpp 1KB
HelloWorldScene.h 612B
AppDelegate.h 947B
HelloWorldScene.cpp 3KB
.DS_Store 6KB
CStar.h 804B
CStataLayer.cpp 720B
CGameOverLayer.h 467B
CGameOverLayer.cpp 1KB
CGameLayer.cpp 9KB
共 40 条
- 1
资源评论
- lbdslzx2015-03-04不是很明白cocos2d,下下来学习下
SkyXU123123
- 粉丝: 43
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功