【发布时间】:2015-06-30 01:06:09
【问题描述】:
我正在尝试生成一个大型平铺地图,然后将其显示在屏幕上。地图应该是随机的,目前只包含两种类型的图块。
但是,现在发生的情况是 Tile Map 的每一行都被高度图的第一行覆盖,因此我的地图在显示时会显示相似图块的直线列。
我相信这是由于我编写 for 循环的方式,它迭代整个高度图,甚至在到达第二个图块列表之前。尽管由于我尝试包含的图块选择的随机元素,应该至少会在地图中引入一些噪声,但似乎没有。
这是我运行代码时显示的屏幕截图的链接。
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
【问题讨论】: