【问题标题】:Storing multiple image files in a dictionary在字典中存储多个图像文件
【发布时间】:2017-12-19 11:22:53
【问题描述】:

我在 python 方面相对缺乏经验,并且正在为一个学校项目编写一个射击游戏。我正在尝试删除一些保存图像的变量:

wavetransition=pygame.image.load("TransitionScreen.png")
wavetransition=pygame.transform.scale(wavetransition,(WIDTH,HEIGHT))
wavetransition2=pygame.image.load("TransitionScreen1.png")
wavetransition2=pygame.transform.scale(wavetransition2,(WIDTH,HEIGHT))
wavetransition3=pygame.image.load("TransitionScreen2.png")
wavetransition3=pygame.transform.scale(wavetransition3,(WIDTH,HEIGHT))
wavetransition4=pygame.image.load("TransitionScreen3.png")
wavetransition4=pygame.transform.scale(wavetransition4,(WIDTH,HEIGHT))
wavetransition5=pygame.image.load("TransitionScreen4.png")
wavetransition5=pygame.transform.scale(wavetransition5,(WIDTH,HEIGHT))

这些图像用作游戏中关卡之间的过渡屏幕。然后在 random.randrange() 变量中调用它们:

rander=random.randrange(1,4)#Just For These Numbers To Redefine
if rander2==1:#The Random Backgrounds Displayed On The Wave Screen
      screen2.blit(wavetransition,(0,0))
if rander2==2:
      screen2.blit(wavetransition2,(0,0))
if rander2==3:
      screen2.blit(wavetransition3,(0,0))
if rander2==4:
      screen2.blit(wavetransition4,(0,0))
if rander2==5:
      screen2.blit(wavetransition5,(0,0))

有什么办法可以让它看起来“更短”?谢谢

【问题讨论】:

    标签: python image dictionary random pygame


    【解决方案1】:

    使用列表和迭代:

    # image paths
    img_paths = ["TransitionScreen.png", "TransitionScreen1.png", ...]
    
    wavetransitions = []
    for img_path in img_paths:
        # loads, resizes and adds image to wavetransitions list
        img = pygame.image.load(img_path)
        img = pygame.transform.scale(img, (WIDTH, HEIGHT))
        wavetransitions.append(img)
    
    # as rander2 is the index+1 of the image, you can simply do
    screen2.blit(wavetransitions[rander2 - 1], (0, 0))
    

    【讨论】:

    • 感谢您的帮助!我将使用列表和迭代并检查这个答案。
    【解决方案2】:

    您可以将list 用于图像,将dict 用于wavetransitions

    import re
    import random
    
    images = ["TransitionScreen0.png",  # Note, added 0 to the filename
              "TransitionScreen1.png",
              "TransitionScreen2.png",
              "TransitionScreen3.png",
              "TransitionScreen4.png"]
    
    wavetransitions = dict()
    
    for image in images:
        m = re.search(r'(\d+)$', image.split('.')[0]).group(0)
        key = "wavetransition" + m  # m is the number that ends the name of image
        value = pygame.image.load(image)
        value = pygame.transform.scale(value, (WIDTH, HEIGHT))
        wavetransitions[key] = value
    
    wavetransitions_keys = wavetransitions.keys()
    
    screen2.blit(wavetransitions[random.choice(wavetransitions_keys)], (0, 0))
    

    【讨论】:

      猜你喜欢
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多