1 回答

TA貢獻1780條經驗 獲得超5個贊
這個問題有點寬泛,但我會盡力為您指明正確的方向:
首先,讓用戶選擇他們的板尺寸相當簡單。類似于以下內容的操作應該可行,您可以將變量分配給用戶的輸入,然后運行循環以創建棋盤大小的數組數組:
board_size = int(input("How big do you want your tic-tac-toe board to be?"))
board = []
for row in range(board_size):
board.append([])
for column in range(board_size):
board[row].append([])
給定輸入 4,board 變量將等于:
[[[], [], [], []],
[[], [], [], []],
[[], [], [], []],
[[], [], [], []]]
但定義獲勝條件有點困難。我們必須考慮您可能獲勝的所有模式:橫向三排、垂直三排以及對角線三排。由于我們的棋盤很好地保存為數組的數組,因此無論棋盤有多大,我們都可以制定通用規則來查看任意位置是否連續有 3 個“x”或 3 個“o”。
水平行非常簡單:只需檢查一行中是否有三個“x”或“o”:
for row in range(board_size):
for column in range(board_size-2):
if board[row][column] == board[row][column+1] == board[row][column+2]:
if board[row][column] == "x":
print("x wins!")
else:
print("o wins!")
現在,要添加垂直行,我們必須執行相同的操作,但要遍歷列然后行而不是行然后列:
for column in range(board_size):
for row in range(board_size-2):
if board[row][column] == board[row+1][column] == board[row+2][column]:
if board[row][column] == "x":
print("x wins!")
else:
print("o wins!")
最后是對角線。我們通過遍歷每一行和每一列來做到這一點,但我們將它們都加 1,或者向行加 1,并從列中取 1。這使我們能夠得到這種形狀(行和列都增加)或那種形狀(行增加和列減少):
"x" "x"
"x" "x"
"x" "x"
要查找增加的行和增加的列:
for row in range(board_size-2):
for column in range(board_size-2):
if board[row][column] == board[row+1][column+1] == board[row+2][column+2]:
if board[row][column] == "x":
print("x wins!")
else:
print("o wins!")
并找到增加的行和減少的列:
for row in range(board_size-2):
for column in range(board_size-2):
if board[row][column+2] == board[row+1][column+1] == board[row+2][column]:
if board[row][column] == "x":
print("x wins!")
else:
print("o wins!")
當我們使用函數將所有這些組合在一起時,它看起來像這樣:
#user inputs preferred board size
board_size = int(input("How big do you want your tic-tac-toe board to be?"))
board = []
# we make the board arrays
for row in range(board_size):
board.append([])
for column in range(board_size):
board[row].append([])
# returns who won the game
def game_state(board):
# horizontal wins?
for row in range(board_size):
for column in range(board_size-2):
if board[row][column] == board[row][column+1] == board[row][column+2]:
if board[row][column] == "x":
return "x wins!"
else:
return "o wins!"
# vertical wins?
for column in range(board_size):
for row in range(board_size-2):
if board[row][column] == board[row+1][column] == board[row+2][column]:
if board[row][column] == "x":
return "x wins!"
else:
return "o wins!"
# diagonal wins (aigu)?
for row in range(board_size-2):
for column in range(board_size-2):
if board[row][column+2] == board[row+1][column+1] == board[row+2][column]:
if board[row][column] == "x":
return "x wins!"
else:
return "o wins!"
# diagonal wins (grave)?
for row in range(board_size-2):
for column in range(board_size-2):
if board[row][column] == board[row+1][column+1] == board[row+2][column+2]:
if board[row][column] == "x":
return "x wins!"
else:
return "o wins!"
return "the game is still in progress"
'''
Here's where your game would run.
You would get people to play moves, and after each move, see if someone has won.
Once the board is filled up with moves (when number of moves == board_size**2), \
you will run game_state on the final position to see who won, or if it is a draw.
Good luck!
'''
添加回答
舉報