python - 如何检查自定义大小的井字游戏对角线是否获胜
问题描述
我正在制作一个简单的井字游戏,用户可以在其中指定网格的大小(列和行的数量)。
我需要创建一个函数,它可以检查网格中所有对角线的胜利。
对于网格,我使用的是一个二维列表,如下所示(3x3 示例):
grid = [['x', '-', 'o'],
['o', 'x', '-'],
['-', '-', 'x']]
grid[row][col]
这应该是一个胜利的局面
我已经创建了垂直和水平胜利的检查,但我不太清楚如何检查对角线。
这是我在代码中检查行胜利的方法:
min_win_streak
是最小连胜(例如在经典的 3x3 井字游戏中,它是 3)
def check_rows(grid, min_win_streak):
winner = '-'
for row in grid:
win_streak = 0
for element in row:
if element != '-':
if element == winner:
win_streak += 1
winner = element
if win_streak >= min_win_streak:
return True, winner
else:
win_streak = 1
winner = element
else:
win_streak = 0
winner = '-'
return False, None
我需要这个check_diags()
函数,返回应该是:
- win for x,该函数应返回 True, 'x'
- win for o,该函数应返回 True, 'x'
- 没有胜利,函数应该返回 False, None
解决方案
您可以使用以下嵌套的 for 循环检查 2x2 中的对角线:
for i in range(len(grid)-2):
for j in range(len(grid)-2):
if grid[i][j] == grid[i+1][j+1] == grid[i+2][j+2] and grid[i][j] != '-':
print('Winner')
elif grid[i][j+2] == grid[i+1][j+1] == grid[i+2][j] and grid[i][j+2] != '-':
print('Winner')
如果需要,可以将其插入到具有所需返回值的函数中来代替 print 语句。这应该可以扩展到 3x3、4x4 等,并且更改相当容易。
推荐阅读
- sql-server - T-SQL:LIKE 运算符,将字符串与一个值进行比较
- java - 如何使用 Selenium webdriver 获取该复选框是启用或禁用状态?
- java - Maven 依赖类 org.apache.http.client 上的 ClassNotFoundException
- c# - 与 SharePoint 网站的初始连接需要 100 秒
- ruby-on-rails - Rails Regexp::IGNORECASE 同时将精确选项与数字选项匹配也包含在结果中
- python - 如何在 python 3.9.x 中使用 pycdc
- r - 如何动态地 group_by 函数中的数据框变量?
- python - 如何在 Pyomo 中动态添加变量到列表?
- python - 有没有办法检查机器人是否正在播放音频,如果没有,自动播放下一首歌曲?
- ms-media-foundation - AMDh264Encoder 在检查 MFSampleExtension_CleanPoint 时返回 MF_E_ATTRIBUTENOTFOUND