第三十六節(jié) 實現(xiàn)計分系統(tǒng)

到底是有多少功能,需要使用“系統(tǒng)”來形容?其實功能非常簡單,使用“系統(tǒng)”來形容開發(fā)任務(wù)能夠讓你更加“系統(tǒng)化”的去開發(fā)這個功能,你就會考慮的更加全面。例如換一種說法:添加一個小小的計分功能,那么在開發(fā)過程中,這個功能可能得不到你的重視,然后就會很隨便的寫一下,實現(xiàn)功能即可。
我以前剛學編程的時候,我會在房間門口貼著“貝爾實驗室”,因為C語言是從這里誕生的,在房間敲代碼時專注度非常高。

那么,分析一下該“系統(tǒng)”該如何實現(xiàn)?

首先,需要顯示分數(shù)的地方有2個:當前分數(shù)和最高分數(shù)。
然后,更新分數(shù)的地方有3個:
游戲啟動:從存檔讀取上一次分數(shù),沒有則設(shè)置為0
消除時:消除時增加分數(shù),如果分數(shù)高于歷史,則同時更新最高分
重置游戲時:當前分數(shù)歸零,最高分保存不變

按這么算,即使是最復雜的情況也可能不到10行代碼(不計算初始化對象)。所以直接寫在導演類中就可以了,不需要單獨分離一個類來處理。

開始實現(xiàn):

01.綁定對象

將場景中的“當前分數(shù)”和“最高分數(shù)”對象拖動至導演類對應(yīng)的對象上:


02.添加成員

先添加“當前分數(shù)”和“最高分數(shù)”對應(yīng)的腳本對象:

// 當前分數(shù)
public GameObject Score;
ScoreScreen _currentScore;
// 最高分數(shù)
public GameObject HighScore;
ScoreScreen _highScore;

添加兩個表示分數(shù)的成員變量。在添加這兩個變量時發(fā)現(xiàn)命名會與剛剛添加的腳本對象的引用產(chǎn)生沖突,經(jīng)過思索,決定添加一個后綴來區(qū)分,同時那些場景中對象引用的名稱也添加一個后綴與腳本名區(qū)分開來:
類似public GameObject ScreenMain;這種的變量名添加“Obj”,腳本引用添加“Script”:

// 主屏幕
public GameObject ScreenMainObj;
ScreenMain _screenMainScript;
// 附加屏幕
public GameObject ScreenAttachedObj;
// 當前分數(shù)
public GameObject ScoreObj;
ScoreScreen _currentScoreScript;
// 最高分數(shù)
public GameObject HighScoreObj;
ScoreScreen _highScoreScript;
// 關(guān)卡
public GameObject LevelObj;
// 暫停提示
public GameObject PauseHintObj;

記得修改變量名后,導演對象中的對象引用需要重新指定。
然后這是新添加的兩個成員變量:

int _currentScore;          // 當前分數(shù)
int _highScore;             // 最高分數(shù)
03.初始化新加的成員
// 初始化分數(shù)
_currentScoreScript = ScoreObj.GetComponent<ScoreScreen>();
if (_currentScoreScript == null) return false;
_highScoreScript = HighScoreObj.GetComponent<ScoreScreen>();
if (_highScoreScript == null) return false;
_currentScoreScript.SetScore(_currentScore);
_highScoreScript.SetScore(_highScore);
04.在消除時更新分數(shù)

為了讓計分看起來更精致,可以將更新分數(shù)寫在ClearOnePoint()方法中,這樣,計分就好像多了動畫一樣,而不是一下就跳到最終分數(shù)。

// 更新分數(shù)
_currentScore++;
if (_currentScore > _highScore) _highScore = _currentScore;
_currentScoreScript.SetScore(_currentScore);
_highScoreScript.SetScore(_highScore);
05.計分規(guī)則

通過判斷消除的行數(shù)來修改增加的分數(shù):
消除1行:每個點增加1分,共增加10分
消除2行:每個點增加2分,共增加40分
消除3行:每個點增加3分,共增加90分
消除4行:每個點增加4分,共增加160分

// 更新分數(shù)
switch (_needClearLines.Count)
{
    case 1: _currentScore += 1; break;
    case 2: _currentScore += 2; break;
    case 3: _currentScore += 3; break;
    case 4: _currentScore += 4; break;
}
if (_currentScore > _highScore) _highScore = _currentScore;
_currentScoreScript.SetScore(_currentScore);
_highScoreScript.SetScore(_highScore);

測試結(jié)果如下:


代碼鏈接:https://pan.baidu.com/s/1ji3nTes7Uwyn5KaqikBr8Q
提取碼:df5v

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,123評論 6 13
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,136評論 1 32
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,632評論 1 45
  • 一、信用內(nèi)涵的界定 【】應(yīng)收應(yīng)付【】預(yù)收預(yù)付 二、信用的產(chǎn)生與信用形式的演進 (一)信用的產(chǎn)生 前提條件: 財產(chǎn)私...
    旋律sama閱讀 417評論 0 0
  • 剩一天考試了,我很著急。可我在你們的身上看不到著急。 周四的我看到你們的測試卷,令我所有的驚喜期待都...
    楊琪雨閱讀 99評論 0 0