小小菜之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");

这样,这款贪吃蛇就算完成了

大家还可以加入菜单界面,帮助界面,将它做完整。

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