如何解决不清除板
我正在制作一个井字游戏,在开始和结束时它会询问您“是否想玩游戏是/否?”,如果您按是,它可以正常工作,如果您按否,它会说“再见”并像它假设的那样关闭程序,但是如果您在玩完第一场游戏后按“是”,它不会重新打印板,只会给您已经填写的板。 有没有办法清除任何人都可以帮助我的董事会?
board = [" " for x in range(10)]
#insert letter into the board
def insertLetter(letter,pos):
board[pos] = letter
# Is that space avalible?
def spaceIsFree(pos):
return board[pos] == " "
# Prints the board
def printBoard(board):
#Board set up
print(" | |")
print(" " + board[1] + " | " + board[2] + " | " + board[3])
print(" | |")
print("-----------")
print(" | |")
print(" " + board[4] + " | " + board[5] + " | " + board[6])
print(" | |")
print("-----------")
print(" | |")
print(" " + board[7] + " | " + board[8] + " | " + board[9])
print(" | |")
def isWinner(bo,le):
#Look for winner!
return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top
(bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle
(bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom
(bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side
(bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle
(bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side
(bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal
(bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal
def playerMove():
#Grabs player move,cheak for valid input
run = True
while run:
move = input("Please select a position place an \"X\" (1-9): ")
try:
move = int(move)
if move > 0 and move < 10:
if spaceIsFree(move):
run = False
insertLetter("X",move)
else:
print ("Sorry,this space is already taken!")
else:
print ("Please type a number within the range!")
except:
print("Please type a number!")
def compMove():
# Computers move
possibleMoves = [x for x,letter in enumerate(board) if letter == " " and x != 0]
move = 0
#check for a possible win
for let in ["O","X"]:
for i in possibleMoves:
boardCopy = board[:]
boardCopy[i] = let
if isWinner (boardCopy,let):
move = i
return move
#check for open corners
cornersOpen = []
for i in possibleMoves:
if i in [1,3,7,9]:
cornersOpen.append(i)
if len(cornersOpen) > 0:
move = selectRandom(cornersOpen)
return move
#check for center move
if 5 in possibleMoves:
move = 5
return move
#check for open edges
edgesOpen = []
for i in possibleMoves:
if i in [2,4,6,8]:
edgesOpen.append(i)
if len(edgesOpen) > 0:
move = selectRandom(edgesOpen)
return move
def selectRandom(li):
# Selects random numbers
import random
ln = len(li)
r = random.randrange(0,ln)
return li[r]
def isBoardFull(board):
#See if the board is full
if board.count(" ") > 1:
return False
else:
return True
def main():
print("Welcom to Tic Tac Toe!")
print ()
printBoard(board)
while not (isBoardFull(board)):
# Do a player move,# Check if O wins
if not (isWinner(board,"O")):
playerMove()
printBoard(board)
else:
print("Sorry,O's won this time!")
break
# Check If X wins
if not (isWinner(board,"X")):
move = compMove()
if move == 0:
print("Tie Game!")
else:
insertLetter("O",move)
print("Computer placed an O in position",move,":")
printBoard(board)
else:
print("X's won this time! Good Job")
break
# No one wins - it's a tie
if isBoardFull(board):
print ("Tie Game!")
while True:
# Start/Play again
replay = input ("Would you like to play a game? y/n: ")
if replay == "no":
print ("Goodbye")
break
else:
print()
main()
解决方法
您只在顶部创建一次看板,然后永远不要重置它。
重置状态最简单的方法就是不全局保存它。重新配置您的代码,使 board
仅存在于 main
中,并手动将其传递给需要它的每个函数。然后,当 main
退出时,每次运行 main
时都会销毁并重新创建板。
为了修补您现有的代码以使其正常工作,我只需创建一个创建新板的函数:
def new_board():
return [" " for x in range(10)]
然后,在 main
的顶部,重置它:
def main():
global board
board = new_board()
print("Welcom to Tic Tac Toe!")
print ()
printBoard(board)
从长远来看,我不建议这样做,但这是一个快速解决方案。
,board
定义在全局范围内,因此再次调用 main
不会影响它,您将保留之前的数据。一种选择是显式重新初始化它:
else:
board = [" " for x in range(10)]
print()
main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。