小小菜之Cocos2d-x遊戲開發旅程——項目實例:貪喫蛇(5)

終於到了最後的戰役了。
前面我們已經讓蛇可以到處跑,可以生長,可以喫食物。不過呢,雖然是它的“地盤”,也是有一定區域的,出了這個區域,它就會被宰掉。。。
現在我們就來對蛇有沒有出這個區域作判定

由於是10*10的格子,那麼行數比0小或者比10大,列數比0小或者比10大,就是出了這個區域,它就會掛掉。

//判斷死亡
    if(head->row >= 10 || head->row < 0 || head->col >= 10 || head->col < 0)
    {
        SimpleAudioEngine::getInstance()->stopBackgroundMusic();
        SimpleAudioEngine::getInstance()->playEffect("gameover.mp3");
        GameOver();
    }

出了區域會死,在區域裏它也不能喫掉自己,不然也會死
所以一旦頭撞到了身體,就相當於自己咬到自己了

//撞身體死亡
    for(long i = allBody.size() - 1 ; i >= 0; i--)
    {
        auto nobody = allBody.at(i);
        if (head->row == nobody->row && head->col == nobody->col) {
            SimpleAudioEngine::getInstance()->stopBackgroundMusic();
            SimpleAudioEngine::getInstance()->playEffect("gameover.mp3");
            GameOver();
        }
    }

這樣,死亡判定就完成了

最後,我們可以加入背景音樂 和分數
背景音樂

SimpleAudioEngine::getInstance()->playBackgroundMusic("game_scene_bg.mp3" , true);

分數:
首先定義一個全局變量score,初始化爲0
在喫掉食物時讓score加100
然後放到label中

//初始化分數
    score = 0;
    auto l_score = Label::createWithBMFont("font-issue1343-hd.fnt", "Score 0");
    l_score->setPositionX(visibleSize.width/2);
    l_score->setPositionY(gn->getPositionY() - 80);
    l_score->setTag(TAG_SCORE);
    this->addChild(l_score);
 //分數改變
        score+=50;
        auto lscore = (Label *)this->getChildByTag(TAG_SCORE);

        lscore->setString(StringUtils::format("Score %d" , score));
//喫掉食物時加音效
SimpleAudioEngine::getInstance()->playEffect("moved.wav");

這樣,這款貪喫蛇就算完成了

大家還可以加入菜單界面,幫助界面,將它做完整。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章