Рубрики
Без рубрики

Создать Tic Tac Toe с Python

Этот пост продемонстрирует, как сделать Tic Tac Toe в Python. Надеюсь, это поможет кому-нибудь релаты … Теги с Python.

Этот пост продемонстрирует, как сделать Tic Tac Toe в Python. Надеюсь, это поможет кому-то относительно новым в Python см. Как сделать простую программу. Обратите внимание, что Python 3.7 используется для этого руководства, хотя большинство версий Python 3 должны работать.

Шансы высоки, вы слышали о Tic Tac Toe, но я буду кратко объяснить игру на всякий случай. Игра играется на сетке 3×3, которая начинается изначально пустой. Затем игроки чередуются размещать их письмо (X для игрока 1, O для игрока 2) внутри пустой площади сетки. Если один игрок получает 3 в строке по вертикали, горизонтально или по диагонали, они выигрывают игру. Если сетка заполнена, и нет 3-ныроных рядов, то игра – это галстук, который является результатом, если оба игрока играют должным образом.

Мы будем кодировать правила игры в Python с программой, спрашивающей на ходах каждого игрока, а затем отображение текущего состояния платы. Чтобы построить игру, нам понадобится:

  • Способ отображения текущего состояния игры
  • способ обновления до сетки с ходом
  • способ проверить на конец игры
  • способ проверки, если ход действителен
  • подсказки игрокам сделать свои движения

Образец пробега игры

0   1   2   
3   4   5   
6   7   8   
Player 1 [X], make your move: 4
0   1   2   
3   X   5   
6   7   8   
Player 2 [O], make your move: 1
0   O   2   
3   X   5   
6   7   8   
Player 1 [X], make your move: 3
0   O   2   
X   X   5   
6   7   8   
Player 2 [O], make your move: 5
0   O   2   
X   X   O   
6   7   8   
Player 1 [X], make your move: 6
0   O   2   
X   X   O   
X   7   8   
Player 2 [O], make your move: 0
O   O   2   
X   X   O   
X   7   8   
Player 1 [X], make your move: 2
O   O   X   
X   X   O   
X   7   8   
Player 1 Wins
Good Game!

Способ отображения текущего состояния игры Наша программа будет Консоль Программа, так как она не будет иметь GUI. Вместо этого он будет собирать перемещения в консоли через ввод игроков, который отобразит плату после каждого перемещения. Мы можем отобразить текущее состояние игры, распечатывая строку сетки 3×3 по ряду с пробелами между каждым квадратом. Игрок 1 будет использовать «X», проигрыватель 2 будет использовать «y», а пробелы будут представлены как «-». Доска начнет первоначально со всеми квадратами как пустыми. Для отображения целей пробелы покажут число, соответствующее тому, что проигрыватель будет набрать, чтобы разместить их письмо в этом квадрате (от 0 до 8).

PLAYER_ONE_MOVE = "X"
PLAYER_TWO_MOVE = "O"
BLANK = "-"
BOARD_SIZE = 3
VALID_MOVES = ["0", "1", "2", "3", "4", "5", "6", "7", "8"]

board = [[BLANK, BLANK, BLANK], [BLANK, BLANK, BLANK], [BLANK, BLANK, BLANK]]

def print_board():
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            next_square = board[i][j]
            if next_square == BLANK:
                next_square = BOARD_SIZE * i + j
            print(next_square, end = "   ")
        print("")

способ обновления до сетки с ходом Движение – это число от 0 до 8, что соответствует определенному квадрату. Если мы думаем об этом, Переместить//board_size дает нам номер строки и Переместить% stort_size дает нам номер столбца. Обратите внимание, что в Python “//” является целочисленным делением, где как «/» даст результат с плавающей точкой. Мы разместим «X» или «O» в зависимости от того, какой игрок делает шаг. Мы всегда будем распечатавать доску после перемещения, чтобы следующий игрок мог видеть текущее состояние доски.

