add map
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
from enum import Enum
|
||||
from dataclasses import dataclass
|
||||
|
||||
class TileType(Enum):
|
||||
PLAIN = "plain" # 平原
|
||||
WATER = "water" # 水域
|
||||
SEA = "sea" # 海洋
|
||||
MOUNTAIN = "mountain" # 山脉
|
||||
FOREST = "forest" # 森林
|
||||
CITY = "city" # 城市
|
||||
DESERT = "desert" # 沙漠
|
||||
RAINFOREST = "rainforest" # 热带雨林
|
||||
GLACIER = "glacier" # 冰川/冰原
|
||||
SNOW_MOUNTAIN = "snow_mountain" # 雪山
|
||||
|
||||
@dataclass
|
||||
class Region():
|
||||
"""
|
||||
理想中,一些地块应当在一起组成一个区域。
|
||||
比如,某山;某湖、江、海;某森林;某平原;某城市;
|
||||
一些分布,比如物产,按照Region来分布。
|
||||
再比如,灵气,应当也是按照region分布的。
|
||||
默认,一个region内部的属性,是共通的。
|
||||
同时,NPC应当对Region有观测和认知。
|
||||
"""
|
||||
name: str
|
||||
description: str
|
||||
qi: int # 灵气,从0~255
|
||||
# 物产
|
||||
# 灵气
|
||||
# 其他
|
||||
|
||||
@dataclass
|
||||
class Tile():
|
||||
# 实际的地块
|
||||
type: TileType
|
||||
x: int
|
||||
y: int
|
||||
# region: Region
|
||||
|
||||
class Map():
|
||||
"""
|
||||
通过dict记录position 到 tile。
|
||||
TODO: 记录region到position的映射。
|
||||
TODO: 有特色的地貌,比如西部大漠,东部平原,最东海洋和岛国。南边热带雨林,北边雪山和冰原。
|
||||
"""
|
||||
def __init__(self, width: int, height: int):
|
||||
self.tiles = {}
|
||||
self.width = width
|
||||
self.height = height
|
||||
|
||||
def is_in_bounds(self, x: int, y: int) -> bool:
|
||||
"""
|
||||
判断坐标是否在地图边界内。
|
||||
"""
|
||||
return 0 <= x < self.width and 0 <= y < self.height
|
||||
|
||||
def create_tile(self, x: int, y: int, tile_type: TileType):
|
||||
self.tiles[(x, y)] = Tile(tile_type, x, y)
|
||||
|
||||
def get_tile(self, x: int, y: int) -> Tile:
|
||||
return self.tiles[(x, y)]
|
||||
Reference in New Issue
Block a user