将常数性质的json统一合并到python

This commit is contained in:
星外之神 2022-07-29 11:59:39 +08:00
parent 7c50a29f9e
commit 8acb592508
7 changed files with 237 additions and 263 deletions

View File

@ -1,15 +0,0 @@
{
"plant_image_rect":{
"PeaNormal":{"x":28, "y":0, "width":28, "height":34},
"PeaIce":{"x":26, "y":0, "width":30, "height":34},
"Chomper":{"x":0, "y":0, "width":100, "height":114},
"PuffShroom":{"x":0, "y":28, "width":35, "height":38},
"PuffShroomSleep":{"x":1, "y":0, "width":39, "height":65},
"BulletMushRoom":{"x":0, "y":1, "width":55, "height":21},
"BulletSeaShroom":{"x":0, "y":1, "width":55, "height":21},
"PotatoMine":{"x":0, "y":0, "width":75, "height":55},
"Squash":{"x":10, "y":140, "width":80, "height":86},
"SquashAim":{"x":10, "y":140, "width":80, "height":86},
"Spikeweed":{"x":3, "y":0, "width":80, "height":35}
}
}

View File

@ -1,38 +0,0 @@
{
"zombie_image_rect":{
"Zombie":{"x":62, "width":90},
"ZombieAttack":{"x":62, "width":90},
"ZombieLostHead":{"x":62, "width":90},
"ZombieLostHeadAttack":{"x":62, "width":90},
"ZombieDie":{"x":0, "width":164},
"BoomDie":{"x":68, "width":80},
"ConeheadZombie":{"x":80, "width":80},
"ConeheadZombieAttack":{"x":79, "width":87},
"BucketheadZombie":{"x":54, "width":90},
"BucketheadZombieAttack":{"x":46, "width":90},
"FlagZombie":{"x":56, "width":110},
"FlagZombieAttack":{"x":60, "width":100},
"FlagZombieLostHead":{"x":55, "width":110},
"FlagZombieLostHeadAttack":{"x":55, "width":110},
"NewspaperZombie":{"x":48, "width":92},
"NewspaperZombieAttack":{"x":48, "width":92},
"NewspaperZombieNoPaper":{"x":40, "width":98},
"NewspaperZombieNoPaperAttack":{"x":48, "width":92},
"NewspaperZombieLostHead":{"x":44, "width":96},
"NewspaperZombieLostHeadAttack":{"x":48, "width":92},
"NewspaperZombieDie":{"x":0, "width":100},
"DukyTubeZombie":{"x":55, "width":105},
"DukyTubeZombieAttack":{"x":55, "width":105},
"DukyTubeZombieDie":{"x":55, "width":105},
"DukyTubeZombieLostHead":{"x":55, "width":105},
"DukyTubeZombieSwim":{"x":55, "width":105},
"ConeheadDukyTubeZombie":{"x":55, "width":105},
"ConeheadDukyTubeZombieAttack":{"x":55, "width":105},
"ConeheadDukyTubeZombieSwim":{"x":55, "width":105},
"BucketheadDukyTubeZombie":{"x":55, "width":105},
"BucketheadDukyTubeZombieAttack":{"x":55, "width":105},
"BucketheadDukyTubeZombieSwim":{"x":55, "width":105},
"ScreenDoorZombie":{"x":41, "width":100},
"ScreenDoorZombieAttack":{"x":41, "width":100}
}
}

View File

@ -64,8 +64,8 @@ class Bullet(pg.sprite.Sprite):
def loadFrames(self, frames, name): def loadFrames(self, frames, name):
frame_list = tool.GFX[name] frame_list = tool.GFX[name]
if name in tool.PLANT_RECT: if name in c.PLANT_RECT:
data = tool.PLANT_RECT[name] data = c.PLANT_RECT[name]
x, y, width, height = data['x'], data['y'], data['width'], data['height'] x, y, width, height = data['x'], data['y'], data['width'], data['height']
else: else:
x, y = 0, 0 x, y = 0, 0
@ -252,8 +252,8 @@ class Plant(pg.sprite.Sprite):
def loadFrames(self, frames, name, scale=1, color=c.BLACK): def loadFrames(self, frames, name, scale=1, color=c.BLACK):
frame_list = tool.GFX[name] frame_list = tool.GFX[name]
if name in tool.PLANT_RECT: if name in c.PLANT_RECT:
data = tool.PLANT_RECT[name] data = c.PLANT_RECT[name]
x, y, width, height = data['x'], data['y'], data['width'], data['height'] x, y, width, height = data['x'], data['y'], data['width'], data['height']
else: else:
x, y = 0, 0 x, y = 0, 0

View File

@ -59,8 +59,8 @@ class Zombie(pg.sprite.Sprite):
frame_list = tool.GFX[name] frame_list = tool.GFX[name]
rect = frame_list[0].get_rect() rect = frame_list[0].get_rect()
width, height = rect.w, rect.h width, height = rect.w, rect.h
if name in tool.ZOMBIE_RECT: if name in c.ZOMBIE_RECT:
data = tool.ZOMBIE_RECT[name] data = c.ZOMBIE_RECT[name]
x, width = data['x'], data['width'] x, width = data['x'], data['width']
else: else:
x = 0 x = 0

