采用海象算子(>=python3.8)减少维护工作量

This commit is contained in:
星外之神 2022-07-28 16:26:49 +08:00
parent 2b85451404
commit 0b6c545de5

View File

@ -223,44 +223,153 @@ CARD_MOVE_TIME = 60
# 其他显示物
CAR = 'car'
SUN = 'Sun'
# plant子类非植物对象
NON_PLANT_OBJECTS = {
HOLE := 'Hole',
ICEFROZENPLOT := 'IceFrozenPlot',
GRAVE := 'Grave',
}
# 植物相关信息
PLANT_IMAGE_RECT = 'plant_image_rect'
# 植物名称
SUNFLOWER = 'SunFlower'
PEASHOOTER = 'Peashooter'
SNOWPEASHOOTER = 'SnowPea'
WALLNUT = 'WallNut'
CHERRYBOMB = 'CherryBomb'
THREEPEASHOOTER = 'Threepeater'
REPEATERPEA = 'RepeaterPea'
CHOMPER = 'Chomper'
CHERRY_BOOM_IMAGE = 'Boom'
PUFFSHROOM = 'PuffShroom'
POTATOMINE = 'PotatoMine'
SQUASH = 'Squash'
SPIKEWEED = 'Spikeweed'
JALAPENO = 'Jalapeno'
SCAREDYSHROOM = 'ScaredyShroom'
SUNSHROOM = 'SunShroom'
ICESHROOM = 'IceShroom'
HYPNOSHROOM = 'HypnoShroom'
WALLNUTBOWLING = 'WallNutBowling'
REDWALLNUTBOWLING = 'RedWallNutBowling'
LILYPAD = 'LilyPad'
TORCHWOOD = 'TorchWood'
STARFRUIT = 'StarFruit'
COFFEEBEAN = 'CoffeeBean'
SEASHROOM = 'SeaShroom'
TALLNUT = 'TallNut'
TANGLEKLEP = 'TangleKlep'
DOOMSHROOM = 'DoomShroom'
ICEFROZENPLOT = 'IceFrozenPlot'
HOLE = 'Hole'
GRAVE = 'Grave'
GRAVEBUSTER = 'GraveBuster'
FUMESHROOM = 'FumeShroom'
GARLIC = 'Garlic'
PUMPKINHEAD = 'PumpkinHead'
# 植物卡片信息汇总(包括植物名称, 卡片名称, 阳光, 冷却时间)
PLANT_CARD_INFO = (# 元组 (植物名称, 卡片名称, 阳光, 冷却时间)
(PEASHOOTER := 'Peashooter',
CARD_PEASHOOTER := 'card_peashooter',
100,
7500),
(SUNFLOWER := 'SunFlower',
CARD_SUNFLOWER := 'card_sunflower',
50,
7500),
(CHERRYBOMB := 'CherryBomb',
CARD_CHERRYBOMB := 'card_cherrybomb',
150,
50000),
(WALLNUT := 'WallNut',
CARD_WALLNUT := 'card_wallnut',
50,
30000),
(POTATOMINE := 'PotatoMine',
CARD_POTATOMINE := 'card_potatomine',
25,
30000),
(SNOWPEASHOOTER := 'SnowPea',
CARD_SNOWPEASHOOTER := 'card_snowpea',
175,
7500),
(CHOMPER := 'Chomper',
CARD_CHOMPER := 'card_chomper',
150,
7500),
(REPEATERPEA := 'RepeaterPea',
CARD_REPEATERPEA := 'card_repeaterpea',
200,
7500),
(PUFFSHROOM := 'PuffShroom',
CARD_PUFFSHROOM := 'card_puffshroom',
0,
7500),
(SUNSHROOM := 'SunShroom',
CARD_SUNSHROOM := 'card_sunshroom',
25,
7500),
(FUMESHROOM := 'FumeShroom',
CARD_FUMESHROOM := 'card_fumeshroom',
75,
7500),
(GRAVEBUSTER := 'GraveBuster',
CARD_GRAVEBUSTER := 'card_gravebuster',
75,
7500),
(HYPNOSHROOM := 'HypnoShroom',
CARD_HYPNOSHROOM := 'card_hypnoshroom',
75,
30000),
(SCAREDYSHROOM := 'ScaredyShroom',
CARD_SCAREDYSHROOM := 'card_scaredyshroom',
25,
7500),
(ICESHROOM := 'IceShroom',
CARD_ICESHROOM := 'card_iceshroom',
75,
50000),
(DOOMSHROOM := 'DoomShroom',
CARD_DOOMSHROOM := 'card_doomshroom',
75,
50000),
(LILYPAD := 'LilyPad',
CARD_LILYPAD := 'card_lilypad',
25,
7500),
(SQUASH := 'Squash',
CARD_SQUASH := 'card_squash',
50,
30000),
(TANGLEKLEP := 'TangleKlep',
CARD_TANGLEKLEP := 'card_tangleklep',
25,
30000),
(THREEPEASHOOTER := 'Threepeater',
CARD_THREEPEASHOOTER := 'card_threepeashooter',
325,
7500),
(JALAPENO := 'Jalapeno',
CARD_JALAPENO := 'card_jalapeno',
125,
50000),
(SPIKEWEED := 'Spikeweed',
CARD_SPIKEWEED := 'card_spikeweed',
100,
7500),
(TORCHWOOD := 'TorchWood',
CARD_TORCHWOOD := 'card_torchwood',
175,
7500),
(TALLNUT := 'TallNut',
CARD_TALLNUT := 'card_tallnut',
125,
30000),
(SEASHROOM := 'SeaShroom',
CARD_SEASHROOM := 'card_seashroom',
0,
30000),
(STARFRUIT := 'StarFruit',
CARD_STARFRUIT := 'card_starfruit',
125,
7500),
(PUMPKINHEAD := 'PumpkinHead',
CARD_PUMPKINHEAD := 'card_pumpkinhead',
125,
30000),
(COFFEEBEAN := 'CoffeeBean',
CARD_COFFEEBEAN := 'card_coffeebean',
75,
7500),
(GARLIC := 'Garlic',
CARD_GARLIC := 'card_garlic',
50,
7500),
# 应当保证这两个在一般模式下不可选的特殊植物恒在最后
(WALLNUTBOWLING := 'WallNutBowling',
CARD_WALLNUT := 'card_wallnut',
0,
0),
(REDWALLNUTBOWLING := 'RedWallNutBowling',
CARD_REDWALLNUT := 'card_redwallnut',
0,
0),
)
# 卡片中的植物名称与索引序号的对应关系,指定名称以得到索引值
PLANT_CARD_INDEX={}
for i, item in enumerate(PLANT_CARD_INFO):
PLANT_CARD_INDEX[item[PLANT_NAME_INDEX]] = i
# 指定了哪些卡可选(排除坚果保龄球特殊植物)
CARDS_TO_CHOOSE = range(len(PLANT_CARD_INFO) - 2)
# 植物集体属性集合
@ -273,12 +382,6 @@ SKIP_ZOMBIE_COLLISION_CHECK_WHEN_WORKING = {
POTATOMINE,
}
# 非植物对象
NON_PLANT_OBJECTS = {
HOLE, ICEFROZENPLOT,
GRAVE,
}
# 所有可能不用与僵尸进行碰撞检测的对象
CAN_SKIP_ZOMBIE_COLLISION_CHECK = ( # 这里运用了集合运算
# 注意这个外围的小括号是用来换行的
@ -397,144 +500,6 @@ CARD_GARLIC = 'card_garlic'
CARD_PUMPKINHEAD = 'card_pumpkinhead'
# 植物卡片信息汇总(包括植物名称, 卡片名称, 阳光, 冷却时间)
PLANT_CARD_INFO = (# 元组 (植物名称, 卡片名称, 阳光, 冷却时间)
(PEASHOOTER,
CARD_PEASHOOTER,
100,
7500),
(SUNFLOWER,
CARD_SUNFLOWER,
50,
7500),
(CHERRYBOMB,
CARD_CHERRYBOMB,
150,
50000),
(WALLNUT,
CARD_WALLNUT,
50,
30000),
(POTATOMINE,
CARD_POTATOMINE,
25,
30000),
(SNOWPEASHOOTER,
CARD_SNOWPEASHOOTER,
175,
7500),
(CHOMPER,
CARD_CHOMPER,
150,
7500),
(REPEATERPEA,
CARD_REPEATERPEA,
200,
7500),
(PUFFSHROOM,
CARD_PUFFSHROOM,
0,
7500),
(SUNSHROOM,
CARD_SUNSHROOM,
25,
7500),
(FUMESHROOM,
CARD_FUMESHROOM,
75,
7500),
(GRAVEBUSTER,
CARD_GRAVEBUSTER,
75,
7500),
(HYPNOSHROOM,
CARD_HYPNOSHROOM,
75,
30000),
(SCAREDYSHROOM,
CARD_SCAREDYSHROOM,
25,
7500),
(ICESHROOM,
CARD_ICESHROOM,
75,
50000),
(DOOMSHROOM,
CARD_DOOMSHROOM,
75,
50000),
(LILYPAD,
CARD_LILYPAD,
25,
7500),
(SQUASH,
CARD_SQUASH,
50,
30000),
(TANGLEKLEP,
CARD_TANGLEKLEP,
25,
30000),
(THREEPEASHOOTER,
CARD_THREEPEASHOOTER,
325,
7500),
(JALAPENO,
CARD_JALAPENO,
125,
50000),
(SPIKEWEED,
CARD_SPIKEWEED,
100,
7500),
(TORCHWOOD,
CARD_TORCHWOOD,
175,
7500),
(TALLNUT,
CARD_TALLNUT,
125,
30000),
(SEASHROOM,
CARD_SEASHROOM,
0,
30000),
(STARFRUIT,
CARD_STARFRUIT,
125,
7500),
(PUMPKINHEAD,
CARD_PUMPKINHEAD,
125,
30000),
(COFFEEBEAN,
CARD_COFFEEBEAN,
75,
7500),
(GARLIC,
CARD_GARLIC,
50,
7500),
# 应当保证这两个在一般模式下不可选的特殊植物恒在最后
(WALLNUTBOWLING,
CARD_WALLNUT,
0,
0),
(REDWALLNUTBOWLING,
CARD_REDWALLNUT,
0,
0),
)
# 卡片中的植物名称与索引序号的对应关系,指定名称以得到索引值
PLANT_CARD_INDEX={}
for i, item in enumerate(PLANT_CARD_INFO):
PLANT_CARD_INDEX[item[PLANT_NAME_INDEX]] = i
# 指定了哪些卡可选(排除坚果保龄球特殊植物)
CARDS_TO_CHOOSE = range(len(PLANT_CARD_INFO) - 2)
# 子弹信息
# 子弹类型
BULLET_PEA = 'PeaNormal'
@ -669,72 +634,52 @@ PLAY = 'play'
# 音效
def _getSound(filename):
return pg.mixer.Sound(os.path.join(os.path.dirname(os.path.dirname(__file__)) ,"resources", "sound", filename))
# 程序交互等
SOUND_TAPPING_CARD = _getSound("tap.ogg")
# 植物
SOUND_FIREPEA_EXPLODE = _getSound("firepea.ogg")
SOUND_BULLET_EXPLODE = _getSound("bulletExplode.ogg")
SOUND_SHOOT = _getSound("shoot.ogg")
SOUND_SNOWPEA_SPARKLES = _getSound("snowPeaSparkles.ogg")
SOUND_BOMB = _getSound("bomb.ogg")
SOUND_BIGCHOMP = _getSound("bigchomp.ogg")
SOUND_PUFF = _getSound("puff.ogg")
SOUND_POTATOMINE = _getSound("potatomine.ogg")
SOUND_SQUASHING = _getSound("squashing.ogg")
SOUND_SQUASH_HMM = _getSound("squashHmm.ogg")
SOUND_PLANT_GROW = _getSound("plantGrow.ogg")
SOUND_MUSHROOM_WAKEUP = _getSound("mushroomWakeup.ogg")
SOUND_TANGLE_KELP_DRAG = _getSound("tangleKelpDrag.ogg")
SOUND_DOOMSHROOM = _getSound("doomshroom.ogg")
SOUND_GRAVEBUSTER_CHOMP = _getSound("gravebusterchomp.ogg")
SOUND_FUME = _getSound("fume.ogg")
# 僵尸
SOUND_ZOMBIE_ENTERING_WATER = _getSound("zombieEnteringWater.ogg")
SOUND_ZOMBIE_ATTACKING = _getSound("zombieAttack.ogg")
SOUND_FREEZE = _getSound("freeze.ogg")
SOUND_HYPNOED = _getSound("hypnoed.ogg")
SOUND_NEWSPAPER_RIP = _getSound("newspaperRip.ogg")
SOUND_NEWSPAPER_ZOMBIE_ANGRY = _getSound("newspaperZombieAngry.ogg")
SOUND_POLEVAULT_JUMP = _getSound("polevaultjump.ogg")
SOUND_ZOMBONI = _getSound("zomboni.ogg")
SOUND_ZOMBONI_EXPLOSION = _getSound("zomboniExplosion.ogg")
# 关卡中
SOUND_CAR_WALKING = _getSound("carWalking.ogg")
SOUND_ZOMBIE_COMING = _getSound("zombieComing.ogg")
SOUND_ZOMBIE_VOICE = _getSound("zombieVoice.ogg")
SOUND_HUGE_WAVE_APPROCHING = _getSound("hugeWaveApproching.ogg")
SOUND_BUTTON_CLICK = _getSound("buttonclick.ogg")
SOUND_COLLECT_SUN = _getSound("collectSun.ogg")
SOUND_CLICK_CARD = _getSound("clickCard.ogg")
SOUND_SHOVEL = _getSound("shovel.ogg")
SOUND_PLANT = _getSound("plant.ogg")
SOUND_BOWLING_IMPACT = _getSound("bowlingimpact.ogg")
SOUND_PLANT_DIE = _getSound("plantDie.ogg")
SOUND_EVILLAUGH = _getSound("evillaugh.ogg")
SOUND_LOSE = _getSound("lose.ogg")
SOUND_WIN = _getSound("win.ogg")
SOUND_SCREAM = _getSound("scream.ogg")
# 所有音效的元组
SOUNDS = ( SOUND_TAPPING_CARD, SOUND_CAR_WALKING,
SOUND_FIREPEA_EXPLODE, SOUND_BULLET_EXPLODE,
SOUND_BOMB, SOUND_BIGCHOMP,
SOUND_PUFF, SOUND_POTATOMINE,
SOUND_SQUASHING, SOUND_SQUASH_HMM,
SOUND_PLANT_GROW, SOUND_MUSHROOM_WAKEUP,
SOUND_TANGLE_KELP_DRAG, SOUND_DOOMSHROOM,
SOUND_GRAVEBUSTER_CHOMP, SOUND_FUME,
SOUND_ZOMBIE_ENTERING_WATER, SOUND_ZOMBIE_ATTACKING,
SOUND_FREEZE, SOUND_HYPNOED,
SOUND_NEWSPAPER_RIP, SOUND_NEWSPAPER_ZOMBIE_ANGRY,
SOUND_POLEVAULT_JUMP, SOUND_ZOMBONI,
SOUND_ZOMBONI_EXPLOSION, SOUND_ZOMBIE_COMING,
SOUND_ZOMBIE_VOICE, SOUND_HUGE_WAVE_APPROCHING,
SOUND_BUTTON_CLICK, SOUND_COLLECT_SUN,
SOUND_CLICK_CARD, SOUND_SHOVEL,
SOUND_PLANT, SOUND_BOWLING_IMPACT,
SOUND_PLANT_DIE, SOUND_EVILLAUGH,
SOUND_LOSE, SOUND_WIN,
SOUND_SCREAM,
# 所有音效的元组,用一波海象算子表达(>= python 3.8),免得要维护两个
SOUNDS = ( # 程序交互等
SOUND_TAPPING_CARD := _getSound("tap.ogg"),
# 植物
SOUND_FIREPEA_EXPLODE := _getSound("firepea.ogg"),
SOUND_BULLET_EXPLODE := _getSound("bulletExplode.ogg"),
SOUND_SHOOT := _getSound("shoot.ogg"),
SOUND_SNOWPEA_SPARKLES := _getSound("snowPeaSparkles.ogg"),
SOUND_BOMB := _getSound("bomb.ogg"),
SOUND_BIGCHOMP := _getSound("bigchomp.ogg"),
SOUND_PUFF := _getSound("puff.ogg"),
SOUND_POTATOMINE := _getSound("potatomine.ogg"),
SOUND_SQUASHING := _getSound("squashing.ogg"),
SOUND_SQUASH_HMM := _getSound("squashHmm.ogg"),
SOUND_PLANT_GROW := _getSound("plantGrow.ogg"),
SOUND_MUSHROOM_WAKEUP := _getSound("mushroomWakeup.ogg"),
SOUND_TANGLE_KELP_DRAG := _getSound("tangleKelpDrag.ogg"),
SOUND_DOOMSHROOM := _getSound("doomshroom.ogg"),
SOUND_GRAVEBUSTER_CHOMP := _getSound("gravebusterchomp.ogg"),
SOUND_FUME := _getSound("fume.ogg"),
# 僵尸
SOUND_ZOMBIE_ENTERING_WATER := _getSound("zombieEnteringWater.ogg"),
SOUND_ZOMBIE_ATTACKING := _getSound("zombieAttack.ogg"),
SOUND_FREEZE := _getSound("freeze.ogg"),
SOUND_HYPNOED := _getSound("hypnoed.ogg"),
SOUND_NEWSPAPER_RIP := _getSound("newspaperRip.ogg"),
SOUND_NEWSPAPER_ZOMBIE_ANGRY := _getSound("newspaperZombieAngry.ogg"),
SOUND_POLEVAULT_JUMP := _getSound("polevaultjump.ogg"),
SOUND_ZOMBONI := _getSound("zomboni.ogg"),
SOUND_ZOMBONI_EXPLOSION := _getSound("zomboniExplosion.ogg"),
# 关卡中
SOUND_CAR_WALKING := _getSound("carWalking.ogg"),
SOUND_ZOMBIE_COMING := _getSound("zombieComing.ogg"),
SOUND_ZOMBIE_VOICE := _getSound("zombieVoice.ogg"),
SOUND_HUGE_WAVE_APPROCHING := _getSound("hugeWaveApproching.ogg"),
SOUND_BUTTON_CLICK := _getSound("buttonclick.ogg"),
SOUND_COLLECT_SUN := _getSound("collectSun.ogg"),
SOUND_CLICK_CARD := _getSound("clickCard.ogg"),
SOUND_SHOVEL := _getSound("shovel.ogg"),
SOUND_PLANT := _getSound("plant.ogg"),
SOUND_BOWLING_IMPACT := _getSound("bowlingimpact.ogg"),
SOUND_PLANT_DIE := _getSound("plantDie.ogg"),
SOUND_EVILLAUGH := _getSound("evillaugh.ogg"),
SOUND_LOSE := _getSound("lose.ogg"),
SOUND_WIN := _getSound("win.ogg"),
SOUND_SCREAM := _getSound("scream.ogg"),
)
# 记录本地存储文件初始值