首页 > 解决方案 > 如何在多个位置或功能访问从列表中选择的项目

问题描述

在这里,我正在尝试制作一个游戏,我有 3 个位于blck_array中的块图像我想从该列表中选择一个随机项目,并使其在预先指定的(x-pos)处从上到下移动blck_pos。所以问题是我已经创建了一个函数rand_block来从列表中选择一个随机块,因此在create_blockmove_block中都应该可以访问所选图像 以执行某些操作。我一直不知道如何使用该随机选择的块两种功能。

import pygame, sys,random
    
    def rand_block():
        global blck
        blck = random.choice(blck_array)
    
    def create_block():
        rand_block()
        blck=blck.get_rect(midtop = (random.choice(blck_pos),-50))
        return blck
    
    def move_block(blocks):
        for block in blocks:
            block.centery-=5
        return blocks
    def draw_block(blocks):
        rand_block()
        for block in blocks:
            screen.blit(blck,block)
    # blocks
    blocks={
        1:pygame.image.load('blocks/BLOCK L.png'),
        2:pygame.image.load('blocks/BLOCK S.png'),
        3:pygame.image.load('blocks/BLOCK M.png'),
        }
    blck_array=[blocks[1],blocks[2],blocks[3]]
    blck_pos=[0,47,553,190,250]
    
    block_list=[]
    
    pygame.init()
    screen = pygame.display.set_mode((500, 600))
    screen.fill((255, 255, 255))
    clock=pygame.time.Clock()
    
    SPAWNPIPE=pygame.USEREVENT
    pygame.time.set_timer(SPAWNPIPE,1200)
    
    bal_x=0
    loop = True
    
    while loop:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type==SPAWNPIPE:
                block_list.append(create_block)
    
    
    
        screen.fill((255,255,255))
        block_list=move_block(block_list)
        draw_block(block_list)
        pygame.display.update()
        clock.tick(120)

标签: pythonpygame

解决方案


以下是两个建议的解决方案:

  1. 我想也许在你定义blck_arrayand do之后定义你的函数blck = random.choice(blck_array),而不需要一个函数。所以是这样的:
blck_array = [blocks[1], blocks[2], blocks[3]]
blck = random.choice(blck_array)
def create_block():
...
  1. 或者,如果您想保留该rand_block功能,那么您可以做的是让它返回blck。所以,像这样:
def rand_block(arr): # arr is the list of blocks (blck_array), which should be provided as input
    return random.choice(arr)

然后,您可以将返回的值用作 blck。所以你可以blck = rand_block(block_array)在需要的地方写。


推荐阅读