View File

@ -2,7 +2,7 @@ import os
import pygame as pg import pygame as pg
# 用户数据及日志存储路径 # 用户数据及日志存储路径
if os.name == 'nt': # Windows系统存储路径 if os.name == "nt": # Windows系统存储路径
USERDATA_PATH = os.path.expandvars(os.path.join("%APPDATA%", "wszqkzqk.dev", "pypvz", "userdata.json")) USERDATA_PATH = os.path.expandvars(os.path.join("%APPDATA%", "wszqkzqk.dev", "pypvz", "userdata.json"))
USERLOG_PATH = os.path.expandvars(os.path.join("%APPDATA%", "wszqkzqk.dev", "pypvz", "run.log")) USERLOG_PATH = os.path.expandvars(os.path.join("%APPDATA%", "wszqkzqk.dev", "pypvz", "run.log"))
else: # 非Windows系统存储路径 else: # 非Windows系统存储路径
@ -11,24 +11,18 @@ else: # 非Windows系统存储路径
# 窗口图标 # 窗口图标
ORIGINAL_LOGO = os.path.join(os.path.dirname(os.path.dirname(__file__)), "pypvz-exec-logo.png") ORIGINAL_LOGO = os.path.join(os.path.dirname(os.path.dirname(__file__)), "pypvz-exec-logo.png")
# 僵尸显示特殊定义文件路径
JSON_PATH_ZOMBIE = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'data', 'entity', 'zombie.json')
# 植物显示特殊定义文件路径
JSON_PATH_PLANTS = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'data', 'entity', 'plant.json')
# 游戏图片资源路径 # 游戏图片资源路径
PATH_IMG_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources", "graphics") PATH_IMG_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources", "graphics")
# 游戏关卡地图文件夹路径
PATH_MAP_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources", 'data', "map")
# 游戏音乐文件夹路径 # 游戏音乐文件夹路径
PATH_MUSIC_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources","music") PATH_MUSIC_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources","music")
# 窗口标题 # 窗口标题
ORIGINAL_CAPTION = 'pypvz' ORIGINAL_CAPTION = "pypvz"
# 游戏模式 # 游戏模式
GAME_MODE = 'mode' GAME_MODE = "mode"
MODE_ADVENTURE = 'adventure' MODE_ADVENTURE = "adventure"
MODE_LITTLEGAME = 'littleGame' MODE_LITTLEGAME = "littleGame"
# 窗口大小 # 窗口大小
SCREEN_WIDTH = 800 SCREEN_WIDTH = 800
@ -36,7 +30,7 @@ SCREEN_HEIGHT = 600
SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT) SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT)
# 字体路径 # 字体路径
FONT_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'resources', 'DroidSansFallback.ttf') FONT_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "resources", "DroidSansFallback.ttf")
# 选卡数量 # 选卡数量
# 最大数量 # 最大数量
@ -75,56 +69,56 @@ YELLOWGREEN = ( 55, 200, 0)
LIGHTGRAY = (107, 108, 145) LIGHTGRAY = (107, 108, 145)
# 退出游戏按钮 # 退出游戏按钮
EXIT = 'exit' EXIT = "exit"
# 游戏界面可选的菜单 # 游戏界面可选的菜单
LITTLE_MENU = 'littleMenu' LITTLE_MENU = "littleMenu"
BIG_MENU = 'bigMenu' BIG_MENU = "bigMenu"
RESTART_BUTTON = 'restartButton' RESTART_BUTTON = "restartButton"
MAINMENU_BUTTON = 'mainMenuButton' MAINMENU_BUTTON = "mainMenuButton"
LITTLEGAME_BUTTON = 'littleGameButton' LITTLEGAME_BUTTON = "littleGameButton"
OPTION_BUTTON = 'optionButton' OPTION_BUTTON = "optionButton"
SOUND_VOLUME_BUTTON = 'volumeButton' SOUND_VOLUME_BUTTON = "volumeButton"
# 金银向日葵奖杯 # 金银向日葵奖杯
TROPHY_SUNFLOWER = 'sunflowerTrophy' TROPHY_SUNFLOWER = "sunflowerTrophy"
# 小铲子 # 小铲子
SHOVEL = 'shovel' SHOVEL = "shovel"
SHOVEL_BOX = 'shovelBox' SHOVEL_BOX = "shovelBox"
# 一大波僵尸来袭图片 # 一大波僵尸来袭图片
HUGE_WAVE_APPROCHING = 'Approching' HUGE_WAVE_APPROCHING = "Approching"
# 关卡进程图片 # 关卡进程图片
LEVEL_PROGRESS_BAR = 'LevelProgressBar' LEVEL_PROGRESS_BAR = "LevelProgressBar"
LEVEL_PROGRESS_ZOMBIE_HEAD = 'LevelProgressZombieHead' LEVEL_PROGRESS_ZOMBIE_HEAD = "LevelProgressZombieHead"
LEVEL_PROGRESS_FLAG = 'LevelProgressFlag' LEVEL_PROGRESS_FLAG = "LevelProgressFlag"
# GAME INFO字典键值 # GAME INFO字典键值
CURRENT_TIME = 'current time' CURRENT_TIME = "current time"
LEVEL_NUM = 'level num' LEVEL_NUM = "level num"
LITTLEGAME_NUM = 'littleGame num' LITTLEGAME_NUM = "littleGame num"
LEVEL_COMPLETIONS = 'level completions' LEVEL_COMPLETIONS = "level completions"
LITTLEGAME_COMPLETIONS = 'littleGame completions' LITTLEGAME_COMPLETIONS = "littleGame completions"
GAME_RATE = 'game rate' GAME_RATE = "game rate"
SOUND_VOLUME = 'volume' SOUND_VOLUME = "volume"
# 整个游戏的状态 # 整个游戏的状态
MAIN_MENU = 'main menu' MAIN_MENU = "main menu"
LOAD_SCREEN = 'load screen' LOAD_SCREEN = "load screen"
GAME_LOSE = 'game los' GAME_LOSE = "game los"
GAME_VICTORY = 'game victory' GAME_VICTORY = "game victory"
LEVEL = 'level' LEVEL = "level"
# 界面图片文件名 # 界面图片文件名
MAIN_MENU_IMAGE = 'MainMenu' MAIN_MENU_IMAGE = "MainMenu"
OPTION_ADVENTURE = 'Adventure' OPTION_ADVENTURE = "Adventure"
GAME_LOSE_IMAGE = 'GameLose' GAME_LOSE_IMAGE = "GameLose"
GAME_VICTORY_IMAGE = 'GameVictory' GAME_VICTORY_IMAGE = "GameVictory"
AWARD_SCREEN_IMAGE = 'AwardScreen' AWARD_SCREEN_IMAGE = "AwardScreen"
# 地图相关内容 # 地图相关内容
BACKGROUND_NAME = 'Background' BACKGROUND_NAME = "Background"
BACKGROUND_TYPE = 'background_type' BACKGROUND_TYPE = "background_type"
INIT_SUN_NAME = 'init_sun_value' INIT_SUN_NAME = "init_sun_value"
ZOMBIE_LIST = 'zombie_list' ZOMBIE_LIST = "zombie_list"
# 地图类型 # 地图类型
BACKGROUND_DAY = 0 BACKGROUND_DAY = 0
@ -162,28 +156,28 @@ BACKGROUND_DAY_LIKE_BACKGROUNDS = {
} }
# 夜晚地图的墓碑数量等级 # 夜晚地图的墓碑数量等级
GRADE_GRAVES = 'grade_graves' GRADE_GRAVES = "grade_graves"
# 不同墓碑等级对应的信息,列表位置对应的是墓碑等级 # 不同墓碑等级对应的信息,列表位置对应的是墓碑等级
GRAVES_GRADE_INFO = (0, 4, 7, 11) GRAVES_GRADE_INFO = (0, 4, 7, 11)
# 僵尸生成方式 # 僵尸生成方式
SPAWN_ZOMBIES = 'spawn_zombies' SPAWN_ZOMBIES = "spawn_zombies"
SPAWN_ZOMBIES_AUTO = 'auto' SPAWN_ZOMBIES_AUTO = "auto"
SPAWN_ZOMBIES_LIST = 'list' SPAWN_ZOMBIES_LIST = "list"
INCLUDED_ZOMBIES = 'included_zombies' INCLUDED_ZOMBIES = "included_zombies"
NUM_FLAGS = 'num_flags' NUM_FLAGS = "num_flags"
INEVITABLE_ZOMBIE_DICT = 'inevitable_zombie_list' INEVITABLE_ZOMBIE_DICT = "inevitable_zombie_list"
SURVIVAL_ROUNDS = 'survival_rounds' SURVIVAL_ROUNDS = "survival_rounds"
# 地图单元格属性 # 地图单元格属性
MAP_PLANT = 'plantnames' MAP_PLANT = "plantnames"
MAP_SLEEP = 'sleep' # 有没有休眠的蘑菇,作是否能种植咖啡豆的判断 MAP_SLEEP = "sleep" # 有没有休眠的蘑菇,作是否能种植咖啡豆的判断
MAP_PLOT_TYPE = 'plotType' MAP_PLOT_TYPE = "plotType"
# 地图单元格区域类型 # 地图单元格区域类型
MAP_GRASS = 'grass' MAP_GRASS = "grass"
MAP_WATER = 'water' MAP_WATER = "water"
MAP_TILE = 'tile' # 指屋顶上的瓦片 MAP_TILE = "tile" # 指屋顶上的瓦片
MAP_UNAVAILABLE = 'unavailable' # 指完全不能种植物的地方,包括无草皮的荒地和坚果保龄球等红线右侧 MAP_UNAVAILABLE = "unavailable" # 指完全不能种植物的地方,包括无草皮的荒地和坚果保龄球等红线右侧
# 地图单元格状态 # 地图单元格状态
# 注意是可变对象,不能直接引用 # 注意是可变对象,不能直接引用
# 不喜欢用深拷贝,直接改用函数表示,需要时直接调用该函数生成即可 # 不喜欢用深拷贝,直接改用函数表示,需要时直接调用该函数生成即可
@ -204,15 +198,15 @@ MAP_ROOF_OFFSET_Y = 105 # 暂时还不清楚数据
MAP_POOL_FRONT_X = SCREEN_WIDTH - 15 MAP_POOL_FRONT_X = SCREEN_WIDTH - 15
# 植物选择菜单栏、传送带菜单栏等类型设定 # 植物选择菜单栏、传送带菜单栏等类型设定
CHOOSEBAR_TYPE = 'choosebar_type' CHOOSEBAR_TYPE = "choosebar_type"
CHOOSEBAR_STATIC = 0 CHOOSEBAR_STATIC = 0
CHOOSEBAR_MOVE = 1 CHOOSEBAR_MOVE = 1
CHOOSEBAR_BOWLING = 2 CHOOSEBAR_BOWLING = 2
MENUBAR_BACKGROUND = 'ChooserBackground' MENUBAR_BACKGROUND = "ChooserBackground"
MOVEBAR_BACKGROUND = 'MoveBackground' MOVEBAR_BACKGROUND = "MoveBackground"
PANEL_BACKGROUND = 'PanelBackground' PANEL_BACKGROUND = "PanelBackground"
START_BUTTON = 'StartButton' START_BUTTON = "StartButton"
CARD_POOL = 'card_pool' CARD_POOL = "card_pool"
# 关于植物栏的像素设置 # 关于植物栏的像素设置
PANEL_Y_START = 87 PANEL_Y_START = 87
@ -232,145 +226,145 @@ MOVEBAR_CARD_FRESH_TIME = 6000
CARD_MOVE_TIME = 60 CARD_MOVE_TIME = 60
# 其他显示物 # 其他显示物
CAR = 'car' CAR = "car"
SUN = 'Sun' SUN = "Sun"
# plant子类非植物对象 # plant子类非植物对象
NON_PLANT_OBJECTS = { NON_PLANT_OBJECTS = {
HOLE := 'Hole', HOLE := "Hole",
ICEFROZENPLOT := 'IceFrozenPlot', ICEFROZENPLOT := "IceFrozenPlot",
GRAVE := 'Grave', GRAVE := "Grave",
} }
# 植物相关信息 # 植物相关信息
PLANT_IMAGE_RECT = 'plant_image_rect' PLANT_IMAGE_RECT = "plant_image_rect"
BOOM_IMAGE = 'Boom' BOOM_IMAGE = "Boom"
# 植物卡片信息汇总(包括植物名称, 卡片名称, 阳光, 冷却时间) # 植物卡片信息汇总(包括植物名称, 卡片名称, 阳光, 冷却时间)
PLANT_CARD_INFO = (# 元组 (植物名称, 卡片名称, 阳光, 冷却时间) PLANT_CARD_INFO = (# 元组 (植物名称, 卡片名称, 阳光, 冷却时间)
(PEASHOOTER := 'Peashooter', (PEASHOOTER := "Peashooter",
CARD_PEASHOOTER := 'card_peashooter', CARD_PEASHOOTER := "card_peashooter",
100, 100,
7500), 7500),
(SUNFLOWER := 'SunFlower', (SUNFLOWER := "SunFlower",
CARD_SUNFLOWER := 'card_sunflower', CARD_SUNFLOWER := "card_sunflower",
50, 50,
7500), 7500),
(CHERRYBOMB := 'CherryBomb', (CHERRYBOMB := "CherryBomb",
CARD_CHERRYBOMB := 'card_cherrybomb', CARD_CHERRYBOMB := "card_cherrybomb",
150, 150,
50000), 50000),
(WALLNUT := 'WallNut', (WALLNUT := "WallNut",
CARD_WALLNUT := 'card_wallnut', CARD_WALLNUT := "card_wallnut",
50, 50,
30000), 30000),
(POTATOMINE := 'PotatoMine', (POTATOMINE := "PotatoMine",
CARD_POTATOMINE := 'card_potatomine', CARD_POTATOMINE := "card_potatomine",
25, 25,
30000), 30000),
(SNOWPEASHOOTER := 'SnowPea', (SNOWPEASHOOTER := "SnowPea",
CARD_SNOWPEASHOOTER := 'card_snowpea', CARD_SNOWPEASHOOTER := "card_snowpea",
175, 175,
7500), 7500),
(CHOMPER := 'Chomper', (CHOMPER := "Chomper",
CARD_CHOMPER := 'card_chomper', CARD_CHOMPER := "card_chomper",
150, 150,
7500), 7500),
(REPEATERPEA := 'RepeaterPea', (REPEATERPEA := "RepeaterPea",
CARD_REPEATERPEA := 'card_repeaterpea', CARD_REPEATERPEA := "card_repeaterpea",
200, 200,
7500), 7500),
(PUFFSHROOM := 'PuffShroom', (PUFFSHROOM := "PuffShroom",
CARD_PUFFSHROOM := 'card_puffshroom', CARD_PUFFSHROOM := "card_puffshroom",
0, 0,
7500), 7500),
(SUNSHROOM := 'SunShroom', (SUNSHROOM := "SunShroom",
CARD_SUNSHROOM := 'card_sunshroom', CARD_SUNSHROOM := "card_sunshroom",
25, 25,
7500), 7500),
(FUMESHROOM := 'FumeShroom', (FUMESHROOM := "FumeShroom",
CARD_FUMESHROOM := 'card_fumeshroom', CARD_FUMESHROOM := "card_fumeshroom",
75, 75,
7500), 7500),
(GRAVEBUSTER := 'GraveBuster', (GRAVEBUSTER := "GraveBuster",
CARD_GRAVEBUSTER := 'card_gravebuster', CARD_GRAVEBUSTER := "card_gravebuster",
75, 75,
7500), 7500),
(HYPNOSHROOM := 'HypnoShroom', (HYPNOSHROOM := "HypnoShroom",
CARD_HYPNOSHROOM := 'card_hypnoshroom', CARD_HYPNOSHROOM := "card_hypnoshroom",
75, 75,
30000), 30000),
(SCAREDYSHROOM := 'ScaredyShroom', (SCAREDYSHROOM := "ScaredyShroom",
CARD_SCAREDYSHROOM := 'card_scaredyshroom', CARD_SCAREDYSHROOM := "card_scaredyshroom",
25, 25,
7500), 7500),
(ICESHROOM := 'IceShroom', (ICESHROOM := "IceShroom",
CARD_ICESHROOM := 'card_iceshroom', CARD_ICESHROOM := "card_iceshroom",
75, 75,
50000), 50000),
(DOOMSHROOM := 'DoomShroom', (DOOMSHROOM := "DoomShroom",
CARD_DOOMSHROOM := 'card_doomshroom', CARD_DOOMSHROOM := "card_doomshroom",
75, 75,
50000), 50000),
(LILYPAD := 'LilyPad', (LILYPAD := "LilyPad",
CARD_LILYPAD := 'card_lilypad', CARD_LILYPAD := "card_lilypad",
25, 25,
7500), 7500),
(SQUASH := 'Squash', (SQUASH := "Squash",
CARD_SQUASH := 'card_squash', CARD_SQUASH := "card_squash",
50, 50,
30000), 30000),
(TANGLEKLEP := 'TangleKlep', (TANGLEKLEP := "TangleKlep",
CARD_TANGLEKLEP := 'card_tangleklep', CARD_TANGLEKLEP := "card_tangleklep",
25, 25,
30000), 30000),
(THREEPEASHOOTER := 'Threepeater', (THREEPEASHOOTER := "Threepeater",
CARD_THREEPEASHOOTER := 'card_threepeashooter', CARD_THREEPEASHOOTER := "card_threepeashooter",
325, 325,
7500), 7500),
(JALAPENO := 'Jalapeno', (JALAPENO := "Jalapeno",
CARD_JALAPENO := 'card_jalapeno', CARD_JALAPENO := "card_jalapeno",
125, 125,
50000), 50000),
(SPIKEWEED := 'Spikeweed', (SPIKEWEED := "Spikeweed",
CARD_SPIKEWEED := 'card_spikeweed', CARD_SPIKEWEED := "card_spikeweed",
100, 100,
7500), 7500),
(TORCHWOOD := 'TorchWood', (TORCHWOOD := "TorchWood",
CARD_TORCHWOOD := 'card_torchwood', CARD_TORCHWOOD := "card_torchwood",
175, 175,
7500), 7500),
(TALLNUT := 'TallNut', (TALLNUT := "TallNut",
CARD_TALLNUT := 'card_tallnut', CARD_TALLNUT := "card_tallnut",
125, 125,
30000), 30000),
(SEASHROOM := 'SeaShroom', (SEASHROOM := "SeaShroom",
CARD_SEASHROOM := 'card_seashroom', CARD_SEASHROOM := "card_seashroom",
0, 0,
30000), 30000),
(STARFRUIT := 'StarFruit', (STARFRUIT := "StarFruit",
CARD_STARFRUIT := 'card_starfruit', CARD_STARFRUIT := "card_starfruit",
125, 125,
7500), 7500),
(PUMPKINHEAD := 'PumpkinHead', (PUMPKINHEAD := "PumpkinHead",
CARD_PUMPKINHEAD := 'card_pumpkinhead', CARD_PUMPKINHEAD := "card_pumpkinhead",
125, 125,
30000), 30000),
(COFFEEBEAN := 'CoffeeBean', (COFFEEBEAN := "CoffeeBean",
CARD_COFFEEBEAN := 'card_coffeebean', CARD_COFFEEBEAN := "card_coffeebean",
75, 75,
7500), 7500),
(GARLIC := 'Garlic', (GARLIC := "Garlic",
CARD_GARLIC := 'card_garlic', CARD_GARLIC := "card_garlic",
50, 50,
7500), 7500),
# 应当保证这两个在一般模式下不可选的特殊植物恒在最后 # 应当保证这两个在一般模式下不可选的特殊植物恒在最后
(WALLNUTBOWLING := 'WallNutBowling', (WALLNUTBOWLING := "WallNutBowling",
CARD_WALLNUT := 'card_wallnut', CARD_WALLNUT := "card_wallnut",
0, 0,
0), 0),
(REDWALLNUTBOWLING := 'RedWallNutBowling', (REDWALLNUTBOWLING := "RedWallNutBowling",
CARD_REDWALLNUT := 'card_redwallnut', CARD_REDWALLNUT := "card_redwallnut",
0, 0,
0), 0),
) )
@ -468,61 +462,61 @@ SUN_VALUE = 25
# 僵尸冷冻 # 僵尸冷冻
ICE_SLOW_TIME = 10000 ICE_SLOW_TIME = 10000
MIN_FREEZE_TIME = 4000 MIN_FREEZE_TIME = 4000
ICETRAP = 'IceTrap' ICETRAP = "IceTrap"
# 子弹信息 # 子弹信息
# 子弹类型 # 子弹类型
BULLET_PEA = 'PeaNormal' BULLET_PEA = "PeaNormal"
BULLET_PEA_ICE = 'PeaIce' BULLET_PEA_ICE = "PeaIce"
BULLET_FIREBALL = 'Fireball' BULLET_FIREBALL = "Fireball"
BULLET_MUSHROOM = 'BulletMushRoom' BULLET_MUSHROOM = "BulletMushRoom"
BULLET_SEASHROOM = 'BulletSeaShroom' BULLET_SEASHROOM = "BulletSeaShroom"
FUME = 'Fume' FUME = "Fume"
# 子弹伤害 # 子弹伤害
BULLET_DAMAGE_NORMAL = 20 BULLET_DAMAGE_NORMAL = 20
BULLET_DAMAGE_FIREBALL_BODY = 27 # 这是火球本体的伤害注意不是40本体(27) + 溅射(13)才是40 BULLET_DAMAGE_FIREBALL_BODY = 27 # 这是火球本体的伤害注意不是40本体(27) + 溅射(13)才是40
BULLET_DAMAGE_FIREBALL_RANGE = 13 BULLET_DAMAGE_FIREBALL_RANGE = 13
# 子弹效果 # 子弹效果
BULLET_EFFECT_ICE = 'ice' BULLET_EFFECT_ICE = "ice"
BULLET_EFFECT_UNICE = 'unice' BULLET_EFFECT_UNICE = "unice"
# 特殊子弹 # 特殊子弹
# 杨桃子弹 # 杨桃子弹
# 子弹名称 # 子弹名称
BULLET_STAR = 'StarBullet' BULLET_STAR = "StarBullet"
# 子弹方向 # 子弹方向
STAR_FORWARD_UP = 'forwardUp' # 向前上方 STAR_FORWARD_UP = "forwardUp" # 向前上方
STAR_FORWARD_DOWN = 'forwardDown' #向前下方 STAR_FORWARD_DOWN = "forwardDown" #向前下方
STAR_BACKWARD = 'backward' #向后 STAR_BACKWARD = "backward" #向后
STAR_UPWARD = 'upward' # 向上 STAR_UPWARD = "upward" # 向上
STAR_DOWNWARD = 'downward' # 向下 STAR_DOWNWARD = "downward" # 向下
# 僵尸信息 # 僵尸信息
ZOMBIE_IMAGE_RECT = 'zombie_image_rect' ZOMBIE_IMAGE_RECT = "zombie_image_rect"
ZOMBIE_HEAD = 'ZombieHead' ZOMBIE_HEAD = "ZombieHead"
NORMAL_ZOMBIE = 'Zombie' NORMAL_ZOMBIE = "Zombie"
CONEHEAD_ZOMBIE = 'ConeheadZombie' CONEHEAD_ZOMBIE = "ConeheadZombie"
BUCKETHEAD_ZOMBIE = 'BucketheadZombie' BUCKETHEAD_ZOMBIE = "BucketheadZombie"
FLAG_ZOMBIE = 'FlagZombie' FLAG_ZOMBIE = "FlagZombie"
NEWSPAPER_ZOMBIE = 'NewspaperZombie' NEWSPAPER_ZOMBIE = "NewspaperZombie"
FOOTBALL_ZOMBIE = 'FootballZombie' FOOTBALL_ZOMBIE = "FootballZombie"
DUCKY_TUBE_ZOMBIE = 'DuckyTubeZombie' DUCKY_TUBE_ZOMBIE = "DuckyTubeZombie"
CONEHEAD_DUCKY_TUBE_ZOMBIE = 'ConeheadDuckyTubeZombie' CONEHEAD_DUCKY_TUBE_ZOMBIE = "ConeheadDuckyTubeZombie"
BUCKETHEAD_DUCKY_TUBE_ZOMBIE = 'BucketheadDuckyTubeZombie' BUCKETHEAD_DUCKY_TUBE_ZOMBIE = "BucketheadDuckyTubeZombie"
SCREEN_DOOR_ZOMBIE = 'ScreenDoorZombie' SCREEN_DOOR_ZOMBIE = "ScreenDoorZombie"
POLE_VAULTING_ZOMBIE = 'PoleVaultingZombie' POLE_VAULTING_ZOMBIE = "PoleVaultingZombie"
ZOMBONI = 'Zomboni' ZOMBONI = "Zomboni"
SNORKELZOMBIE = 'SnorkelZombie' SNORKELZOMBIE = "SnorkelZombie"
BOOMDIE = 'BoomDie' BOOMDIE = "BoomDie"
# 对僵尸的攻击类型设置 # 对僵尸的攻击类型设置
ZOMBIE_DEAFULT_DAMAGE = 'helmet2First' ZOMBIE_DEAFULT_DAMAGE = "helmet2First"
ZOMBIE_HELMET_2_FIRST = 'helmet2First' # 优先攻击二类防具 ZOMBIE_HELMET_2_FIRST = "helmet2First" # 优先攻击二类防具
ZOMBIE_COMMON_DAMAGE = 'commonDamage' # 优先攻击僵尸与一类防具的整体 ZOMBIE_COMMON_DAMAGE = "commonDamage" # 优先攻击僵尸与一类防具的整体
ZOMBIE_RANGE_DAMAGE = 'rangeDamage' # 范围攻击,同时伤害二类防具与(僵尸与一类防具的整体) ZOMBIE_RANGE_DAMAGE = "rangeDamage" # 范围攻击,同时伤害二类防具与(僵尸与一类防具的整体)
ZOMBIE_ASH_DAMAGE = 'ashDamage' # 灰烬植物攻击,直接伤害本体 ZOMBIE_ASH_DAMAGE = "ashDamage" # 灰烬植物攻击,直接伤害本体
ZOMBIE_WALLNUT_BOWLING_DANMAGE = 'wallnutBowlingDamage' # 坚果保龄球冲撞伤害 ZOMBIE_WALLNUT_BOWLING_DANMAGE = "wallnutBowlingDamage" # 坚果保龄球冲撞伤害
# 僵尸生命值设置 # 僵尸生命值设置
# 有关本体 # 有关本体
@ -585,21 +579,68 @@ WATER_ZOMBIE = {
# 状态类型 # 状态类型
IDLE = 'idle' IDLE = "idle"
FLY = 'fly' FLY = "fly"
EXPLODE = 'explode' EXPLODE = "explode"
ATTACK = 'attack' ATTACK = "attack"
ATTACKED = 'attacked' ATTACKED = "attacked"
DIGEST = 'digest' DIGEST = "digest"
WALK = 'walk' WALK = "walk"
DIE = 'die' DIE = "die"
CRY = 'cry' CRY = "cry"
FREEZE = 'freeze' FREEZE = "freeze"
SLEEP = 'sleep' SLEEP = "sleep"
# 关卡状态 # 关卡状态
CHOOSE = 'choose' CHOOSE = "choose"
PLAY = 'play' PLAY = "play"
# 加载矩形碰撞范围 用于消除文件边框影响
# 植物
PLANT_RECT = {
BULLET_PEA: {"x":28, "y":0, "width":28, "height":34},
BULLET_PEA_ICE: {"x":26, "y":0, "width":30, "height":34},
CHOMPER: {"x":0, "y":0, "width":100, "height":114},
PUFFSHROOM: {"x":0, "y":28, "width":35, "height":38},
f"{PUFFSHROOM}Sleep": {"x":1, "y":0, "width":39, "height":65},
BULLET_MUSHROOM: {"x":0, "y":1, "width":55, "height":21},
BULLET_SEASHROOM: {"x":0, "y":1, "width":55, "height":21},
POTATOMINE: {"x":0, "y":0, "width":75, "height":55},
SQUASH: {"x":10, "y":140, "width":80, "height":86},
f"{SQUASH}Aim": {"x":10, "y":140, "width":80, "height":86},
SPIKEWEED: {"x":3, "y":0, "width":80, "height":35}
}
# 僵尸
ZOMBIE_RECT = {
NORMAL_ZOMBIE: {"x":62, "width":90},
f"{NORMAL_ZOMBIE}Attack": {"x":62, "width":90},
f"{NORMAL_ZOMBIE}LostHead": {"x":62, "width":90},
f"{NORMAL_ZOMBIE}LostHeadAttack":{"x":62, "width":90},
f"{NORMAL_ZOMBIE}Die": {"x":0, "width":164},
BOOMDIE: {"x":68, "width":80},
CONEHEAD_ZOMBIE: {"x":80, "width":80},
f"{CONEHEAD_ZOMBIE}Attack": {"x":79, "width":87},
BUCKETHEAD_ZOMBIE: {"x":54, "width":90},
f"{BUCKETHEAD_ZOMBIE}Attack": {"x":46, "width":90},
FLAG_ZOMBIE: {"x":56, "width":110},
f"{FLAG_ZOMBIE}Attack": {"x":60, "width":100},
f"{FLAG_ZOMBIE}LostHead": {"x":55, "width":110},
f"{FLAG_ZOMBIE}LostHeadAttack": {"x":55, "width":110},
NEWSPAPER_ZOMBIE: {"x":48, "width":92},
f"{NEWSPAPER_ZOMBIE}Attack": {"x":48, "width":92},
f"{NEWSPAPER_ZOMBIE}NoPaper": {"x":40, "width":98},
f"{NEWSPAPER_ZOMBIE}NoPaperAttack":{"x":48, "width":92},
f"{NEWSPAPER_ZOMBIE}LostHead": {"x":44, "width":96},
f"{NEWSPAPER_ZOMBIE}LostHeadAttack":{"x":48, "width":92},
f"{NEWSPAPER_ZOMBIE}Die": {"x":0, "width":100},
f"{DUCKY_TUBE_ZOMBIE}Die": {"x":55, "width":105},
f"{DUCKY_TUBE_ZOMBIE}LostHead": {"x":55, "width":105},
SCREEN_DOOR_ZOMBIE: {"x":41, "width":100},
f"{SCREEN_DOOR_ZOMBIE}Attack": {"x":41, "width":100},
} # 这里还有懒得写代码的补加,用循环实现
for _part1 in (DUCKY_TUBE_ZOMBIE, CONEHEAD_DUCKY_TUBE_ZOMBIE, BUCKETHEAD_DUCKY_TUBE_ZOMBIE):
for _part2 in ("", "Attack", "Swim"):
ZOMBIE_RECT[f"{_part1}{_part2}"] = {"x":55, "width":105}
# 音效 # 音效
def _getSound(filename): def _getSound(filename):

View File

@ -1002,8 +1002,8 @@ class Level(tool.State):
def setupMouseImage(self, plant_name, select_plant, colorkey=c.BLACK): def setupMouseImage(self, plant_name, select_plant, colorkey=c.BLACK):
frame_list = tool.GFX[plant_name] frame_list = tool.GFX[plant_name]
if plant_name in tool.PLANT_RECT: if plant_name in c.PLANT_RECT:
data = tool.PLANT_RECT[plant_name] data = c.PLANT_RECT[plant_name]
x, y, width, height = data['x'], data['y'], data['width'], data['height'] x, y, width, height = data['x'], data['y'], data['width'], data['height']
else: else:
x, y = 0, 0 x, y = 0, 0

View File

@ -212,18 +212,6 @@ def load_all_gfx(directory, colorkey=c.WHITE, accept=('.png', '.jpg', '.bmp', '.
graphics[name] = img graphics[name] = img
return graphics return graphics
# 从文件加载矩形碰撞范围
# 用于消除文件边框影响
def loadZombieImageRect():
with open(c.JSON_PATH_ZOMBIE) as f:
data = json.load(f)
return data[c.ZOMBIE_IMAGE_RECT]
def loadPlantImageRect():
with open(c.JSON_PATH_PLANTS) as f:
data = json.load(f)
return data[c.PLANT_IMAGE_RECT]
pg.display.set_caption(c.ORIGINAL_CAPTION) # 设置标题 pg.display.set_caption(c.ORIGINAL_CAPTION) # 设置标题
SCREEN = pg.display.set_mode(c.SCREEN_SIZE) # 设置初始屏幕 SCREEN = pg.display.set_mode(c.SCREEN_SIZE) # 设置初始屏幕
pg.mixer.set_num_channels(255) # 设置可以同时播放的音频数量默认为8经常不够用 pg.mixer.set_num_channels(255) # 设置可以同时播放的音频数量默认为8经常不够用
@ -231,5 +219,3 @@ if os.path.exists(c.ORIGINAL_LOGO): # 设置窗口图标仅对非Nuitka时
pg.display.set_icon(pg.image.load(c.ORIGINAL_LOGO)) pg.display.set_icon(pg.image.load(c.ORIGINAL_LOGO))
GFX = load_all_gfx(c.PATH_IMG_DIR) GFX = load_all_gfx(c.PATH_IMG_DIR)
ZOMBIE_RECT = loadZombieImageRect()
PLANT_RECT = loadPlantImageRect()