【发布时间】:2019-05-18 17:41:19
【问题描述】:
我正在 python shell 中创建一个简单的井字游戏...无论我尝试如何编辑代码,程序都会错误地分配获胜者...我的支票有问题( ) 函数
我尝试在每个玩家转身后扫描游戏板的垂直、水平、对角线,然后告诉获胜者第一个值是否与其他两个匹配...
我还考虑了无效输入的错误
这是完整的代码:
import os
import time
board = [['-','-','-'],
['-','-','-'],
['-','-','-'],]
def markit(row,col,mark):
try:
if board[row-1][col-1]!='-':
print("Already Marked!!")
time.sleep(1)
else:
board[row-1][col-1]=mark
except IndexError:
print("Out of Range...Reverting back")
time.sleep(1)
def reset():
board = [['-','-','-'],
['-','-','-'],
['-','-','-'],]
def check():
for i in range(len(board)):
if board[i][i]==board[i-1][i-1] and board[i][i]!='-':
print(board[i][i]," is a winner")
time.sleep(1.5)
y=input("Play Again?(y/n):")
if y==y:
reset()
else:
quit()
break
for i in range(len(board)):
for j in range(len(board)):
if board[j][i]==board[j][i-1] and board[j][i]!='-':
print(board[j][i]," is a winner")
time.sleep(1.5)
y=input("Play Again?(y/n):")
if y==y:
reset()
else:
quit()
break
for i in range(len(board)):
for j in range(len(board)):
if board[i][j]==board[i][j-1] and board[i][j]!='-':
print(board[i][j]," is a winner")
time.sleep(1.5)
y=input("Play Again?(y/n):")
if y==y:
reset()
else:
quit()
break
while True:
print(" 1 2 3")
for i in range(len(board)):
print(i+1,board[i])
row=int(input("P1||Enter row:"))
col=int(input("P1||Enter col:"))
markit(row,col,mark='X')
check()
os.system('cls')
print(" 1 2 3")
for i in range(len(board)):
print(i+1,board[i])
row=int(input("P2||Enter row:"))
col=int(input("P2||Enter col:"))
markit(row,col,mark='O')
check()
os.system('cls')
我希望正确地告诉获胜者,但即使我的第一个值与其他两个值不匹配,它也会告诉获胜者。
如果玩家输入无效...它会返回一个错误并且比赛继续但他错过了他的回合!!...我也想纠正这个问题。
【问题讨论】:
-
你的 check 函数背后的逻辑是什么?
-
我取行中的第一个元素并检查行中的其他 2 个元素....如果它们相同...那么 WINNER....然后它检查列和然后对角线使用相同的算法......为什么它不起作用?
标签: python-3.x algorithm tic-tac-toe