2 回答

TA貢獻1874條經驗 獲得超12個贊
您可以使用 2 個屬性:1 個用于硬幣計數器,1 個用于每秒硬幣數。每當您使用硬幣屬性時,您都會計算自上次使用硬幣計數器以來您賺取的新硬幣,這有點“假裝”就像硬幣一直在計數一樣,而只是“具體化”了硬幣,無論何時都很重要。
import time
class Game:
def __init__(self):
self._coins = 0
self._last_time = time.time()
self._cps = 1
@property
def coins(self):
self._collect_coins()
return self._coins
def _collect_coins(self):
new_time = time.time()
self._coins += self._cps * (new_time - self._last_time)
self._last_time = new_time
@property
def coins_per_second(self):
return self._cps
@coins_per_second.setter
def coins_per_second(self, value):
self._collect_coins()
self._cps = value
每當您使用新硬幣時,此代碼都會計算它的價值:
>>> g = Game()
>>> g.coins
0
>>> time.sleep(2)
>>> g.coins
2
并且它確保每當游戲coins_per_second發生變化時,無論每秒更改硬幣之前您賺取多少硬幣,您都會從那時開始以新的比率開始賺?。?/p>
>>> g = Game()
>>> time.sleep(1)
>>> g.coins_per_second = 2
>>> time.sleep(1)
>>> g.coins
3
如果您在每秒金幣發生變化時沒有收集金幣,那么您就會以每秒 2 個金幣的變化率錯誤地計算這兩個秒。
添加回答
舉報