擅长:python、mysql、java
<p>假设1属于Player1,2属于player2,0表示空白。然后,对于数组中的每一行/每列/每一条对角线,你都可以算出1和2的计数,如果它等于行的长度,那么就意味着一个玩家已经赢了。这里使用<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.apply_along_axis.html" rel="nofollow">^{<cd1>}</a>我对数组中的每一行/列/对角线都应用了一个函数,它返回该行中1或2的计数除以该行的长度,因此如果在任何情况下返回1,则意味着行/列/对角线包含所有1或2</p>
<p><strong>演示:</strong></p>
<pre><code>from functools import partial
import numpy as np
def func(x, a):
return len(a[a==x])/len(a)
def check_solved(a):
"""
0: Empty places
1: Player 1
2: Player 2
"""
player_1 = partial(func, 2)
player_2 = partial(func, 1)
data_list = [a, a.T, a.diagonal(), np.flipud(a).diagonal()]
if any(np.apply_along_axis(f, 0, d).any() for d in data_list for f in [player_1, player_2]):
print "Game Over"
else:
print "Not over yet"
</code></pre>
<p><strong>演示:</strong></p>
^{pr2}$