Один из способов сделать карту в Pygame - это сделать ее с помощью плиток, но я считаю, что это требует больших усилий, так как сначала вы должны научиться использовать ее. Другой более распространенный способ сделать это - создать 2-D список, представляющий ваши x
и y
для каждой точки на вашей карте, в зависимости от того, как вы масштабируете карту. Сначала давайте поговорим о создании карты:
# lets say 0 represents empty space
# 1 represents a block image u might have for example dirt image or a wall
layout = [ [1, 0, 2],
[0, 1, 1] ]
Затем, чтобы действительно нарисовать карту, вы можете l oop поверх этого списка, сначала каждый слой в списке, затем каждый элемент в этом слое, например:
y = 0
for layer in layout:
x = 0
for element in layer:
if element == 1:
D.blit(your image, (x * block_length, y * block_height))
if element == 2:
D.blit(your image, (x * other_block_length, y * other_block_height))
else: # else do nothing, which leaves the area empty
pass
x += 1 # add 1 to x every inner loop
y += 1 # add 1 to y value every outer loop
Здесь пример из одной из моих игр
class Game_map:
def __init__(self):
self.land = pygame.image.load(r"C:\Users\pro-gramar\OneDrive\Documents\A level python codes\final game\land.png").convert()
self.height = 200
self.width = 200
self.land = pygame.transform.scale(self.land, (170 , 200))
self.land.set_colorkey((0, 0, 0))
self.map_width = 6000
self.map_height = 2000
# 0 = emepty
# 1 = land
self.layout = [[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0 ,0 ,0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 ,0 ,0 ,0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0 ],
[ 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0 ,0 ,0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]]
def draw(self):
y = 0
for layer in self.layout:
x = 0
for land in layer:
if land == 1:
D.blit(self.land, (x * 160 , y * 200 ))
if land == 0:
pass
x += 1
y += 1