2 回答
![?](http://img1.sycdn.imooc.com/545863e80001889e02200220-100-100.jpg)
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发生变化时,无论每秒更改硬币之前您赚取多少硬币,您都会从那时开始以新的比率开始赚取:
>>> g = Game()
>>> time.sleep(1)
>>> g.coins_per_second = 2
>>> time.sleep(1)
>>> g.coins
3
如果您在每秒金币发生变化时没有收集金币,那么您就会以每秒 2 个金币的变化率错误地计算这两个秒。
添加回答
举报