在本書的精華集1中講解了游戲計算得分的方法。這些方法對普通的小游戲足夠用了,但是在一些大型的、商業的游戲中會顯得不足。玩游戲的人都知道有個整人專家(FPE),是專門來修改游戲的。它的運行方式就是從內存中查找出游戲主角的某些屬性的存放地址,然後將這些屬性改成需要的任何數值;或者把某些數值(比如生命值)鎖定,然後游戲就成了不死版本。這類工具對于Flash游戲同樣適用,這就給Flash游戲編程人員提出了更高的要求。如何來對付這種游戲修改工具呢?辦法是有的,下面列出幾種方法來對付這種工具。
分數加密法
在客戶端積分使用加密保存,而且使用圖形量化顯示(比如街霸那樣的生命血),這樣作弊者除非跟蹤傳送的數據(還有一種工具是可以截取並修改這種傳送數據的),否則就無法看到最後呈報給服務器的積分。至于分數加密的辦法就多了,比如說按位異或,加大或者減小相應的倍數、轉換成字符串保存,轉換成其他進制字符串保存等。
時間控制法
可以把分數和游戲的事件聯系起來。首先設定一個定時器,定時去判斷分數變化是否異常,比如說分數增加得快到游戲中不可能的情況時,就用備份的分數覆蓋分數變量。如果沒問題,用當前分數的值覆蓋備份的分數變量。這種辦法從理論上看可行,但是實際上有一個新問題,就是如何保證備份的分數數據不被修改。這個當然也有辦法,就是對備份的分數進行運算。這等于在第一種辦法上加了一個雙保險。
欺騙法
在用前面的辦法處理這些數據之後,有意用一個變量來存放這個數值,然後根本不用這個變量來控制,結果就是通過修改工具的確找到了要找的內容,但是改了之後根本不會影響游戲的得分。
拆分法
可以把得分的值分解成兩塊甚至更多塊,其中一塊的值用隨機數產生,然後再用得分減去這個隨機數,得到實際的值。結果不言而喻,兩個地方的值全是隨機數,讓修改工具無法找到。而每次得分變化時就取這兩個地方的值拼起來,然後再加上新增加的分數減去隨機數來計算出另一個位置的值。
存放地址重新分配法
前面用的方法都是數值保護法,還有一種辦法就是地址保護法,也就是讓這些數據每次存放的地址不同,這樣通過修改工具無法鎖定一個地址來查找!在Flash中有new命令,可以創建新的對象,通過這個命令就可以動態修改變量存放的地址。
上面提到的這些辦法都是一些理論上的辦法,而且不一定是針對得分的,還可以保護生命值、戰斗力等相關數據。當然,在實際應用過程中還要根據游戲的內容來創新,創造出一些更好的加密方法。

