Вопросы о программе для игры в крестики-нолики, которую я пишу

Я делаю программу крестиков-ноликов на питоне.

У меня два вопроса:

  1. Как создать трюк для отключения move(), когда мы создали в игре диагональ или линию (xxx или ООО).

  2. В моей программе возникает некоторая ошибка :: в строке 28: :( UnboundLocalError: локальная переменная stop, на которую ссылается перед назначением)

Мой код:

import random

board = {"top-l":" ","top-m":" ","top-r":" ","mid-l":" ","mid-m":" ","mid-r":" ","low-l":" ","low-m":" ","low-r":" "}

def print_board(board):
    print( board["top-l"] + "|" + board["top-m"] + "|" + board["top-r"])
    print("--------")
    print( board["mid-l"] + "|" + board["mid-m"] + "|" + board["mid-r"])
    print("--------")
    print( board["low-l"] + "|" + board["low-m"] + "|" + board["low-r"])
    if random.randint(0,1) == 1:
        turn = "X"#user
    else:
        turn = "O"# computer


def instructions():
    print("TYPE top FOR TOP ROW, mid FOR MIDDLE ROW AND low FOR LOWEST ROW")
    print(" ")
    print("TYPE -l FOR LEFT CORNER, -m FOR MIDDLE CORNER AND -r FOR RIGHT CORNER")
    print(" ")
    print("SO COMMAND FOR TOP RIGHT CORNER SHOULD BE top-r ")
    print("AN EMPTY BOARD LOOKS LIKE::")
    print_board(board)


def move():
        for i in range(10):

            print_board(board)
            print("CHANCE NO. " + str(i))
            if turn == "O":
                if i == 1:
                    print("COMPUTER WILL TAKE THE FIRST TURN(FOR " + turn + ")")
                else:
                    print("IT'S COMPUTER TURN NOW")
                y = random.randint(0,9)
                move = str(board_list[y])
            elif turn == "x":
                if i == 1:
                    print("USER WILL TAKE THE FIRST TURN(FOR " + turn + "). PLEASE ENTER YOUR MOVE")
                else:
                    print("IT'S USERS TURN NOW. PLEASE ENTER YOUR MOVE")        
                move = input()
            print("STEP TAKEN IS ::" + move)
            board["move"] = turn
            if turn == "x":
                tu = 0
                turn = "O"
            elif turn == "O":
                tu = 1
                turn = "X"
            if board["top-l"] == board["top-m"] == board["top-r"] or board["mid-l"] == board["mid-m"] == board["mid-r"] or board["low-l"] == board["low-m"] == board["low-r"] or board["mid-l"] == board["top-l"] == board["low-l"] or board["mid-m"] == board["top-m"] == board["low-m"] or board["mid-r"] == board["top-r"] == board["low-r"] or board["top-l"] == board["mid-m"] == board["low-r"] or board["top-r"] == board["mid-m"] == board["low-l"]:
                stop = 1
            else:
                stop = 0

if __name__ ==  "__main__":
    board_list = list(board.keys())

    tu = int(0)# 0 for computer
               # 1 for user
    stop = int(0)# 0 = continue
    print("PRESENTING YOU TIC-TAC-TOE GAME v1.0 BY DK SHARAMA")
    print("PLEASE ENTER YOUR NAME::")
    user = str(input())
    print("WELCOME " + user)
    instructions()
    print("TO PLAY PRESS 1 ELSE 0")
    play = int(input())
    if play == 1:
        move()
        if stop == 1:
            print("GAME OVER")
            if tu == 0:
                print("COMPUTER WON")
            elif tu == 1:
                print("USER WON")
        elif stop == 0:
            print("IT'S A TIE :: NO ONE WON")

Вы можете использовать return в любом месте move() для завершения цикла.

quamrana 02.05.2018 10:37

Что касается переменной stop, если вы хотите использовать ее как глобальную переменную, вам необходимо объявить global stop в своей функции move(), прежде чем использовать переменную stop внутри этой функции. docs.python.org/3/reference/…

Benoît Zu 02.05.2018 10:40

вы никогда не определяете stop внутри функции перемещения

L_Church 02.05.2018 10:41

Обновите вопрос, указав полную информацию об ошибках. Он покажет точную строку исходного кода, где находится ошибка.

quamrana 02.05.2018 10:42

btw +1 для красиво отформатированного кода.

quamrana 02.05.2018 10:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
71
0

Другие вопросы по теме