def update_board(move, is_player_one):
    row = move // BOARD_SIZE
    column = move % BOARD_SIZE
    if is_player_one:
        board[row][column] = PLAYER_ONE_MOVE
    else:
        board[row][column] = PLAYER_TWO_MOVE
    print_board()

способ проверить на до конца игры Игра может закончиться, потому что доска становится полной или потому, что один игрок получает 3-in-ряд. Мы сделаем одну функцию для проверки, если доска заполнена и другая, чтобы проверить на 3 в строках. Доска полна, если все квадраты не пустые, поэтому мы можем просто использовать вложенные для циклов, чтобы проверить это. Обнаружение 3-in-a-строк может быть выполнено путем проверки на 1 из 8 возможных способов получения одного (3 горизонтального, 3 вертикальных, 2 диагонали). Обратите внимание, что «\» используется, чтобы иметь логическое состояние в нескольких линиях.

def board_full():
    for i in range(BOARD_SIZE):
        for j in range(BOARD_SIZE):
            if board[i][j] == BLANK:
                return False
    return True

def is_win(letter):
    if (board[0][0] == letter and board[0][1] == letter and board[0][2] == letter) \
            or (board[1][0] == letter and board[1][1] == letter and board[1][2] == letter) \
            or (board[2][0] == letter and board[2][1] == letter and board[2][2] == letter) \
            or (board[0][0] == letter and board[1][0] == letter and board[2][0] == letter) \
            or (board[0][1] == letter and board[1][1] == letter and board[2][1] == letter) \
            or (board[0][2] == letter and board[1][2] == letter and board[2][2] == letter) \
            or (board[0][0] == letter and board[1][1] == letter and board[2][2] == letter) \
            or (board[0][2] == letter and board[1][1] == letter and board[2][0] == letter):
       return True
    return False

Способ проверки, если ход действителен Попытка движения действительна, если это число от 0 до 8 (представляющее квадрат), и если этот квадрат еще не сделан. Сначала мы можем проверить, находится ли перемещение в заранее определенном списке действительных движений и возвращает false в противном случае. Если это действительное движение, нам просто нужно убедиться, что квадрат в настоящее время имеет пробел.

def valid_move(move):
    if move not in VALID_MOVES:
        return False
    move = int(move)
    row = move // BOARD_SIZE
    column = move % BOARD_SIZE
    return board[row][column] == BLANK

подсказки игрокам сделать свои движения В отличие от языков, таких как Java, нет смысла основного метода. Если __name__ будет оценивать true, если исходный файл работает как главная программа. Игровой цикл и вход проигрывателя будут размещены в этом блоке.

Одна итерация игровой петли состоит из двух движений игрока. Игровой цикл работает, пока доска не будет полной или выигрыш не обнаружен рано. Вход для перемещений проигрывателя извлекается через вход () и повторяется несколько раз, если перемещение не является действительным. Доска обновляется и напечатана после каждого перемещения, чтобы следующий игрок мог сделать обоснованное решение. Конечный результат печатается на консоль в случае выигрыша игрока или галстука.

if __name__ == '__main__':
    print_board()
    while not board_full():
        # player 1
        player_one_move = input("Player 1 [X], make your move: ")
        while not valid_move(player_one_move):
            player_one_move = input("Player 1 [X], please enter a proper move: ")
        update_board(int(player_one_move), True)
        if is_win(PLAYER_ONE_MOVE):
            print("Player 1 Wins")
            break
        elif board_full():
            print("Tie")
            break
        # player 2
        player_two_move = input("Player 2 [O], make your move: ")
        while not valid_move(player_two_move):
            player_two_move = input("Player 2 [O], please enter a proper move: ")
        update_board(int(player_two_move), False)
        if is_win(PLAYER_TWO_MOVE):
            print("Player 2 Wins")
            break
    print("Good Game!")

Вызов Надеюсь, у вас есть что-то из этого. Вы можете проверить, если вы понимаете это, увидев, если вы можете построить Connect Four!

Оригинал: “https://dev.to/nasirpi/create-tic-tac-toe-with-python-877”