Beispiel #1
0
bool GameScene::init(){
    if ( !Layer::init() )
    {
        return false;
    }
    auto touchLister = EventListenerTouchOneByOne::create();
    touchLister->onTouchBegan =CC_CALLBACK_2(GameScene::onTouchBegan, this);
    touchLister->onTouchEnded =CC_CALLBACK_2(GameScene::onTouchEnded, this);
    _eventDispatcher->addEventListenerWithSceneGraphPriority(touchLister,this);
    
    //加入游戏的背景颜色
    auto layerColorBG = cocos2d::LayerColor::create(cocos2d::Color4B(180,170,160,255));
    this->addChild(layerColorBG);
    
    Size visibleSize = Director::getInstance()->getVisibleSize();
    //创建卡片
    createCardSprite(visibleSize);
    
//    //创建2张自动生成卡片
    autoCreateCardNumber();
    autoCreateCardNumber();
    //加入“分数”label
    auto labelTTFCardNumberName = LabelTTF::create("SCORE","HiraKakuProN-W6",80);
    labelTTFCardNumberName->setPosition(Point(visibleSize.width/3,visibleSize.height-40));
    addChild(labelTTFCardNumberName);
    
    //加入具体的分数
    labelTTFCardNumber = LabelTTF::create("0","HiraKakuProN-w6",80);
    labelTTFCardNumber->setPosition(Point(visibleSize.width-400,visibleSize.height-50));
    addChild(labelTTFCardNumber);
    
    return true;
}
bool HelloWorld::init()
{
	if (!Layer::init())
	{
		return false;
	}
	m_score = 0;

	Size visibleSize = Director::getInstance()->getVisibleSize();


	//退出程序
	auto listenerEnd = EventListenerKeyboard::create();
	listenerEnd->onKeyReleased = CC_CALLBACK_2(HelloWorld::onKeyReleased, this);
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listenerEnd, this);


	auto layerColorBG = LayerColor::create(Color4B(180, 170, 160, 255));
	addChild(layerColorBG);

	auto labTTFCardNumberName = Label::createWithSystemFont("Score", "fonts/arial.ttf", 60);
	labTTFCardNumberName->setPosition(Point(visibleSize.width / 5, visibleSize.height - 70));
	addChild(labTTFCardNumberName);

	labTTFCardNumber = Label::createWithSystemFont("0", "fonts/arial.ttf", 60);
	labTTFCardNumber->setPosition(Point(visibleSize.width / 2 + 100, visibleSize.height - 70));
	addChild(labTTFCardNumber);


	auto listen = EventListenerTouchOneByOne::create();
	listen->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this);
	listen->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this);
	Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listen, this);

	//设置重来按钮
	auto m_bunt = ui::Button::create("normal.png", "selected.png");
	m_bunt->setScale9Enabled(true);//可拉伸图片
	m_bunt->setTitleText("Begen");
	m_bunt->setTitleFontSize(50);
	m_bunt->setTitleFontName("fonts/arial.ttf");
	m_bunt->setContentSize(cocos2d::Size(visibleSize.width / 10+200, visibleSize.height / 15));
	m_bunt->setPosition(Point(visibleSize.width / 5 + 180, visibleSize.height - 150));
	m_bunt->addTouchEventListener(CC_CALLBACK_2(HelloWorld::touchEvent, this));
	addChild(m_bunt);


	creatCard(visibleSize);

	autoCreateCardNumber();
	autoCreateCardNumber();

	return true;
}
void HelloWorld::autoCreateCardNumber(){
	int i = CCRANDOM_0_1() * 4;
	int j = CCRANDOM_0_1() * 4;

	if (carArr[i][j]->getNumber() > 0){
		autoCreateCardNumber();
	}else{
		carArr[i][j]->setNumber(CCRANDOM_0_1() * 10 < 1 ? 4 : 2);
	}
}
void HelloWorld::onTouchEnded(Touch *touch, Event *unused_event){
	Point touchPo = touch->getLocation();
	endX = firstX - touchPo.x;
	endY = firstY - touchPo.y;

	if (abs(endX) > abs(endY)){//绝对值
		//左右
		if (endX+5>0){
			//左边
			if (doLeft()){
				autoCreateCardNumber();
				doCheckGameOver();
			}
		}else{
			//右边
			if (doRight()){
				autoCreateCardNumber();
				doCheckGameOver();
			}
		}
	}else{
		//上下
		if (endY + 5 < 0){
			//上
			if (doUp()){
				autoCreateCardNumber();
				doCheckGameOver();
			}
		}else{
			//下
			if (doDown()){
				autoCreateCardNumber();
				doCheckGameOver();
			}
		}
	}
}
Beispiel #5
0
//自动生成卡片
void GameScene::autoCreateCardNumber()
{
    int i = CCRANDOM_0_1()*4;
    int j = CCRANDOM_0_1()*4;
    
    //判断是否这个位置已存在卡片
    if(cardArr[i][j]->getNumber() > 0)
    {
        autoCreateCardNumber();
    }
    else
    {
        cardArr[i][j]->setNumber(CCRANDOM_0_1()*10 < 1 ? 2: 4);
    }
}
//判断游戏是否还能继续
void HelloWorld::doCheckGameOver(){
    bool isGameOver = true;
    for (int y = 0; y < 4; y++) {
        for (int x = 0; x < 4; x++) {
            if (cardArr[x][y]->getNumber() == 0||
                (x>0&&(cardArr[x][y]->getNumber() == cardArr[x-1][y]->getNumber()))||
                (x<3&&(cardArr[x][y]->getNumber() == cardArr[x+1][y]->getNumber()))||
                (y>0&&(cardArr[x][y]->getNumber() == cardArr[x][y-1]->getNumber()))||
                (y<3&&(cardArr[x][y]->getNumber() == cardArr[x][y+1]->getNumber()))) {
                isGameOver = false;
            }
        }
    }
    if (isGameOver) {  
        //游戏结束,重新开始游戏  
        log("游戏结束");  
        Director::getInstance()->replaceScene(TransitionFade::create(1, HelloWorld::createScene()));  
	}else{
	autoCreateCardNumber();
	} 
}