Python 如何允许用户在Tic Tac Toe中逐个选择飞机

Python 如何允许用户在Tic Tac Toe中逐个选择飞机,python,tic-tac-toe,Python,Tic Tac Toe,我想让用户选择多大的董事会将在Tic-Tac-Toe 我不知道如何制作一个动态变量来检查玩家是否获胜 我能想到的唯一可行的选择是对用户可以选择的每个可能的x-x-x使用makeif语句。 这就是我到目前为止制作董事会的方法 x = int(input("How many x-by-x do you want?: ")) index = x**2 value = ["-"]*index def board(index): for i in ran

我想让用户选择多大的董事会将在Tic-Tac-Toe

我不知道如何制作一个动态变量来检查玩家是否获胜

我能想到的唯一可行的选择是对用户可以选择的每个可能的x-x-x使用makeif语句。 这就是我到目前为止制作董事会的方法

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添加到行中,并从列中删除一个。这使我们能够获得此形状(行和列都增加)或该形状(行增加,列减少):

要查找增加的行和列,请执行以下操作:

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!")
要查找增加的行和减少的列,请执行以下操作:

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!
'''


使用模块iter工具一个循环,检查一条直线,直到输入编号,这就是你所需要的,对吗?你说的“逐面”是什么意思听起来就像是(正方形)板的大小。如果您想知道如何生成动态变量,那么您还需要回答您的问题并添加代码,这样我们就可以看到用于表示电路板的数据结构。