我试图生成一个大的瓷砖地图,然后将显示在屏幕上。地图应该是随机的,目前只包含两种类型的贴图。在Python中用于平面贴图for循环的问题
但是,现在发生的情况是Tile Map的每一行都会被高度图中的第一行覆盖,以便我的地图在显示时显示类似tile的直线列。
我相信这是由于我写了我的循环,它遍历整个高度图,甚至在达到第二个贴图列表之前。虽然由于我的尝试包含了一些随机元素,所以应该至少有一些噪声引入到地图中,但似乎没有任何元素。
这里是一个链接,显示当我运行我的代码时显示的内容。
import pygame, random
class Map(object):
MAPWIDTH = 64
MAPHEIGHT = 48
HEIGHTS = [0, 1, 2, 3, 4, 5, 6, 7, 8]
def __init__(self):
self.heightmap = [[random.choice(self.HEIGHTS) for w in range(self.MAPWIDTH)] for h in range(self.MAPHEIGHT)]
self.Tiles = [['' for w in range(self.MAPWIDTH)] for h in range(self.MAPHEIGHT)]
for rows in self.Tiles:
for row in self.heightmap:
i = 0
for height in row:
# 100% water block
if height == 0:
rows[i] = 'WATER'
# 70% water block
if height == range(1, 3):
if random.randint(0, 9) == range(0, 6):
rows[i] = 'WATER'
else:
rows[i] = 'GRASS'
# 50% water block
if height == 4:
if random.random() == 0:
rows[i] = 'WATER'
else:
rows[i] = 'GRASS'
# 80% grass block
if height == range(5, 7):
if random.randint(0, 9) == range(0, 6):
rows[i] = 'GRASS'
else:
rows[i] = 'WATER'
# 100% grass block
if height == 8:
rows[i] = 'GRASS'
i += 1
太感谢你了,让我知道我错在哪里,然后无论如何给我一个更有效的解决方案!我遇到的一个后续问题是chance_of_grass是否是Python代码的首选样式? 也就是说,在编写python方法时,我应该使用下划线还是camelcase(chanceOfGrass)? – PKJamoo
@PKJamoo在python中,你通常使用下划线作为函数。从python样式指南:*函数名称应该是小写字母,必要时用下划线分隔以提高可读性。 – sloth