python - 如何将关卡布局保存在变量中

标签 python pygame

目前,我的下一个项目将是一个平台游戏,当我在 stackoverflow 上查找有关多种机制的研究时,我看到很多人在做同样的事情:他们保存带有某些变量的布局,然后去某个地方将其卸载,然后它只是在游戏中呈现。我很感兴趣,所以我进一步查看,但没有发现任何有关如何加载/卸载此类状态的信息,或者也许我只是没有正确地措辞我的搜索。

无论哪种方式,我该怎么做?

例如:我会将关卡布局保存为数组或单个多行字符串,然后以某种方式为每个字母生成一个图 block Sprite ,例如 T。

import pygame

# Storage method A
level = '''
X X X X X
X X X X X
T T X X X
X X X T T
T T T T T
'''

# Storage Method B

level2 = [ 
    'XXXXX',
    'XXXXX',
    'TTXXX',
    'XXXTT',
    'TTTTT'
]

# X is blank space, T is tiles

# Then what? Thats what I need to know.
# If someone already answered this and I'm just not using the right keywords let me know.

最佳答案

您需要计算每个图 block 的像素位置。要绘制任何图 block ,您需要知道

  1. Canvas 的大小
  2. 网格的大小
  3. 图 block 在网格中的位置

1:找到 Canvas 的大小应该很简单。

2:对于第二种存储方式,您可以这样做

height = len(level2)
width = len(level2[0]) #Assuming all rows are of equal length and there's at least one row

3:我们将迭代行和字符,以跟踪我们在侧面网格中的位置。

def draw_tiles(canvas_width, canvas_height, width, height, level2):
  for row in range(height):
    for column in range(width):
      if list(level2[row])[column] == 'T':
        pixel_x = int(canvas_width/width)*column
        pixel_y = int(canvas_height/height)*row
        draw_tile(pixel_x, pixel_y)

现在您需要做的就是定义draw_tile(x, y)函数来在 Canvas 上绘制一个图 block ,其左上角位于像素坐标(x, y)上。我确信 pygame 可以做到这一点。

确保设置网格宽度/高度,以便 canvas_width/width 和 canvas_height/height 都是整数。否则,您的瓷砖会因舍入而稍微偏移。

关于python - 如何将关卡布局保存在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47339874/

相关文章:

python - 适用于 Google App Engine Python 的 OAuth

python - 有关如何使用 python 绘制 U-MATRIX 的任何示例/想法(在 SOM 上工作)?

python - 如何加载所有扑克牌的图像?

python - 为什么 pygame.midi 不能在 Macos 上运行,而 pygame.mixer 可以

python - Pygame:让事物移动得比 1 慢

python - 您可以将多个路径传递给 Django runserver --pythonpath 指令吗?

python - Pandas-根据特定条件添加新行

python - 如何在Python中使用urllib2创建新目录并保存文件?

python - Pygame 绘制抗锯齿形状,然后传输到主窗口

python - pygame 主循环中的扭曲客户端?