終於到了最後的戰役了。
前面我們已經讓蛇可以到處跑,可以生長,可以喫食物。不過呢,雖然是它的“地盤”,也是有一定區域的,出了這個區域,它就會被宰掉。。。
現在我們就來對蛇有沒有出這個區域作判定
由於是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");
這樣,這款貪喫蛇就算完成了
大家還可以加入菜單界面,幫助界面,將它做完整。