回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在做一个井字游戏程序,由于某些原因,当我试图打印一个3x3的板时,它不起作用。我得打印一块4x4板。程序的工作方式是,我们先输入一行,然后输入一列,然后在这些坐标处打印X或O,但就像我说的。。。它不适合3x3板。每当我输入第3行或第3列时,它会说坐标超出范围。。。任何帮助都将不胜感激。谢谢您。在</p>
<pre><code>def playTicTacToe():
rows,cols = 4,4
winLength = 3
board = makeNewBoard(rows, cols)
moves = 0
player = 1
while (moves < rows*cols):
row,col = getMove(board, player)
board = setPiece(board, row, col, player)
if (didWin(board, player, winLength)):
printBoard(board)
print getPieceLabel(player), " WINS!!!"
return
player = otherPlayer(player)
moves += 1
print "TIE GAME!!!!"
def makeNewBoard(rows, cols): return [([0]*cols) for row in xrange(rows)]
def getRows(board): return len(board)
def getCols(board): return len(board[0])
def getPiece(board, row, col): return board[row][col]
def setPiece(board, row, col, value):
board[row][col] = value
return board
def isEmpty(board, row, col):
return (getPiece(board, row, col) == 0)
def isOnBoard(board, row, col):
rows = getRows(board)
cols = getCols(board)
return ((row >= 0) and (row < rows) and
(col >= 0) and (col < cols))
def getPieceLabel(piece):
if (piece == 1): return "X"
elif (piece == 2): return "O"
else: return "-"
def printBoard(board):
print "\n**************************"
rows = getRows(board)
cols = getCols(board)
for row in xrange(rows):
for col in xrange(cols):
piece = getPiece(board, row, col)
label = getPieceLabel(piece)
print label,
print
def didWin(board, player, winLength):
rows = getRows(board)
cols = getCols(board)
for startRow in xrange(rows):
for startCol in xrange(cols):
if (didWin1(board, player, winLength, startRow, startCol)):
return True
return False
def didWin1(board, player, winLength, startRow, startCol):
for drow in xrange(-1,+2):
for dcol in xrange(-1,+2):
if ((drow != 0) or (dcol != 0)):
if (didWin2(board, player, winLength,
startRow, startCol, drow, dcol)):
return True
return False
def didWin2(board, player, winLength,
startRow, startCol, drow, dcol):
rows = getRows(board)
cols = getCols(board)
for step in xrange(winLength):
row = startRow + step*drow
col = startCol + step*dcol
if (not isOnBoard(board, row, col)):
return False
elif (getPiece(board, row, col) != player):
return False
return True
def otherPlayer(player):
return 1 if (player == 2) else 2
def oops(msg):
print " ", msg, "Try again."
def readInt(prompt):
while (True):
try:
return int(raw_input(prompt))
except:
oops("Input must be an integer.")
def getMove(board, player):
while (True):
printBoard(board)
print "Enter move for player", getPieceLabel(player)
row = readInt(" Row --> ")
col = readInt(" Col --> ")
if (not isOnBoard(board, row, col)):
oops("Out of range (not on the board)!")
elif (not isEmpty(board, row, col)):
oops("Already occupied!")
else:
return (row, col)
playTicTacToe()
</code></pre>