我正在用Python做一个井字游戏
这是我第一次发布问题,如果我遗漏了问题中的任何必要细节,我深表歉意 这是代码,它是用来玩机器的,一切都正常,直到机器轮到它,它覆盖了玩家选择的方块。如果随机函数选择了那个数字,我几乎可以肯定问题可能来自MakeListOfFreeFields(board)函数,但找不到任何东西 我还调用了一些无效点的自由场函数,看看它是否有效。没有 感谢您的帮助,谢谢我正在用Python做一个井字游戏,python,python-3.9,Python,Python 3.9,这是我第一次发布问题,如果我遗漏了问题中的任何必要细节,我深表歉意 这是代码,它是用来玩机器的,一切都正常,直到机器轮到它,它覆盖了玩家选择的方块。如果随机函数选择了那个数字,我几乎可以肯定问题可能来自MakeListOfFreeFields(board)函数,但找不到任何东西 我还调用了一些无效点的自由场函数,看看它是否有效。没有 感谢您的帮助,谢谢 # coding=utf-8 from random import randrange def DisplayBoard(board):
# coding=utf-8
from random import randrange
def DisplayBoard(board):
print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
print("|","|","|","|",sep=" ")
print("| ",board[0][0]," | ",board[0][1]," | ",board[0][2]," |",sep="")
print("|","|","|","|",sep=" ")
print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
print("|","|","|","|",sep=" ")
print("| ",board[1][0]," | ",board[1][1]," | ",board[1][2]," |",sep="")
print("|","|","|","|",sep=" ")
print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
print("|","|","|","|",sep=" ")
print("| ",board[2][0]," | ",board[2][1]," | ",board[2][2]," |",sep="")
print("|","|","|","|",sep=" ")
print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
return
def EnterMove(board):
MakeListOfFreeFields(board)
while True:
movPlayer = int(input("Insert the box number you wish to select.\n"))
if movPlayer < 1 and movPlayer > 9:
print("Pick another number.\n")
continue
elif movPlayer not in board[0] and movPlayer not in board[1] and movPlayer not in board[2]:
print("Spot taken, pick another one!")
continue
for row in range(0,3):
for column in range(0,3):
if board[row][column] == movPlayer:
board[row][column] = "O"
return
def MakeListOfFreeFields(board):
for row in range(0,3):
for column in range(0,3):
if board[row][column] == "X" or board[row][column] == "O":
continue
else:
emptySquares.append(([row],[column]))
def VictoryFor(board, sign):
if board[0][0] == sign and board[0][1] == sign and board[0][2] == sign:
return True
elif board[1][0] == sign and board[1][1] == sign and board[1][2] == sign:
return True
elif board[2][0] == sign and board[2][1] == sign and board[2][2] == sign:
return True
elif board[0][0] == sign and board[1][0] == sign and board[2][0] == sign:
return True
elif board[0][1] == sign and board[1][1] == sign and board[2][1] == sign:
return True
elif board[0][2] == sign and board[1][2] == sign and board[2][2] == sign:
return True
elif board[0][0] == sign and board[1][1] == sign and board[2][2] == sign:
return True
elif board[2][0] == sign and board[1][1] == sign and board[0][2] == sign:
return True
else:
return
def DrawMove(board):
MakeListOfFreeFields(board)
while True:
row = randrange(3)
column = randrange(3)
if ([row],[column]) not in emptySquares:
continue
else:
board[row][column] = "X"
return
board = [[1,2,3],[4,"X",6],[7,8,9]]
emptySquares = []
moves = 1
player = "O"
CPU = "X"
print("Welcome to Tic-Tac-Toe!")
while moves < 9:
moves += 1
DisplayBoard(board)
EnterMove(board)
DisplayBoard(board)
DrawMove(board)
DisplayBoard(board)
VictoryFor(board, player)
if VictoryFor(board, player) == True:
print("Congratulations! You've won!")
break
VictoryFor(board, CPU)
if VictoryFor(board, CPU) == True:
print("Better luck next time! You've lost. :(")
break
#End of the program.
#编码=utf-8
从随机输入范围
def显示板(板):
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“|”,板[0][0],“|”,板[0][1],“|”,板[0][2],“|”,sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[1][0],“|”,“板[1][1],“|”,“板[1][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[2][0],“|”,“板[2][1],“|”,“板[2][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
返回
def EnterMove(板):
MakeListOfFreeFields(板)
尽管如此:
movPlayer=int(输入(“插入要选择的框号。\n”))
如果movPlayer<1且movPlayer>9:
打印(“选择另一个号码。\n”)
持续
elif movPlayer不在板[0]中,movPlayer不在板[1]中,movPlayer不在板[2]中:
打印(“现场拍摄,选择另一张!”)
持续
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果board[行][列]==movPlayer:
线路板[行][列]=“O”
返回
def MakeListOfFreeFields(板):
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果线路板[行][列]=“X”或线路板[行][列]=“O”:
持续
其他:
emptySquares.append(([行],[列])
def VictoryFor(板、标志):
如果电路板[0][0]==符号和电路板[0][1]==符号和电路板[0][2]==符号:
返回真值
elif板[1][0]==符号和板[1][1]==符号和板[1][2]==符号:
返回真值
elif板[2][0]==符号和板[2][1]==符号和板[2][2]==符号:
返回真值
elif板[0][0]==符号和板[1][0]==符号和板[2][0]==符号:
返回真值
elif板[0][1]==符号和板[1][1]==符号和板[2][1]==符号:
返回真值
elif板[0][2]==符号和板[1][2]==符号和板[2][2]==符号:
返回真值
elif板[0][0]==符号和板[1][1]==符号和板[2][2]==符号:
返回真值
elif板[2][0]==符号和板[1][1]==符号和板[0][2]==符号:
返回真值
其他:
返回
def DrawMove(板):
MakeListOfFreeFields(板)
尽管如此:
行=随机范围(3)
列=随机范围(3)
如果([行],[列])不在空格中:
持续
其他:
线路板[行][列]=“X”
返回
董事会=[[1,2,3],[4,“X”,6],[7,8,9]]
空方块=[]
移动=1
player=“O”
CPU=“X”
打印(“欢迎来到Tic Tac Toe!”)
当移动<9时:
移动+=1
显示板
企业(董事会)
显示板
拖板
显示板
胜利者(棋盘、棋手)
如果VictoryFor(棋盘、玩家)=真:
打印(“祝贺你!你赢了!”)
打破
VictoryFor(板、CPU)
如果VictoryFor(电路板、CPU)=真:
打印(“祝你下次好运!你输了:”)
打破
#节目结束了。
保留代码的一个解决方案是“清除”输出。
例如,使用:“IPython.display.clear_output()”
别忘了用“time.sleep()”来调整时间,以保持可读性
这是您的代码:
# coding=utf-8
import time
from random import randrange
from IPython.display import clear_output
def clear():
clear_output(wait=True)
def DisplayBoard(board):
print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
print("|","|","|","|",sep=" ")
print("| ",board[0][0]," | ",board[0][1]," | ",board[0][2]," |",sep="")
print("|","|","|","|",sep=" ")
print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
print("|","|","|","|",sep=" ")
print("| ",board[1][0]," | ",board[1][1]," | ",board[1][2]," |",sep="")
print("|","|","|","|",sep=" ")
print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
print("|","|","|","|",sep=" ")
print("| ",board[2][0]," | ",board[2][1]," | ",board[2][2]," |",sep="")
print("|","|","|","|",sep=" ")
print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
return
def EnterMove(board):
MakeListOfFreeFields(board)
while True:
movPlayer = int(input("Insert the box number you wish to select.\n"))
if movPlayer < 1 and movPlayer > 9:
print("Pick another number.\n")
continue
elif movPlayer not in board[0] and movPlayer not in board[1] and movPlayer not in board[2]:
print("Spot taken, pick another one!")
continue
for row in range(0,3):
for column in range(0,3):
if board[row][column] == movPlayer:
board[row][column] = "O"
return
def MakeListOfFreeFields(board):
for row in range(0,3):
for column in range(0,3):
if board[row][column] == "X" or board[row][column] == "O":
continue
else:
emptySquares.append(([row],[column]))
def VictoryFor(board, sign):
if board[0][0] == sign and board[0][1] == sign and board[0][2] == sign:
return True
elif board[1][0] == sign and board[1][1] == sign and board[1][2] == sign:
return True
elif board[2][0] == sign and board[2][1] == sign and board[2][2] == sign:
return True
elif board[0][0] == sign and board[1][0] == sign and board[2][0] == sign:
return True
elif board[0][1] == sign and board[1][1] == sign and board[2][1] == sign:
return True
elif board[0][2] == sign and board[1][2] == sign and board[2][2] == sign:
return True
elif board[0][0] == sign and board[1][1] == sign and board[2][2] == sign:
return True
elif board[2][0] == sign and board[1][1] == sign and board[0][2] == sign:
return True
else:
return
def DrawMove(board):
MakeListOfFreeFields(board)
while True:
row = randrange(3)
column = randrange(3)
if ([row],[column]) not in emptySquares:
continue
else:
board[row][column] = "X"
return
board = [[1,2,3],[4,"X",6],[7,8,9]]
emptySquares = []
moves = 1
player = "O"
CPU = "X"
print("Welcome to Tic-Tac-Toe!")
while moves < 9:
moves += 1
clear()
DisplayBoard(board)
time.sleep(0.3)
clear()
EnterMove(board)
time.sleep(0.3)
clear()
DrawMove(board)
time.sleep(0.3)
clear()
DisplayBoard(board)
time.sleep(0.3)
clear()
VictoryFor(board, player)
time.sleep(.3)
if VictoryFor(board, player) == True:
print("Congratulations! You've won!")
break
VictoryFor(board, CPU)
if VictoryFor(board, CPU) == True:
print("Better luck next time! You've lost. :(")
break
#End of the program.
#编码=utf-8
导入时间
从随机输入范围
从IPython.display导入清除输出
def clear():
清除输出(等待=真)
def显示板(板):
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“|”,板[0][0],“|”,板[0][1],“|”,板[0][2],“|”,sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[1][0],“|”,“板[1][1],“|”,“板[1][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[2][0],“|”,“板[2][1],“|”,“板[2][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
返回
def EnterMove(板):
MakeListOfFreeFields(板)
尽管如此:
movPlayer=int(输入(“插入要选择的框号。\n”))
如果movPlayer<1且movPlayer>9:
打印(“选择另一个号码。\n”)
持续
elif movPlayer不在板[0]中,movPlayer不在板[1]中,movPlayer不在板[2]中:
打印(“现场拍摄,选择另一张!”)
持续
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果board[行][列]==movPlayer:
线路板[行][列]=“O”
返回
def MakeListOfFreeFields(板):
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果线路板[行][列]=“X”或线路板[行][列]=“O”:
持续
其他:
空方块(([