Итак, я делаю игру Xs и Os, как побочный проект в Python 3.4, и я столкнулся с проблемой. Несмотря на то, что работает, это не спасает доску, так как я должен определить интервалы в def game():
переменная, на которую ссылается до определения при создании игры Noughts and Crosses/Tic Tac Toe
Если я определяю слоты вне def game():
, даже если я глобализовать их, он приходит с ошибкой, slot 1
(и т.д.) referenced before definition
или что угодно. Это мой код до сих пор, и, так как я хочу цикл оборотов, я должен поставить игру в def game():
from time import sleep
gameboard = """
[1]
[2]
[3]
[4]
[5]
[6]
[7]
[8]
[9]
"""
print ("Welcome to Noughts and Crosses")
print ("The gameboard looks like this")
print (gameboard)
turn = (0)
def globalvar():
global slot1
global slot2
global slot3
global slot4
global slot5
global slot6
global slot7
global slot8
global slot9
global slotkeeper
global slotkeeper1
globalvar()
global slotkeeper1
slotkeeper = (1)
def game():
print ("Turn" ,turn + 1)
xturn = input("X, please type a number where you want to place your marker")
if xturn == ("1"):
slot1 = """
[X]
"""
elif xturn == ("2"):
slot2 = """
[X]
"""
elif xturn == ("3"):
slot3 = """
[X]
"""
elif xturn == ("4"):
slot4 = """
[X]
"""
elif xturn == ("5"):
slot5 = """
[X]
"""
elif xturn == ("6"):
slot6 = """
[X]
"""
elif xturn == ("7"):
slot7 = """
[X]
"""
elif xturn == ("8"):
slot8 = """
[X]
"""
elif xturn == ("9"):
slot9 = """
[X]
"""
oturn = input("O, please type a number where you want to place your marker")
if oturn == ("1"):
slot1 = """
[O]
"""
elif oturn == ("2"):
slot2 = """
[O]
"""
elif oturn == ("3"):
slot3 = """
[O]
"""
elif oturn == ("4"):
slot4 = """
[O]
"""
elif oturn == ("5"):
slot5 = """
[O]
"""
elif oturn == ("6"):
slot6 = """
[O]
"""
elif oturn == ("7"):
slot7 = """
[O]
"""
elif oturn == ("8"):
slot8 = """
[O]
"""
elif oturn == ("9"):
slot9 = """
[O]
"""
while slotkeeper == (1):
slot1 = """
[1]
"""
slot2 = """
[2]
"""
slot3 = """
[3]
"""
slot4 = """
[4]
"""
slot5 = """
[5]
"""
slot6 = """
[6]
"""
slot7 = """
[7]
"""
slot8 = """
[8]
"""
slot9 = """
[9]
"""
slotkeeper = (0)
sleep (0.6)
print (slot1, slot2, slot3)
print (slot4, slot5, slot6)
print (slot7, slot8, slot9)
def game2():
sleep (0.6)
slotkeeper = (0)
game()
def gamefinal():
game()
game2()
gamefinal()
Если вы запустите ее, вы увидите, что моя проблема, так как мне нужно чтобы сделать петлю while
, внутри основного определения game()
, то есть while cond1 == (1)
, так что в основном слоты остаются таким образом, пока условие истинно, в противном случае он не сохранит плату между поворотами, и я не могу определить cond1
за пределами основной def game():
или даже слоты без ошибки, на которые ссылаются перед определением, даже если я их глобализую.
Если я ставлю главные определяющие прорези вне def game():
slot1 = """
[1]
"""
slot2 = """
[2]
"""
slot3 = """
[3]
"""
slot4 = """
[4]
"""
slot5 = """
[5]
"""
slot6 = """
[6]
"""
slot7 = """
[7]
"""
slot8 = """
[8]
"""
slot9 = """
[9]
"""
, когда он печатает слоты, чтобы показать текущее состояние игрового поля, он идет к переменной ошибке ссылочным перед определением, как Я сказал, даже если я буду глобализовать их, даже не глобализируя их в def globalvar():
, как обычно, я все еще получаю эту проблему! Если я определяю слоты в начале def game():
, он не сохраняет плату (потому что она явно переопределяет слоты, как эти), и если я нахожу цикл while в начале, она просто останавливается и остается как она есть, после print (gameboard)
, он ничего не делает, и, по-видимому, программа все еще работает, поскольку это так, потому что цикл while должен быть истинным или иметь после него else
заявление, которое не работает, и просто ломает его!
EDIT: Я попытался использовать котировки вокруг slotkeeper = ("1")
в квадратных скобках и сменить while slotkeeper == (1):
на while slotkeeper == ("1")
, по-прежнему без изменений. D: РЕДАКТИРОВАНИЕ РЕДАКТИРОВАНИЯ: Это имеет значение, но вместо получения сообщения об ошибке он просто застревает, хотя я глобализовал переменную slotkeeper
и установил ее в ("1")
, а в def game2():
я установил ее в ("0")
потом!
Функция 'globalvar' не делает то, что вы, вероятно, думаете. Это бесполезно, вы можете удалить его. –
@CristianCiupitu попытался использовать его без 'globalvar()', но он все равно не имеет значения, я сказал, что в конце! (Без обид), я пытался глобализовать его без него, и это не имеет никакого значения, поэтому я попытался определить его с помощью 'globalvar' и не могу потрудиться, чтобы удалить его! : P – ClownBrains
Ick это страшный способ попробовать это организовать. Я бы посмотрел на некоторые другие реалии tic-tac-toac на Python и имитировал это! –