Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中,类似字符的列表映射是如何工作的?_Python_Arrays_Matrix_Pygame - Fatal编程技术网

在Python中,类似字符的列表映射是如何工作的?

在Python中,类似字符的列表映射是如何工作的?,python,arrays,matrix,pygame,Python,Arrays,Matrix,Pygame,列表映射是如何工作的?我见过他们是这样的 level = [ "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP", "P P", "P P", "P P", "P

列表映射是如何工作的?我见过他们是这样的

level = [
    "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "P                    PPPPPPPPPPP           P",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "P    PPPPPPPP                              P",
    "P                                          P",
    "P                          PPPPPPP         P",
    "P                 PPPPPP                   P",
    "P                                          P",
    "P         PPPPPPP                          P",
    "P                                          P",
    "P                     PPPPPP               P",
    "P                                          P",
    "P   PPPPPPPPPPP                            P",
    "P                                          P",
    "P                 PPPPPPPPPPP              P",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]
我也看到过用多维数组表示的。。我知道我们会反复使用它们,但我们到底如何让它们出现在我们的游戏中,以及它们在游戏开发社区中的实际调用方式???

您所称的“列表贴图”只是一个2D贴图,其中每个符号/字母代表屏幕上不同的瓷砖纹理。地图中的每一行定义一个屏幕上的行

下面的代码从问题中提取数组/列表,并将其作为砖块或草块绘制到屏幕上。纹理来自。基本上,当调用
drawMap()
函数时,一个双循环会在级别字符串上迭代,绘制一个32x32图形位图的网格,每个字母都会发生变化

代码的其余部分只是处理窗口的基本打开、箭头键输入和窗口的重新调整大小

import pygame
import time
import sys

# Window size
WINDOW_WIDTH=400
WINDOW_HEIGHT=400

pygame.init()
WINDOW  = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ), pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.RESIZABLE )
pygame.display.set_caption("Map Loader")

clock = pygame.time.Clock()

TILE_SIZE = 32
wall_image  = pygame.image.load('brick_32.png')
grass_image = pygame.image.load('grass_32.png')

level = [
    "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "P                    PPPPPPPPPPP           P",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "P    PPPPPPPP                              P",
    "P                                          P",
    "P                          PPPPPPP         P",
    "P                 PPPPPP                   P",
    "P                                          P",
    "P         PPPPPPP                          P",
    "P                                          P",
    "P                     PPPPPP               P",
    "P                                          P",
    "P   PPPPPPPPPPP                            P",
    "P                                          P",
    "P                 PPPPPPPPPPP              P",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "P                                          P",
    "PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP",]


def drawMap( screen, level ):
    level_width = len(level[0])  # width for first row
    level_height = len(level)    # number of rows

    for y in range( level_height ):
        for x in range ( level_width ):
            if ( level[y][x] == 'P' ):
                screen.blit( wall_image, ( x*TILE_SIZE, y*TILE_SIZE) )
            elif ( level[y][x] == ' ' ):
                screen.blit( grass_image, (x*TILE_SIZE, y*TILE_SIZE) )

def drawGameWindow( screen ):
    global WINDOW_WIDTH, WINDOW_HEIGHT
    drawMap( screen, level )
    pygame.display.update()
    pygame.display.flip()


clock = pygame.time.Clock()
done = False
while not done:

    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True
        elif ( event.type == pygame.VIDEORESIZE ):
            WINDOW_WIDTH  = event.w
            WINDOW_HEIGHT = event.h
            WINDOW  = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ), pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.RESIZABLE )

    # Movement keys
    keys = pygame.key.get_pressed()
    if ( keys[pygame.K_UP] ):
        print("up")
    elif ( keys[pygame.K_DOWN] ):
        print("down")
    elif ( keys[pygame.K_LEFT] ):
        print("left")
    elif ( keys[pygame.K_RIGHT] ):
        print("right")

    drawGameWindow( WINDOW )
    clock.tick_busy_loop( 60 )


pygame.quit()
显然,在真实的游戏中,地图比屏幕大得多。因此,需要编写代码,以便只在屏幕上绘制地图的正确部分。上面的示例代码只是简单地从左上角绘制。如果列表贴图相当复杂,则可能值得将所有平铺纹理加载到字典中,然后仅按数字进行绘制,例如:
textures['P']
->
textures[level[y][x]

还有一些python库已经可以处理这类事情了。一个流行的例子是,但也有一些其他的

非主题,但相关注释:

如果你见过a(我个人最喜欢的是),他们使用字母作为“图形”元素,例如,玩家是
@
,龙是
d
d
,他们从不需要使用花哨的图形,只需要文字符号就可以制作出一个很棒的游戏