如何让用户在 Tic Tac Toe 中按飞机选择飞机
How do I allow the user to choose the plane by planes in Tic Tac Toe
我想让用户选择 Tic Tac Toe 中棋盘的大小。
我不明白如何制作动态变量来检查玩家是否获胜。
我能想到的唯一可行的选择是为用户可以选择的每个可能的 x-by-x 生成 if 语句。
这就是我目前制作的板子。
x = int(input("How many x-by-x do you want?: "))
index = x**2
value = ["-"]*index
def board(index):
for i in range(index):
if i != 0:
if (i % x) == 0:
print()
print("-", end=" ")
这个问题有点宽泛,但我会尽力向您发送正确的方向:
首先,让用户选择他们的电路板尺寸相当简单。类似于以下内容的东西应该可以工作,您可以在其中为用户的输入分配一个变量,然后 运行 循环以创建棋盘大小的数组数组:
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 并从列中减去一个。这使我们能够得到这种形状(行和列都增加)或那种形状(行增加和列减少):
"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!
'''
我想让用户选择 Tic Tac Toe 中棋盘的大小。
我不明白如何制作动态变量来检查玩家是否获胜。
我能想到的唯一可行的选择是为用户可以选择的每个可能的 x-by-x 生成 if 语句。 这就是我目前制作的板子。
x = int(input("How many x-by-x do you want?: "))
index = x**2
value = ["-"]*index
def board(index):
for i in range(index):
if i != 0:
if (i % x) == 0:
print()
print("-", end=" ")
这个问题有点宽泛,但我会尽力向您发送正确的方向:
首先,让用户选择他们的电路板尺寸相当简单。类似于以下内容的东西应该可以工作,您可以在其中为用户的输入分配一个变量,然后 运行 循环以创建棋盘大小的数组数组:
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 并从列中减去一个。这使我们能够得到这种形状(行和列都增加)或那种形状(行增加和列减少):
"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!
'''