优化地图生成性能
This commit is contained in:
parent
1a54844ffe
commit
4b19f7f851
@ -2,38 +2,36 @@ import random
|
||||
import pygame as pg
|
||||
from .. import tool
|
||||
from .. import constants as c
|
||||
from copy import deepcopy
|
||||
|
||||
class Map():
|
||||
def __init__(self, background_type):
|
||||
self.background_type = background_type
|
||||
# 注意:从0开始编号
|
||||
# 集合内容需要deepcopy
|
||||
if self.background_type in c.POOL_EQUIPPED_BACKGROUNDS:
|
||||
self.width = c.GRID_POOL_X_LEN
|
||||
self.height = c.GRID_POOL_Y_LEN
|
||||
self.gridHeightSize = c.GRID_POOL_Y_SIZE
|
||||
self.map = [[(deepcopy(c.MAP_STATE_EMPTY), deepcopy(c.MAP_STATE_WATER))[y in {2, 3}] for x in range(self.width)] for y in range(self.height)]
|
||||
self.map = [[(c.MAP_STATE_EMPTY(), c.MAP_STATE_WATER())[y in {2, 3}] for x in range(self.width)] for y in range(self.height)]
|
||||
elif self.background_type in c.ON_ROOF_BACKGROUNDS:
|
||||
self.width = c.GRID_ROOF_X_LEN
|
||||
self.height = c.GRID_ROOF_Y_LEN
|
||||
self.gridHeightSize = c.GRID_ROOF_Y_SIZE
|
||||
self.map = [[deepcopy(c.MAP_STATE_TILE) for x in range(self.width)] for y in range(self.height)]
|
||||
self.map = [[c.MAP_STATE_TILE() for x in range(self.width)] for y in range(self.height)]
|
||||
elif self.background_type == c.BACKGROUND_SINGLE:
|
||||
self.width = c.GRID_X_LEN
|
||||
self.height = c.GRID_Y_LEN
|
||||
self.gridHeightSize = c.GRID_Y_SIZE
|
||||
self.map = [[(deepcopy(c.MAP_STATE_UNAVAILABLE), deepcopy(c.MAP_STATE_EMPTY))[y == 2] for x in range(self.width)] for y in range(self.height)]
|
||||
self.map = [[(c.MAP_STATE_UNAVAILABLE(), c.MAP_STATE_EMPTY())[y == 2] for x in range(self.width)] for y in range(self.height)]
|
||||
elif self.background_type == c.BACKGROUND_TRIPLE:
|
||||
self.width = c.GRID_X_LEN
|
||||
self.height = c.GRID_Y_LEN
|
||||
self.gridHeightSize = c.GRID_Y_SIZE
|
||||
self.map = [[(deepcopy(c.MAP_STATE_UNAVAILABLE), deepcopy(c.MAP_STATE_EMPTY))[y in {1, 2, 3}] for x in range(self.width)] for y in range(self.height)]
|
||||
self.map = [[(c.MAP_STATE_UNAVAILABLE(), c.MAP_STATE_EMPTY())[y in {1, 2, 3}] for x in range(self.width)] for y in range(self.height)]
|
||||
else:
|
||||
self.width = c.GRID_X_LEN
|
||||
self.height = c.GRID_Y_LEN
|
||||
self.gridHeightSize = c.GRID_Y_SIZE
|
||||
self.map = [[deepcopy(c.MAP_STATE_EMPTY) for x in range(self.width)] for y in range(self.height)]
|
||||
self.map = [[c.MAP_STATE_EMPTY() for x in range(self.width)] for y in range(self.height)]
|
||||
|
||||
def isValid(self, map_x, map_y):
|
||||
if (map_x < 0 or map_x >= self.width or
|
||||
|
||||
@ -158,10 +158,16 @@ MAP_WATER = 'water'
|
||||
MAP_TILE = 'tile' # 指屋顶上的瓦片
|
||||
MAP_UNAVAILABLE = 'unavailable' # 指完全不能种植物的地方,包括无草皮的荒地和坚果保龄球等红线右侧
|
||||
# 地图单元格状态
|
||||
MAP_STATE_EMPTY = {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_GRASS} # 由于同一格显然不可能种两个相同的植物,所以用集合
|
||||
MAP_STATE_WATER = {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_WATER}
|
||||
MAP_STATE_TILE = {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_TILE}
|
||||
MAP_STATE_UNAVAILABLE = {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_UNAVAILABLE}
|
||||
# 注意是可变对象,不能直接引用
|
||||
# 不喜欢用深拷贝,直接改用函数表示,需要时直接调用该函数生成即可
|
||||
def MAP_STATE_EMPTY(): # 由于同一格显然不可能种两个相同的植物,所以用集合
|
||||
return {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_GRASS}
|
||||
def MAP_STATE_WATER():
|
||||
return {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_WATER}
|
||||
def MAP_STATE_TILE():
|
||||
return {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_TILE}
|
||||
def MAP_STATE_UNAVAILABLE():
|
||||
return {MAP_PLANT:set(), MAP_SLEEP:False, MAP_PLOT_TYPE:MAP_UNAVAILABLE}
|
||||
|
||||
# 地图相关像素数据
|
||||
BACKGROUND_OFFSET_X = 220
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user