全局变量不是全局变量?

问题描述 投票:0回答:1

这就是一个井字游戏,尽管它还没有完成,下面的代码是我的整个程序,没有其他的导入或类似的东西,当我有top_left = turn的时候,它的意思是改变顶部的变量top_left为1或2,当变量改变时,它的意思是在左上角或中上角的方格中画一个0为1,为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")
python processing
1个回答
1
投票

global 声明 是一个声明,它对当前整个代码块都有效。这意味着列出的标识符将被解释为 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")

    # [...]

1
投票

似乎你已经定义了几个函数,但你没有调用任何一个。当你运行程序时,你的程序如何知道该使用哪个函数?

你需要调用一个或多个函数。试着在你的程序底部添加一个调用,你就会发现它在 "工作"。用引号,因为我会怀疑你会有错误。例如,如果你将调用你的函数 mousePressed(),那么你就会出现一个错误,抱怨说 println 不被定义。确实如此。println 不是一个python函数。同样,你的程序也不会知道 rect()ellipse()line() 如果你不导入它们。

希望这能帮助你

© www.soinside.com 2019 - 2024. All rights reserved.