全局变量不是全局的?
global variable is not global?
这是一个井字游戏,尽管它还没有完成,下面的代码是我的整个程序,没有其他导入或类似的东西,当我有 top_left = turn它意味着将顶部名为 top_left 的变量更改为 1 或 2 的值,当变量更改时,它意味着在左上角或顶部中间方块中为 1 绘制 0 为 2 你得到一个方块中的 X,由于某种原因,值变为 1 或 2,但 X 或 0 不绘制
global top_left, top_middle, top_right
global middle_left, center, middle_right
global bottom_left, bottom_middle, bottom_right
#these are the variables used to check if someone has put their move their already
#0 = empty
#1 = Circle
#2 = X
top_left = 0
top_middle = 0
top_right = 0
middle_left = 0
center = 0
middle_right = 0
bottom_left = 0
bottom_middle = 0
bottom_right = 0
#code for changing turns
turn = 1
def turn_changer():
global turn
if turn == 1:
turn = 2
else:
turn = 1
#board setup
def setup():
size(600,600)
#this hurt my brain trying to fully understand
#lines dividing board
def draw():
for y in range(3):
for x in range(3):
rect(200*x,200*y,200,200)
#hope this is not what geomtry is like
#top left ellipse
if top_left == 1:
ellipse(100,100,150,150)
#top left X
elif top_left == 2:
line(0,0,200,200)
line(200,0,0,200)
#top middle ellipse
if top_middle == 1:
ellipse(300,100,150,150)
#top middle X
elif top_middle == 2:
line(200,0,400,200)
line(400,0,200,200)
#top right ellipse
if top_right == 1:
ellipse(500,100,150,150)
#top right X
elif top_right == 2:
line(400,0,600,200)
line(600,0,400,200)
#middle left ellipse
if middle_left == 1:
ellipse(100,300,150,150)
#middle left X
elif middle_left == 2:
line(0,200,200,400)
line(200,200,0,400)
#middle ellipse
if center == 1:
ellipse(300,300,150,150)
#middle X
elif center == 2:
line(200,200,400,400)
line(400,200,200,400)
#middle right ellipse
if middle_right == 1:
ellipse(500,300,150,150)
#middle right X
elif middle_right == 2:
line(400,200,600,400)
line(600,200,400,400)
#bottom left ellipse
if bottom_left == 1:
ellipse(100,500,150,150)
#bottom left X
elif bottom_left == 2:
line(0,400,200,600)
line(200,400,0,600)
#bottom middle ellipse
if bottom_middle == 1:
ellipse(300,500,150,150)
#bottom middle X
elif bottom_middle == 2:
line(200,400,400,600)
line(400,400,200,600)
#bottom right ellipse
if bottom_right == 1:
ellipse (500,500,150,150)
#bottom right X
elif bottom_right == 2:
line(400,400,600,600)
line(600,400,400,600)
#dectects the quardnates where the mouse clicked and prints them
def mousePressed():
println( (mouseX, mouseY) )
#top left square hitbox
if (mouseX > 0 and mouseX < 200) and (mouseY > 0 and mouseY < 200):
top_left = turn
turn_changer()
print("top left")
print(top_left)
#top middle square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 0 and mouseY < 200):
top_middle = turn
turn_changer()
print(top_middle)
print("top middle")
#top right square hitbox
elif (mouseX > 400 and mouseX < 600) and (mouseY > 0 and mouseY < 200):
turn_changer()
print("top right")
#middle left square hitbox
elif (mouseX > 0 and mouseX < 200) and (mouseY > 200 and mouseY < 400):
turn_changer()
print("middle left")
#center square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 200 and mouseY < 400):
turn_changer()
print("middle")
#middle right square hitbox
elif (mouseX > 400 and mouseX < 600) and (mouseY > 200 and mouseY < 400):
turn_changer()
print("middle right")
#bottom left square hitbox
elif (mouseX > 0 and mouseX < 200) and (mouseY > 400 and mouseY < 600):
turn_changer()
print("bottom left")
#bottom middle square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 400 and mouseY < 600):
turn_changer()
print("bottom middle")
#bottom right square hitbox
elif (mouseX > 400 and mouseX < 600) and (mouseY > 400 and mouseY < 600):
turn_changer()
print("bottom right")
你似乎定义了几个函数,但你没有调用它们中的任何一个。当你 运行 它时,你的程序应该如何知道要使用哪一个?
您需要调用一个或多个函数。尝试在你的程序底部添加一个调用,你应该 "working"。在引号中,因为我会怀疑你会有错误。例如,如果你将调用你的函数 mousePressed()
,那么你将有一个错误抱怨 println
没有被定义。实际上,println
不是 python 函数。同样,如果您不导入它们,您的程序将不知道 rect()
或 ellipse()
或 line()
。
希望对您有所帮助!
The global
statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals.
这意味着,您必须将 global
语句放在要写入全局命名空间中的变量的函数中。
将全局声明移至 mousePressed
:
#dectects the quardnates where the mouse clicked and prints them
def mousePressed():
global top_left, top_middle, top_right
global middle_left, center, middle_right
global bottom_left, bottom_middle, bottom_right
println( (mouseX, mouseY) )
#top left square hitbox
if (mouseX > 0 and mouseX < 200) and (mouseY > 0 and mouseY < 200):
top_left = turn
turn_changer()
print("top left")
print(top_left)
#top middle square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 0 and mouseY < 200):
top_middle = turn
turn_changer()
print(top_middle)
print("top middle")
# [...]
这是一个井字游戏,尽管它还没有完成,下面的代码是我的整个程序,没有其他导入或类似的东西,当我有 top_left = turn它意味着将顶部名为 top_left 的变量更改为 1 或 2 的值,当变量更改时,它意味着在左上角或顶部中间方块中为 1 绘制 0 为 2 你得到一个方块中的 X,由于某种原因,值变为 1 或 2,但 X 或 0 不绘制
global top_left, top_middle, top_right
global middle_left, center, middle_right
global bottom_left, bottom_middle, bottom_right
#these are the variables used to check if someone has put their move their already
#0 = empty
#1 = Circle
#2 = X
top_left = 0
top_middle = 0
top_right = 0
middle_left = 0
center = 0
middle_right = 0
bottom_left = 0
bottom_middle = 0
bottom_right = 0
#code for changing turns
turn = 1
def turn_changer():
global turn
if turn == 1:
turn = 2
else:
turn = 1
#board setup
def setup():
size(600,600)
#this hurt my brain trying to fully understand
#lines dividing board
def draw():
for y in range(3):
for x in range(3):
rect(200*x,200*y,200,200)
#hope this is not what geomtry is like
#top left ellipse
if top_left == 1:
ellipse(100,100,150,150)
#top left X
elif top_left == 2:
line(0,0,200,200)
line(200,0,0,200)
#top middle ellipse
if top_middle == 1:
ellipse(300,100,150,150)
#top middle X
elif top_middle == 2:
line(200,0,400,200)
line(400,0,200,200)
#top right ellipse
if top_right == 1:
ellipse(500,100,150,150)
#top right X
elif top_right == 2:
line(400,0,600,200)
line(600,0,400,200)
#middle left ellipse
if middle_left == 1:
ellipse(100,300,150,150)
#middle left X
elif middle_left == 2:
line(0,200,200,400)
line(200,200,0,400)
#middle ellipse
if center == 1:
ellipse(300,300,150,150)
#middle X
elif center == 2:
line(200,200,400,400)
line(400,200,200,400)
#middle right ellipse
if middle_right == 1:
ellipse(500,300,150,150)
#middle right X
elif middle_right == 2:
line(400,200,600,400)
line(600,200,400,400)
#bottom left ellipse
if bottom_left == 1:
ellipse(100,500,150,150)
#bottom left X
elif bottom_left == 2:
line(0,400,200,600)
line(200,400,0,600)
#bottom middle ellipse
if bottom_middle == 1:
ellipse(300,500,150,150)
#bottom middle X
elif bottom_middle == 2:
line(200,400,400,600)
line(400,400,200,600)
#bottom right ellipse
if bottom_right == 1:
ellipse (500,500,150,150)
#bottom right X
elif bottom_right == 2:
line(400,400,600,600)
line(600,400,400,600)
#dectects the quardnates where the mouse clicked and prints them
def mousePressed():
println( (mouseX, mouseY) )
#top left square hitbox
if (mouseX > 0 and mouseX < 200) and (mouseY > 0 and mouseY < 200):
top_left = turn
turn_changer()
print("top left")
print(top_left)
#top middle square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 0 and mouseY < 200):
top_middle = turn
turn_changer()
print(top_middle)
print("top middle")
#top right square hitbox
elif (mouseX > 400 and mouseX < 600) and (mouseY > 0 and mouseY < 200):
turn_changer()
print("top right")
#middle left square hitbox
elif (mouseX > 0 and mouseX < 200) and (mouseY > 200 and mouseY < 400):
turn_changer()
print("middle left")
#center square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 200 and mouseY < 400):
turn_changer()
print("middle")
#middle right square hitbox
elif (mouseX > 400 and mouseX < 600) and (mouseY > 200 and mouseY < 400):
turn_changer()
print("middle right")
#bottom left square hitbox
elif (mouseX > 0 and mouseX < 200) and (mouseY > 400 and mouseY < 600):
turn_changer()
print("bottom left")
#bottom middle square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 400 and mouseY < 600):
turn_changer()
print("bottom middle")
#bottom right square hitbox
elif (mouseX > 400 and mouseX < 600) and (mouseY > 400 and mouseY < 600):
turn_changer()
print("bottom right")
你似乎定义了几个函数,但你没有调用它们中的任何一个。当你 运行 它时,你的程序应该如何知道要使用哪一个?
您需要调用一个或多个函数。尝试在你的程序底部添加一个调用,你应该 "working"。在引号中,因为我会怀疑你会有错误。例如,如果你将调用你的函数 mousePressed()
,那么你将有一个错误抱怨 println
没有被定义。实际上,println
不是 python 函数。同样,如果您不导入它们,您的程序将不知道 rect()
或 ellipse()
或 line()
。
希望对您有所帮助!
The
global
statement is a declaration which holds for the entire current code block. It means that the listed identifiers are to be interpreted as globals.
这意味着,您必须将 global
语句放在要写入全局命名空间中的变量的函数中。
将全局声明移至 mousePressed
:
#dectects the quardnates where the mouse clicked and prints them
def mousePressed():
global top_left, top_middle, top_right
global middle_left, center, middle_right
global bottom_left, bottom_middle, bottom_right
println( (mouseX, mouseY) )
#top left square hitbox
if (mouseX > 0 and mouseX < 200) and (mouseY > 0 and mouseY < 200):
top_left = turn
turn_changer()
print("top left")
print(top_left)
#top middle square hitbox
elif (mouseX > 200 and mouseX < 400) and (mouseY > 0 and mouseY < 200):
top_middle = turn
turn_changer()
print(top_middle)
print("top middle")
# [...]