如何在 Python 的井字棋游戏中切换两个玩家?
How do I switch two players in tic-tac-toe game in Python?
我是 Python 的初学者,正在尝试创建井字游戏。
但是我有两个问题。一个问题是我无法切换这两名球员。另一个问题是我无法打印“你赢了!”这几个字。我找不到问题所在。
如果你给我一个提示,我会很高兴。
提前致谢!!
box = {'1': ' ' , '2': ' ' , '3': ' ' ,'4': ' ' , '5': ' ' , '6': ' ' ,'7': ' ' , '8': ' ' , '9': ' ' }
list = []
for i in box:
list.append(i)
def printbox(box):
print(box['1'] + box['2'] + box['3'])
print(box['4'] + box['5'] + box['6'])
print(box['7'] + box['8'] + box['9'])
#Game setting
def game():
turn = 'O'
count = 0
for i in range(9):
printbox(box)
print("Select the number!")
a = input()
if box[a] == ' ':
box[a] = turn
count += 1
else:
print("Pls select another number.")
continue
if count >= 8:
if box['1'] == box['2'] == box['3']:
printbox(box)
print("You won!")
break
elif box['4'] == box['5'] == box['6']:
printbox(box)
print("You won!")
break
elif box['7'] == box['8'] == box['9']:
printbox(box)
print("You won!")
break
elif box['1'] == box['5'] == box['9']:
printbox(box)
print("You won!")
break
elif box['3'] == box['5'] == box['7']:
printbox(box)
print("You won!")
break
elif box['1'] == box['4'] == box['7']:
printbox(box)
print("You won!")
break
elif box['2'] == box['5'] == box['8']:
printbox(box)
print("You won!")
break
elif box['3'] == box['6'] == box['9']:
printbox(box)
print("You won!")
break
#in case of tie match.
if count == 9:
print("It's a Tie!")
# Changing the two players.
if turn =='O':
turn = 'X'
else:
turn = 'O'
game()
if __name__ == "__main__":
game()
所以我坐下来让你的程序为我自己工作,并注意到一些问题。所以第一个问题是你检查
if turn == 'O':
转数不是 'O',而是“0”。您分配轮次时使用的是数字 0,而不是字母 'O'。这种比较是不正确的。
下一个大问题是你在每场比赛结束时都叫“比赛”。所以 game (1) 正常运行,然后你到达终点并堆叠一个新的 game() 调用。在这个新的游戏调用中,您将轮次设置为“0”并将计数设置为 0。
如果您在最后删除对 game() 的调用,这将解决您的堆叠调用问题。
最后,在游戏结束时()
变化:
# Changing the two players.
if turn =='o':
turn = 'X'
else:
turn = 'o'
game()
到
# Changing the two players.
if turn =='0':
turn = 'X'
else:
turn = '0'
哦,还有最后一件事,我会将 if count >= 8
更改为 if count >= 4
并在每个框组合检查中添加 != " "
以避免“获胜”时出现 3 个空格一行。
编辑:
既然你更新了上面的代码,那么我想指出的是,修复是从游戏函数本身内部删除对“game()”的调用或减少缩进(因为你每次都调用一个新游戏for循环运行的时间)如果你想让它“再次播放”。您还需要像我建议的那样更改计数 >= 8 检查或强制玩家至少玩 8 回合,即使他们在 5 中获胜(这是可能的)。
我刚才在玩脚本时确实注意到了另外两个问题。
在第一个游戏中全局声明盒子效果很好,但在第二个游戏中,它永远不会重置。在 game() 函数中移动框,最后,
这什么都不做
list = []
for i in box:
list.append(i)
你的代码没有说你赢了的原因是你只在 count >= 8
时检查获胜条件。这意味着只有超过 8 圈后它才能进入该块。您可能希望每次都检查它而不是基于条件。
如果你总是检查,你实际上会 运行 进入另一个错误,因为你的字典起始值总是匹配的。这是因为您只检查值是否相等,而不检查它们是“O”还是“X”。我不会建议如何解决这个问题,因为您正在学习并且可能会喜欢这个练习!
我是 Python 的初学者,正在尝试创建井字游戏。 但是我有两个问题。一个问题是我无法切换这两名球员。另一个问题是我无法打印“你赢了!”这几个字。我找不到问题所在。
如果你给我一个提示,我会很高兴。 提前致谢!!
box = {'1': ' ' , '2': ' ' , '3': ' ' ,'4': ' ' , '5': ' ' , '6': ' ' ,'7': ' ' , '8': ' ' , '9': ' ' }
list = []
for i in box:
list.append(i)
def printbox(box):
print(box['1'] + box['2'] + box['3'])
print(box['4'] + box['5'] + box['6'])
print(box['7'] + box['8'] + box['9'])
#Game setting
def game():
turn = 'O'
count = 0
for i in range(9):
printbox(box)
print("Select the number!")
a = input()
if box[a] == ' ':
box[a] = turn
count += 1
else:
print("Pls select another number.")
continue
if count >= 8:
if box['1'] == box['2'] == box['3']:
printbox(box)
print("You won!")
break
elif box['4'] == box['5'] == box['6']:
printbox(box)
print("You won!")
break
elif box['7'] == box['8'] == box['9']:
printbox(box)
print("You won!")
break
elif box['1'] == box['5'] == box['9']:
printbox(box)
print("You won!")
break
elif box['3'] == box['5'] == box['7']:
printbox(box)
print("You won!")
break
elif box['1'] == box['4'] == box['7']:
printbox(box)
print("You won!")
break
elif box['2'] == box['5'] == box['8']:
printbox(box)
print("You won!")
break
elif box['3'] == box['6'] == box['9']:
printbox(box)
print("You won!")
break
#in case of tie match.
if count == 9:
print("It's a Tie!")
# Changing the two players.
if turn =='O':
turn = 'X'
else:
turn = 'O'
game()
if __name__ == "__main__":
game()
所以我坐下来让你的程序为我自己工作,并注意到一些问题。所以第一个问题是你检查
if turn == 'O':
转数不是 'O',而是“0”。您分配轮次时使用的是数字 0,而不是字母 'O'。这种比较是不正确的。
下一个大问题是你在每场比赛结束时都叫“比赛”。所以 game (1) 正常运行,然后你到达终点并堆叠一个新的 game() 调用。在这个新的游戏调用中,您将轮次设置为“0”并将计数设置为 0。
如果您在最后删除对 game() 的调用,这将解决您的堆叠调用问题。
最后,在游戏结束时() 变化:
# Changing the two players.
if turn =='o':
turn = 'X'
else:
turn = 'o'
game()
到
# Changing the two players.
if turn =='0':
turn = 'X'
else:
turn = '0'
哦,还有最后一件事,我会将 if count >= 8
更改为 if count >= 4
并在每个框组合检查中添加 != " "
以避免“获胜”时出现 3 个空格一行。
编辑:
既然你更新了上面的代码,那么我想指出的是,修复是从游戏函数本身内部删除对“game()”的调用或减少缩进(因为你每次都调用一个新游戏for循环运行的时间)如果你想让它“再次播放”。您还需要像我建议的那样更改计数 >= 8 检查或强制玩家至少玩 8 回合,即使他们在 5 中获胜(这是可能的)。
我刚才在玩脚本时确实注意到了另外两个问题。
在第一个游戏中全局声明盒子效果很好,但在第二个游戏中,它永远不会重置。在 game() 函数中移动框,最后,
这什么都不做
list = []
for i in box:
list.append(i)
你的代码没有说你赢了的原因是你只在 count >= 8
时检查获胜条件。这意味着只有超过 8 圈后它才能进入该块。您可能希望每次都检查它而不是基于条件。
如果你总是检查,你实际上会 运行 进入另一个错误,因为你的字典起始值总是匹配的。这是因为您只检查值是否相等,而不检查它们是“O”还是“X”。我不会建议如何解决这个问题,因为您正在学习并且可能会喜欢这个练习!