【问题标题】:global variable is not global?全局变量不是全局的?
【发布时间】:2020-06-04 17:59:31
【问题描述】:

这是一个井字游戏,即使它未完成,下面的代码是我的整个程序,没有其他导入或类似的东西,当我有 top_left = turn 时,它意味着改变顶部的变量称为 top_left 的值是 1 或 2,当变量更改时,它意味着在左上角或顶部中间的正方形中为 1 绘制一个 0 为 2 你在其中一个正方形中得到一个 X,对于某些原因值更改为一或二,但 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】:

global statement 是一个适用于整个当前代码块的声明。这意味着列出的标识符将被解释为全局变量。

这意味着,您必须将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")

    # [...]

【讨论】:

    【解决方案2】:

    您似乎已经定义了一些函数,但您没有调用它们中的任何一个。您的程序在运行时应该如何知道使用哪一个?

    您需要调用一个或多个函数。尝试在程序底部添加一个调用,它应该“工作”。用引号引起来,因为我怀疑你会有错误。例如,如果您将调用您的函数mousePressed(),那么您将收到一个错误,抱怨println 未定义。事实上,println 不是 python 函数。同样,如果您不导入它们,您的程序将不会知道 rect()ellipse()line()

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多