我已经制作了TicTacToe游戏的主要游戏机制;但是,我不知道如何编写最终比赛胜利条件,即如何找到某人获胜/领带。
我尝试使用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
是玩家的{strong>列表('X' and 'O'
)
当玩家赢了/游戏已经并列时,win
是真的。 布尔
win
变量需要在这个问题的答案中改变,我只需要代码或者至少需要一个关于如何编码的想法(因为我没有!)。
提前谢谢!
答案 0 :(得分:1)
检查行中或列中是否有三个相同的字母,最简单的方法是什么?对于第一列,请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):