
上一篇中我們已經(jīng)得到了一個比較完善的游戲,不過有人反饋說目前的難度較大,第三關(guān)已經(jīng)很難通過了。今天我們來做點小的修改。
如果你認(rèn)為我們要通過調(diào)整參數(shù)降低游戲的難度,那你就錯了。作為游戲的開發(fā)者,我們最大的優(yōu)勢就是擁有上帝視角,可以隨意讓游戲按照我們的要求變化。
添加獎勵
目前的三滴血不太夠用,我們添加一個功能,每得到500分就另外獲得一滴血。實現(xiàn)起來很簡單,只需要在計算分?jǐn)?shù)的時候修改就好,代碼如下:
void Setting::TankDamaged()
{
m_nTankNum--;
m_nSumScore += m_nTankScore;
m_nTankLevel = m_nSumScore / 150 + 1;
if (m_nSumScore % 500 < m_nTankScore)
{
m_nLife++;
}
m_nTankSum++;
if (m_nTankNum == 0)
{
m_bNewLevel = true;
}
}
在敵人坦克被擊中時,我們調(diào)用了TankDamaged()函數(shù)計算最新的分?jǐn)?shù),每當(dāng)獲得500分時,就讓m_nLife屬性+1。隨著關(guān)卡難度的增加,擊中敵人坦克得到的分?jǐn)?shù)會越來越多,得到500分得時間也就會越來越短,是不是想死都難呢?
超級武器
如果你還覺得不過癮,我們可以給主戰(zhàn)坦克添加一個超級武器。當(dāng)我們按下“Q”鍵時,同時向四個方向發(fā)射炮彈。在main函數(shù)中添加“Q”鍵的相應(yīng),代碼如下:
// Q
case 113:
dirBak = mainTank.GetDir();
mainTank.SetDir(Dir::UP);
mainTank.Shoot(lstMainTankBullets);
mainTank.SetDir(Dir::DOWN);
mainTank.Shoot(lstMainTankBullets);
mainTank.SetDir(Dir::LEFT);
mainTank.Shoot(lstMainTankBullets);
mainTank.SetDir(Dir::RIGHT);
mainTank.Shoot(lstMainTankBullets);
mainTank.SetDir(dirBak);
break;
Q的鍵值為113。捕捉到事件后,首先記錄當(dāng)前的坦克方向,之后修改坦克方向并調(diào)用Shoot方法,最后把當(dāng)前坦克方向恢復(fù)回來。看看效果吧。

其他方法
如果還覺得不過癮,你可以繼續(xù)發(fā)揮想象力添加自己喜歡的功能。比如:
- 按下“B”鍵,所有敵人坦克自動爆炸
- 按下“M"鍵,所有敵人坦克不再開炮
- 按下“S”鍵,所有敵人坦克靜止不動
- 按下“T”鍵,主戰(zhàn)坦克打不死
是不是覺得敵人坦克被玩弄于自己的手心里,快去自己實現(xiàn)一下吧。相信大家很容易就能做出這些效果。也許在過程中,你還能自己解鎖很多新的玩法。
今天的源碼請在GitHub中下載。
結(jié)束語
這個專題的內(nèi)容到此告一段落,戰(zhàn)線拉得有點長,幸好最終完成了。感謝大家的支持。
總體上講,這個小項目還算成功,很多人發(fā)郵件說終于找到了一個合適的進(jìn)階項目,每次收到這樣的留言我都很欣慰。
不過,也有遺憾。這個系列的受歡迎程度明顯不如前面的基礎(chǔ)內(nèi)容,整個系列沒有一次打賞,最后的這幾篇甚至閱讀的人數(shù)都很少。這一度讓我覺得很受挫,為什么我覺得有價值的東西卻不被讀者看好呢。這導(dǎo)致之前設(shè)計的一些難度較大的Feature最終沒有實現(xiàn),因為到后面確實有點失去動力。
后面我會多和大家交流,開設(shè)一些需求度更高的專題。也希望關(guān)注我的朋友們可以通過郵件、微信、微博和私信的方式多向我反饋你們的意見,我期待了解大家究竟希望讀到些什么。
好了,我們下一個系列見~
我是天花板,讓我們一起在軟件開發(fā)中自我迭代。
如有任何問題,歡迎與我聯(lián)系。