python - 如何修改我的代码,以便列表中的图像显示在行和图 block 中?

标签 python pygame

我正在做的是创建一个内存图 block 游戏,该游戏需要 8 个图像的列表,每个图像一次出现两次。这是我的代码中有问题的部分。

self.images_1_2_8 = ['image1.bmp','image2.bmp','image3.bmp','image4.bmp','image5.bmp','image6.bmp','image8.bmp','image7.bmp','image1.bmp','image2.bmp','image3.bmp','image4.bmp','image5.bmp','image6.bmp','image7.bmp','image8.bmp']

  self.collect_images = []
  for select_images in self.images_1_2_8:       
     image = pygame.image.load(select_images)

     #width = image.get_width()
     #height = image.get_height()
     random.shuffle(self.self.images_1_2_8)

  for row_index in range(0, self.board_size):
     row = []
     for col_index in range(0,self.board_size):
        width = image.get_width()
        height = image.get_height()            
        x = width * col_index
        y = height * row_index
        tile = Tile(x,y, self.select_images_1_2_8[image_index], self.surface)         row.append(tile)
     self.board.append(row)

我不断收到的错误消息是: builtins.TypeError:'pygame.Surface'对象不可订阅

我发现这意味着 getitem() 属性没有将我的图像作为列表读取?我想这就是这个意思。如果我删除列表 [row_index*self.board_size+col_index],则会出现图像(列表中仅出现一张图像,填充所有 16 个索引)。

我知道这是一个简单的解决方案,但我对 python 是全新的,而且我已经这样做了几周了......如果有人能够提供帮助,请提前感谢您!

最佳答案

查看代码,它应该从 collect_images 中选择,而不是 image ,后者只是加载的最后一个(单个)图像(不是列表)。代码已经差不多了,只需要调整一下。

self.images_1_2_8 = ['image1.bmp','image2.bmp','image3.bmp','image4.bmp','image5.bmp','image6.bmp','image8.bmp','image7.bmp','image1.bmp','image2.bmp','image3.bmp','image4.bmp','image5.bmp','image6.bmp','image7.bmp','image8.bmp']

  self.collect_images = []
  for select_images in self.images_1_2_8:       
     image = pygame.image.load(select_images)
     self.collect_images.append(image)           # <-- make the list in collect_images
     #width = image.get_width()
     #height = image.get_height()
     random.shuffle(self.collect_images)         # <-- shuffle loaded images


  for row_index in range(0, self.board_size):
     row = []
     for col_index in range(0,self.board_size):
        width = image.get_width()
        height = image.get_height()            
        x = width * col_index
        y = height * row_index
        tile = Tile(x,y, collect_images[image_index], self.surface)  # <-- use the image-list
        row.append(tile)
     self.board.append(row)

没有用于更新image_index的代码。请确保该值从 0 递增到列表中图像的最大数量之内。

关于python - 如何修改我的代码,以便列表中的图像显示在行和图 block 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59149021/

相关文章:

c++ - 如何在 SDL 2.0 中实时获取所有事件的 "list"?

python - 在 python 3 中可以是数字和/或字符串的格式值

python - 如何将 pandas 数据帧传递到请求参数中

python - 从 sqlite3 切换到 postgres 后 django 迁移失败

python - 下载变压器模型以供离线使用

python - 使用python,如何读取文件的 "date created"?

python - Pygame:将png图像中的所有白色像素转换为完全透明

javascript - 网页游戏编程使用什么语言

image - pygame问题加载图像( Sprite )

python - 我的游戏角色只有当鼠标在屏幕上移动时才会移动,而它需要鼠标