2012-01-18 33 views
7

在iphone遊戲「Tiny Tower」中,我猜測它使用了基於最後一次遊戲和當前時間之間所花費時間的某種模擬,因爲您可以設置當前時間並從中獲益假的經過時間跨度。如何在基於時間的模擬遊戲中防止基於時間的作弊?

是否有我可以用來防止這種事情的算法? (或至少讓普通用戶難以脫身!)

編輯:謝謝,我明白,儘管我的措辭,沒有辦法阻止你存儲在客戶端的東西,但我想至少比「改變時間」來破解它更難!

+3

任何時候正確性都依賴於用戶可以改變的變量,因此存在腐敗的可能性。 – corsiKa 2012-01-18 22:46:23

+0

雅,我不知道文獻是否有至少讓事情變得更難的方法.. – Timmy 2012-01-18 22:51:53

回答

4

GameCube遊戲機有辦法做到這一點所以它必須是可行的。

是否有事件在iphone時間設置時觸發?在這種情況下,你可以做出反應。

另一種解決方案是在遊戲啓動時要求在線,這樣你可以在遠程服務器上檢查時間

您可以很好地檢查電話登錄時是否有事件,或者喚醒對此作出反應,從而節省您在數據庫中的時間。你將有最後一次非修改時間。

最後一個可能的技巧是通過時間變化之前的操作(例如登錄)檢查您知道將要修改的文件,並檢查「上次修改」日期。

你也可以在GPS方向調查以及。 GPS需要與它接觸的衛星同步,所以它必須以某種方式跟蹤時間,也許有一個API。

不幸的是,你是在iphone上,這意味着你的可能性是有限的,因爲應用程序獲得很少的權利和沙箱。

編輯:

只是雖然這件事,但是,你可以創建在iPhone的日曆事件?並檢查它是否被觸動?因爲你可以設置一個虛假的會議或每天的東西。不乾淨,但有創意。編輯2:你可以設置一個計時器作爲IOS的代碼在60分鐘內執行嗎?如果可以,請設置此計時器,傳遞此代碼運行時的預期時間,然後在代碼運行時,比較並通知您的程序。

+0

謝謝,將回顧這些技巧..;) – Timmy 2012-01-18 23:02:34

2

防止它的一種方法是通過檢查數據庫中的登錄時間戳來監視時間傳遞。客戶的iPhone時間是否關閉並不重要;你最後的數據庫仍然知道自從上次登錄以來已經過了多長時間。

1

調用Web服務以獲取時間,而不是依賴電話。有幾個地方你可以得到時間,谷歌是你的朋友,我確信,或者自己創建一個,並使用服務運行時間的機器的本地時間。

您也可以使用Network Time Protocol (NTP) servers得到一個一致的時間

1

我認爲如果你有互聯網訪問,你可以從服務器上花時間。

第二種解決方案:您可以記錄「日期時間」,並且每次看到記錄日期時間和運行日期時間之間的「大」差異時,就會知道可能存在問題。 但我知道這不是優雅的。

您還可以記錄應用程序啓動的一小部分日期時間,並檢查運行日期時間的差異。

此外,您可以使用「活動」 - >「日期時間」,以便「更新」(水平等)不能重新獲得。

由於系統日期時間可以由用戶更改,因此存在「黑客」的可能性。

+0

雅,我並不太擔心遊戲被黑客攻擊se ..有動力的用戶會這樣做..只是想讓它對於大多數休閒用戶來說至少夠用! – Timmy 2012-01-18 23:03:19

+0

對大多數休閒用戶來說足夠堅硬嗎?通過使用上述方法,我認爲它已經夠難了。 (第二解決方案) – Sanosay 2012-01-18 23:05:16