【问题标题】:How to change/get value of rectangle in a while loop in pygame如何在pygame的while循环中更改/获取矩形的值
【发布时间】:2019-05-08 00:19:15
【问题描述】:

在我的游戏中,我试图让正在掉落的矩形在三个列表中具有随机生成的颜色,并且每次生成新矩形时,颜色都会随机更改为这三个中的一个名单。使用我现在拥有的代码,它会在这三种颜色之间快速循环,一次又一次地不停地循环。我还想弄清楚如何获取块的任何颜色并使相邻的相同颜色的块消失,但我没有运气尝试编写代码。

我尝试将颜色设置为 while 循环之外的变量,但它只从列表中随机选择一次颜色,并且不会再次更改。

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

    矩形列表是不够的。你也需要一个颜色列表。

    colors = [red,green,blue]
    colorChoice = random.choice(colors)
    player = pygame.Rect(x,y,width,height)
    copylist = []
    colorList = []
    

    每次生成新方块时,都必须将当前颜色附加到颜色列表中,并且必须将当前矩形附加到方块列表中。此外,必须设置新的随机颜色。
    创建一个完成这项工作的函数并使用global statement 在全局范围内设置变量:

    def newBlock():
       global player, copylist, colorList, colorChoice
    
       copylist.append(player.copy())
       colorList.append(colorChoice)
       player.y = 50 
       colorChoice = random.choice(colors)
    

    调用newBlock 生成一个新块并绘制其颜色的 ech 块:

    while run:    
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
            elif event.type == moveDownEvent:
                if player.y >= 390 or player.move(0, vel).collidelist(copylist) >= 0:
                    newBlock() # <--- spawn new block
                else:
                    player.y += vel
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and player.x > 168 and player.move(-vel, 0).collidelist(copylist) < 0:
            player.x -= vel
        if keys[pygame.K_RIGHT] and player.x < 330 and player.move(vel, 0).collidelist(copylist) < 0:
            player.x += vel
        if keys[pygame.K_DOWN] and player.y < 390:
            if player.move(0, vel).collidelist(copylist) >= 0:
                newBlock() # <--- spawn new block
            else:
                player.y += vel
    
        win.fill((128,128,128))
    
        pygame.draw.line(win,(0,0,0),(148,100),(148,410),2)
        pygame.draw.line(win,(0,0,0),(350,100),(350,410),2)
        pygame.draw.line(win,(0,0,0),(148,410),(350,410),2)
    
        for i in range(len(copylist)):    
            pygame.draw.rect(win, colorList[i], copylist[i]) # <--- draw block with its color
    
        pygame.draw.rect(win, colorChoice, player)
        pygame.display.update()
        clock.tick(24)
    pygame.quit()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2015-12-26
      相关资源
      最近更新 更多