我試圖生成一個大的瓷磚地圖,然後將顯示在屏幕上。地圖應該是隨機的,目前只包含兩種類型的貼圖。在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