如何在 python 中编写 TicTacToe 游戏中的 win/tie 条件
How to code win/tie conditions in TicTacToe game in python
我已经为 TicTacToe 游戏制作了主要游戏机制;但是,我不知道如何编写最终游戏获胜条件的代码,即如何找到某人 wins/ties。
我尝试使用 all()
函数,但是这不起作用,或者我使用不正确(可能是后者)。
这是完整的代码,以及代码的变量列表(因为没有注释):
def get_grid():
r1 = ['-','-','-']
r2 = ['-','-','-']
r3 = ['-','-','-']
return r1, r2, r3
def get_coords():
x = 0
y = 0
while True:
try:
x = int(input("x coord : "))
y = int(input("y coord : "))
except ValueError:
print("Must be an integer")
if x < 0 or x > 3 or y < 0 or y > 3:
print('Both values must be in the grid!')
else:
break
return x, y
def pgrid(x, y, r1, r2, r3, player):
rdict = {1:r1, 2:r2, 3:r3}
if x != 0 and y != 0:
while True:
if rdict[y][x-1] == '-':
rdict[y][x-1] = player
break
else:
print("Invalid Space!")
x, y = get_coords()
print('\t1\t2\t3')
print(' 1 |', end = '\t')
for i in r1:
print(i, end = ' | ')
print()
print(' 2 |', end = '\t')
for i in r2:
print(i, end = ' | ')
print()
print(' 3 |', end = '\t')
for i in r3:
print(i, end = ' | ')
print()
def main():
r1, r2, r3 = get_grid()
players = ['X', 'O']
pgrid(0, 0, r1, r2, r3, None)
win = False
while win == False:
for i in players:
x, y = get_coords()
pgrid(x, y ,r1 ,r2 , r3, i)
变量
r1, r2 and r3
是棋盘的第一、第二和第三行。 列表
x and y
是放置 'X' 或 'O' 的坐标。 整数
rdict
在输入的 y
值和面板行之间导航。 词典
player
是播放器。 字符串
players
是玩家 ('X' and 'O'
)
的 List
win
当玩家获胜/比赛平局时为真。 布尔值
win
变量是这个问题的答案需要更改的内容,我只需要代码或者至少需要一个关于如何编码的想法(因为我没有任何代码!)。
提前致谢!
检查三个相同字母是否在一行或一列中的最简单方法是什么?对于第一列,取 r1[0]
、r2[0]
和 r3[0]
并检查它们是否都包含相同的字母:
if r1[0] == 'X' and r2[0] == 'X' and r3[0] == 'X':
print('First column meets victory conditions', 'X')
现在对所有行和列以及两个字母执行此操作会是 位 麻烦,但幸运的是我们可以让一些 for
循环完成工作对我们来说。
for letter in 'XO':
for i in range(3):
if r1[i] == letter and r2[i] == letter and r3[i] == letter:
print('Column', i, letter)
对于行,只需遍历 (r1, r2, r3)
而不是 range(3)
并检查:
if row[0] == letter and row[1] == letter ...
当然,您也可以使用 all
函数和列表理解或生成器表达式来查看所有字母是否相等。
for row in (r1, r2, r3):
if all(item == letter for item in row):
你可以试试我的功能:
def check_who_won(board):
for letter in 'xo':
if all(col == letter for row in board for col in row):
return True
for col in range(3):
if all(board[row, col] == letter for row in range(3)):
return True
if (board[2, 0] and board[1, 1] and board[0, 2]) in letter:
return True
if all(board[index, index] == letter for index in range(3)):
return True
return False
我已经为 TicTacToe 游戏制作了主要游戏机制;但是,我不知道如何编写最终游戏获胜条件的代码,即如何找到某人 wins/ties。
我尝试使用 all()
函数,但是这不起作用,或者我使用不正确(可能是后者)。
这是完整的代码,以及代码的变量列表(因为没有注释):
def get_grid():
r1 = ['-','-','-']
r2 = ['-','-','-']
r3 = ['-','-','-']
return r1, r2, r3
def get_coords():
x = 0
y = 0
while True:
try:
x = int(input("x coord : "))
y = int(input("y coord : "))
except ValueError:
print("Must be an integer")
if x < 0 or x > 3 or y < 0 or y > 3:
print('Both values must be in the grid!')
else:
break
return x, y
def pgrid(x, y, r1, r2, r3, player):
rdict = {1:r1, 2:r2, 3:r3}
if x != 0 and y != 0:
while True:
if rdict[y][x-1] == '-':
rdict[y][x-1] = player
break
else:
print("Invalid Space!")
x, y = get_coords()
print('\t1\t2\t3')
print(' 1 |', end = '\t')
for i in r1:
print(i, end = ' | ')
print()
print(' 2 |', end = '\t')
for i in r2:
print(i, end = ' | ')
print()
print(' 3 |', end = '\t')
for i in r3:
print(i, end = ' | ')
print()
def main():
r1, r2, r3 = get_grid()
players = ['X', 'O']
pgrid(0, 0, r1, r2, r3, None)
win = False
while win == False:
for i in players:
x, y = get_coords()
pgrid(x, y ,r1 ,r2 , r3, i)
变量
r1, r2 and r3
是棋盘的第一、第二和第三行。 列表
x and y
是放置 'X' 或 'O' 的坐标。 整数
rdict
在输入的 y
值和面板行之间导航。 词典
player
是播放器。 字符串
players
是玩家 ('X' and 'O'
)
的 List
win
当玩家获胜/比赛平局时为真。 布尔值
win
变量是这个问题的答案需要更改的内容,我只需要代码或者至少需要一个关于如何编码的想法(因为我没有任何代码!)。
提前致谢!
检查三个相同字母是否在一行或一列中的最简单方法是什么?对于第一列,取 r1[0]
、r2[0]
和 r3[0]
并检查它们是否都包含相同的字母:
if r1[0] == 'X' and r2[0] == 'X' and r3[0] == 'X':
print('First column meets victory conditions', 'X')
现在对所有行和列以及两个字母执行此操作会是 位 麻烦,但幸运的是我们可以让一些 for
循环完成工作对我们来说。
for letter in 'XO':
for i in range(3):
if r1[i] == letter and r2[i] == letter and r3[i] == letter:
print('Column', i, letter)
对于行,只需遍历 (r1, r2, r3)
而不是 range(3)
并检查:
if row[0] == letter and row[1] == letter ...
当然,您也可以使用 all
函数和列表理解或生成器表达式来查看所有字母是否相等。
for row in (r1, r2, r3):
if all(item == letter for item in row):
你可以试试我的功能:
def check_who_won(board):
for letter in 'xo':
if all(col == letter for row in board for col in row):
return True
for col in range(3):
if all(board[row, col] == letter for row in range(3)):
return True
if (board[2, 0] and board[1, 1] and board[0, 2]) in letter:
return True
if all(board[index, index] == letter for index in range(3)):
return True
return False