#include "HelloWorldScene.h"
#include "CardSprite.h"
USING_NS_CC;
CCScene* HelloWorld::scene()
{
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
if ( !CCLayer::init() )
{
return false;
}
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
//加入游戏的背景颜色
auto layerColorBG = cocos2d::CCLayerColor::create(cocos2d::ccColor4B(ccc4(180,170,160,255)));
this->addChild(layerColorBG);
//在上方加入游戏的分数
//加入“分数”label
auto labelTTFCardNumberName = CCLabelTTF::create("SCORE","HiraKakuProN-W6",20);
//labelTTFCardNumberName->setPosition(ccp(visibleSize.width-450,visibleSize.height-40));
addChild(labelTTFCardNumberName);
//加入具体的分数
labelTTFCardNumber = CCLabelTTF::create("0","HiraKakuProN-w6",20);
//labelTTFCardNumber->setPosition(ccp(visibleSize.width-450,visibleSize.height-80));
addChild(labelTTFCardNumber);
//创建卡片
createCardSprite(visibleSize);
//创建2张自动生成卡片
autoCreateCardNumber();
autoCreateCardNumber();
this->setTouchEnabled(true);
return true;
}
//事件监听回调:触摸开始
void HelloWorld::ccTouchesBegan(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
//获取触点指针容器中第一个元素
CCSetIterator it = pTouches->begin();
//将其转化为触点信息
CCTouch* touch = (CCTouch*)(*it);
//取得触点位置
Mou = touch->getLocation();
firstX=Mou.x;
firstY=Mou.y;
//return true;
}
////鼠标移动
void HelloWorld::ccTouchesEnded(cocos2d::CCSet *pTouches, cocos2d::CCEvent *pEvent)
{
//获取触点指针容器中第一个元素
CCSetIterator it = pTouches->begin();
//将其转化为触点信息
CCTouch* touch = (CCTouch*)(*it);
//取得触点位置
CCPoint touchLocation = touch->getLocation();
endX = Mou.x - touchLocation.x;
endY = Mou.y - touchLocation.y;
//判断X轴和Y轴的移动距离,如果X轴的绝对值大,则向左右滑动,如果Y轴的绝对值大,则向上下滑动
if(abs(endX) > abs(endY))
{
//手势向左右
//判断向左还是向右
if(endX+5>0)
{
//向左
doLeft();
autoCreateCardNumber();
//判断游戏是否还能继续
doCheckGameOver();
}
else
{
//向右
doRight();
autoCreateCardNumber();
//判断游戏是否还能继续
doCheckGameOver();
}
}
else
{
//手势向上下
//判断手势向上还是向下
if(endY+5>0)
{
//向下
doDown();
autoCreateCardNumber();
//判断游戏是否还能继续
doCheckGameOver();
}
else
{
//向上
doUp();
autoCreateCardNumber();
//判断游戏是否还能继续
doCheckGameOver();
}
}
}
//滑向上下左右的方法
bool HelloWorld::doUp()
{
bool isdo = false;
for (int x = 0; x < 4; x++) {
for (int y = 3; y >= 0; y--) {
for (int y1 = y - 1; y1 >= 0; y1--) {
if (cardArr[x][y1]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());
cardArr[x][y1]->setNumber(0);
y++;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x][y1]->setNumber(0);
//改变分数
score += cardArr[x][y]->getNumber();
labelTTFCardNumber->setString(CCString::createWithFormat("%d",score)->getCString());
isdo = true;
}
break;
}
}
}
}
return isdo;
}
bool HelloWorld::doDown()
{
bool isdo = false;
for (int x = 0; x < 4; x++) {
for (int y = 0; y < 4; y++) {
for (int y1 = y + 1; y1 < 4; y1++) {
if (cardArr[x][y1]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber());
cardArr[x][y1]->setNumber(0);
y--;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x][y1]->setNumber(0);
//改变分数
score += cardArr[x][y]->getNumber();
labelTTFCardNumber->setString(CCString::createWithFormat("%d",score)->getCString());
isdo = true;
}
break;
}
}
}
}
return isdo;
}
bool HelloWorld::doLeft()
{
bool isdo = false;
for (int y = 0; y < 4; y++) {
for (int x = 0; x < 4; x++) {
for (int x1 = x + 1; x1 < 4; x1++) {
if (cardArr[x1][y]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());
cardArr[x1][y]->setNumber(0);
x--;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x1][y]->setNumber(0);
//改变分数
score += cardArr[x][y]->getNumber();
labelTTFCardNumber->setString(CCString::createWithFormat("%d",score)->getCString());
isdo = true;
}
break;
}
}
}
}
return isdo;
}
bool HelloWorld::doRight()
{
bool isdo = false;
for (int y = 0; y < 4; y++) {
for (int x = 3; x >= 0; x--) {
for (int x1 = x - 1; x1 >= 0; x1--) {
if (cardArr[x1][y]->getNumber() > 0) {
if (cardArr[x][y]->getNumber() <= 0) {
cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber());
cardArr[x1][y]->setNumber(0);
x++;
isdo = true;
}else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){
cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2);
cardArr[x1][y]->setNumber(0);
//改变分数
score += cardArr[x][y]->getNumber();
labelTTFCardNumber->setString(CCString::createWithFormat("%d",score)->getCString());
isdo = true;
}
break;
}
}
}
}
return isdo;
}
- 1
- 2
- 3
- 4
前往页