【发布时间】:2013-12-21 10:24:06
【问题描述】:
我正在开发井字游戏程序,但由于某种原因,当我尝试打印 3x3 板时,它无法正常工作。我必须打印一个 4x4 板。程序应该工作的方式是我们应该输入一行,然后输入一列,然后在这些坐标处打印 X 或 O,但就像我说的......它不适用于 3x3 板。每当我输入第 3 行或第 3 列时,它都会说坐标超出范围......任何帮助将不胜感激。谢谢。
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()
【问题讨论】:
-
您应该包含完整的错误回溯。
标签: python python-2.7