【问题标题】:Random Number Functions Python随机数函数 Python
【发布时间】:2013-07-24 17:58:10
【问题描述】:

我正在制作一个小游戏,当事件发生时,矩形会在随机的 x 和 y 点生成,我在实现函数时遇到了一些麻烦。下面是一些基本代码:

xran = random.randint(5, 485)
yran = random.randint(5, 485)
xran1 = random.randint(5, 450)
yran1 = random.randint(5, 400)

def allRand():
     #This REGENERATES those randoms making it 'spawn' in a new location.
     xran = random.randint(0, 485)
     yran = random.randint(0, 485)
     xran1 = random.randint(5, 450)
     yran1 = random.randint(5, 400)

char = pygame.draw.rect(screen, black, (x,y,15,15), 0)
food = pygame.draw.rect(screen, green, (xran,yran,10,10), 0)
badGuy = pygame.draw.rect(screen, red, (xran1,yran1,50,100), 0)


if char.colliderect(food):
    score += 1
    print "Your score is:",score
    allRand()

调用一个重新生成随机数的函数对你们中的任何人都有效吗?我知道它会重新生成它们,因为我已经让它打印回变量,但由于某种原因,我的 rect 没有在那里做。

注意:这只是我的代码的 sn-p,它只是为了让我了解我正在尝试做什么。

谢谢!

【问题讨论】:

    标签: function random pygame


    【解决方案1】:

    您需要在allRand() 函数中使用global 声明xran 等。否则,它只是在函数范围内创建新变量,为它们分配随机值,然后在函数返回时将它们丢弃。

    【讨论】:

    • 不,它没有。如果您没有将它们声明为全局在函数中,那么它们在函数中的赋值会在函数范围内创建新变量,这些变量会影响全局变量。自己测试一下就知道了。
    【解决方案2】:

    您的 allRand() 方法没有任何代码。您必须在该函数中缩进所需的行。

    这有点工作,因为你仍然在你的定义下面调用这些语句。但这不是因为你在调用函数。

    【讨论】:

      【解决方案3】:

      添加到 Lee Daniel Crocker 的回答中,当您在函数中创建变量时,它们仅存在于该函数中。如果您希望它们存在于外部,您可以按照他的建议将它们设为全局变量,您可以返回它们并捕获它们:

      >>> def square(number):
          squared = number*number
          return squared
      
      >>> square(3)
      9
      >>> ninesquared = square(3)
      >>> ninesquared
      9
      >>> 
      

      Read more

      看来您需要掌握基础知识。我建议在 pygame 中尝试之前先这样做。

      编辑:

      如果您在函数之外定义变量,它们也不会影响您在函数中定义的任何变量。

      >>> x = 5
      >>> def rais():
          x = 10
      
      
      >>> x
      5
      >>> rais()
      >>> x
      5
      >>> 
      

      注意rais 是如何什么都没做的? 如果我们将rais 中的行更改为x = x + 1,那么python 将返回一个x 未定义的错误。

      如果你想让你的变量进入函数,你需要将它们作为参数传递,但是再一次,除非你返回并捕获它们,否则它们不会影响函数之外的任何东西。再一次,您可以将它们声明为全局变量,这也可以。

      【讨论】:

        猜你喜欢
        • 2016-07-23
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 2017-10-19
        • 2015-04-26
        • 1970-01-01
        相关资源
        最近更新 更多