擅长:python、mysql、java
<p>将代码分解为可测试的部分。你知道吗</p>
<p>首先,生成可能无限多个游戏状态的生成器,但只能按需生成:</p>
<pre><code>def game_gen(self):
for active_player in self.players:
yield self.move(active_player)
</code></pre>
<p>这需要<code>self.move</code>返回被评估的内容,而不是简单地执行评估本身。这个<em>东西</em>也应该保留活跃玩家作为一个属性供以后使用。你知道吗</p>
<p>接下来,编写一个函数<em>消耗</em>游戏状态流:</p>
<pre><code>def game_loop(self, stream):
for move in stream:
self.evaluate(move) # Evaluate the move returned by self.move
if self.game_checker.is_game_complete():
return move.player # The player that made the move
</code></pre>
<p>现在你有两个可测试的部分。由<code>game_gen</code>产生的项目可以一次测试一个,而无需等待整个游戏在循环终止之前进行。<code>game_loop</code>不再隐式生成游戏;它获取由<code>game_gen</code>生成的一系列移动,或者您自己创建的人工测试数据,以验证循环是否在必要时终止(或不终止)。你知道吗</p>