当满足某些条件时,尝试从我的地图文件夹中选择随机地图,我将如何选择新地图。
MAP = ['map.tmx', 'map2.tmx', 'map3.tmx']
self.map_folder = path.join(game_folder, 'maps')
self.map = TiledMap(path.join(self.map_folder, MAP))
class TiledMap:
def __init__(self, filename):
tm = pytmx.load_pygame(filename, pixelalpha=True)
self.width = tm.width * tm.tilewidth
self.height = tm.height * tm.tileheight
self.tmxdata = tm
def render(self, surface):
ti = self.tmxdata.get_tile_image_by_gid
for layer in self.tmxdata.visible_layers:
if isinstance(layer, pytmx.TiledTileLayer):
for x, y, gid, in layer:
tile = ti(gid)
if tile:
surface.blit(tile, (x * self.tmxdata.tilewidth,
y * self.tmxdata.tileheight))
def make_map(self):
surface = py.Surface((self.width, self.height))
self.render(surface)
return surface
要获得随机的东西,您需要模块random
您可以使用choice()
从列表中获取随机项目
import random
MAP = ['map.tmx', 'map2.tmx', 'map3.tmx']
map = random.choice(MAP)
print(map)
但是,如果您再次使用choice()
那么有时您可能会得到相同的地图。要获得不同的地图,您必须在下choice()
之前从MAP
中删除已使用的地图
或者你可以用不同的方式做到这一点。使用shuffle()
您可以获得随机顺序的项目列表,然后您可以使用for
循环来获得始终唯一和随机的地图
import random
MAP = ['map.tmx', 'map2.tmx', 'map3.tmx']
random.shuffle(MAP)
for map in MAPS:
print(map)
编辑:将第一张地图始终保留为第一张地图,并仅随机播放其他地图
import random
MAP = ['map.tmx', 'map2.tmx', 'map3.tmx', 'map4.tmx', 'map5.tmx']
first = MAP[:1] # list with one element - it need `first + rest` instead of `[first] + rest`
rest = MAP[1:]
random.shuffle(rest)
MAP = first + rest
print(MAP)
顺便说一句:以同样的方式,您可以将第一张和第二张地图保留在适当的位置
first = MAP[:2]
rest = MAP[2:]
编辑:洗牌后
仅加载第一个地图
map = MAP[0]
fullpath = path.join(self.map_folder, map)
self.map = TiledMap(fullpath)
要使用所有地图,您可以循环运行
for map in MAP:
fullpath = path.join(self.map_folder, map)
self.map = TiledMap(fullpath)
# ... run game with this map ...
或者将变量与level
一起使用
# first level
level = 0
map = MAP[level]
fullpath = path.join(self.map_folder, map)
self.map = TiledMap(fullpath)
# ... run game with this map ...
# next level
level += 1
map = MAP[level]
fullpath = path.join(self.map_folder, map)
self.map = TiledMap(fullpath)
# ... run game with this map ...
# next level
level += 1
map = MAP[level]
fullpath = path.join(self.map_folder, map)
self.map = TiledMap(fullpath)
# ... run game with this map ...
# etc.