面向对象化
This commit is contained in:
parent
8ae6b88d8a
commit
63e36df930
@ -247,6 +247,8 @@ class Plant(pg.sprite.Sprite):
|
|||||||
# 被铲子指向时间
|
# 被铲子指向时间
|
||||||
self.highlight_time = 0
|
self.highlight_time = 0
|
||||||
|
|
||||||
|
self.attack_check = c.CHECK_ATTACK_ALWAYS
|
||||||
|
|
||||||
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 c.PLANT_RECT:
|
if name in c.PLANT_RECT:
|
||||||
@ -390,6 +392,7 @@ class SunFlower(Plant):
|
|||||||
Plant.__init__(self, x, y, c.SUNFLOWER, c.PLANT_HEALTH, None)
|
Plant.__init__(self, x, y, c.SUNFLOWER, c.PLANT_HEALTH, None)
|
||||||
self.sun_timer = 0
|
self.sun_timer = 0
|
||||||
self.sun_group = sun_group
|
self.sun_group = sun_group
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def idling(self):
|
def idling(self):
|
||||||
if self.sun_timer == 0:
|
if self.sun_timer == 0:
|
||||||
@ -515,6 +518,7 @@ class WallNut(Plant):
|
|||||||
self.load_images()
|
self.load_images()
|
||||||
self.cracked1 = False
|
self.cracked1 = False
|
||||||
self.cracked2 = False
|
self.cracked2 = False
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def load_images(self):
|
def load_images(self):
|
||||||
self.cracked1_frames = []
|
self.cracked1_frames = []
|
||||||
@ -1111,6 +1115,7 @@ class HypnoShroom(Plant):
|
|||||||
Plant.__init__(self, x, y, c.HYPNOSHROOM, c.PLANT_HEALTH, None)
|
Plant.__init__(self, x, y, c.HYPNOSHROOM, c.PLANT_HEALTH, None)
|
||||||
self.animate_interval = 80
|
self.animate_interval = 80
|
||||||
self.zombie_to_hypno = None
|
self.zombie_to_hypno = None
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def loadImages(self, name, scale):
|
def loadImages(self, name, scale):
|
||||||
self.idle_frames = []
|
self.idle_frames = []
|
||||||
@ -1145,6 +1150,7 @@ class WallNutBowling(Plant):
|
|||||||
self.vel_x = random.randint(12, 15)
|
self.vel_x = random.randint(12, 15)
|
||||||
self.vel_y = 0
|
self.vel_y = 0
|
||||||
self.disable_hit_y = -1
|
self.disable_hit_y = -1
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def loadImages(self, name, scale):
|
def loadImages(self, name, scale):
|
||||||
self.loadFrames(self.frames, name, 1)
|
self.loadFrames(self.frames, name, 1)
|
||||||
@ -1277,10 +1283,12 @@ class RedWallNutBowling(Plant):
|
|||||||
class LilyPad(Plant):
|
class LilyPad(Plant):
|
||||||
def __init__(self, x, y):
|
def __init__(self, x, y):
|
||||||
Plant.__init__(self, x, y, c.LILYPAD, c.PLANT_HEALTH, None)
|
Plant.__init__(self, x, y, c.LILYPAD, c.PLANT_HEALTH, None)
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
class TorchWood(Plant):
|
class TorchWood(Plant):
|
||||||
def __init__(self, x, y, bullet_group):
|
def __init__(self, x, y, bullet_group):
|
||||||
Plant.__init__(self, x, y, c.TORCHWOOD, c.PLANT_HEALTH, bullet_group)
|
Plant.__init__(self, x, y, c.TORCHWOOD, c.PLANT_HEALTH, bullet_group)
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def idling(self):
|
def idling(self):
|
||||||
for i in self.bullet_group:
|
for i in self.bullet_group:
|
||||||
@ -1367,6 +1375,7 @@ class CoffeeBean(Plant):
|
|||||||
self.map_content = map_content
|
self.map_content = map_content
|
||||||
self.map = map
|
self.map = map
|
||||||
self.map_x = map_x
|
self.map_x = map_x
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def animation(self):
|
def animation(self):
|
||||||
if (self.current_time - self.animate_timer) > self.animate_interval:
|
if (self.current_time - self.animate_timer) > self.animate_interval:
|
||||||
@ -1451,6 +1460,7 @@ class TallNut(Plant):
|
|||||||
self.load_images()
|
self.load_images()
|
||||||
self.cracked1 = False
|
self.cracked1 = False
|
||||||
self.cracked2 = False
|
self.cracked2 = False
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def load_images(self):
|
def load_images(self):
|
||||||
self.cracked1_frames = []
|
self.cracked1_frames = []
|
||||||
@ -1604,6 +1614,7 @@ class Hole(Plant):
|
|||||||
Plant.__init__(self, x, y, c.HOLE, c.INF, None)
|
Plant.__init__(self, x, y, c.HOLE, c.INF, None)
|
||||||
self.timer = 0
|
self.timer = 0
|
||||||
self.shallow = False
|
self.shallow = False
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def loadImages(self, name, scale):
|
def loadImages(self, name, scale):
|
||||||
self.idle_frames = []
|
self.idle_frames = []
|
||||||
@ -1658,6 +1669,7 @@ class Grave(Plant):
|
|||||||
self.frame_index = random.randint(0, self.frame_num - 1)
|
self.frame_index = random.randint(0, self.frame_num - 1)
|
||||||
self.image = self.frames[self.frame_index]
|
self.image = self.frames[self.frame_index]
|
||||||
self.mask = pg.mask.from_surface(self.image)
|
self.mask = pg.mask.from_surface(self.image)
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def animation(self):
|
def animation(self):
|
||||||
pass
|
pass
|
||||||
@ -1670,6 +1682,7 @@ class GraveBuster(Plant):
|
|||||||
self.map_x = map_x
|
self.map_x = map_x
|
||||||
self.plant_group = plant_group
|
self.plant_group = plant_group
|
||||||
self.animate_interval = 100
|
self.animate_interval = 100
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
# 播放吞噬音效
|
# 播放吞噬音效
|
||||||
c.SOUND_GRAVEBUSTER_CHOMP.play()
|
c.SOUND_GRAVEBUSTER_CHOMP.play()
|
||||||
|
|
||||||
@ -1778,6 +1791,7 @@ class IceFrozenPlot(Plant):
|
|||||||
def __init__(self, x, y):
|
def __init__(self, x, y):
|
||||||
Plant.__init__(self, x, y, c.ICEFROZENPLOT, c.INF, None)
|
Plant.__init__(self, x, y, c.ICEFROZENPLOT, c.INF, None)
|
||||||
self.timer = 0
|
self.timer = 0
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def idling(self):
|
def idling(self):
|
||||||
if self.timer == 0:
|
if self.timer == 0:
|
||||||
@ -1818,6 +1832,7 @@ class PumpkinHead(Plant):
|
|||||||
self.cracked1 = False
|
self.cracked1 = False
|
||||||
self.cracked2 = False
|
self.cracked2 = False
|
||||||
self.animate_interval = 160
|
self.animate_interval = 160
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def load_images(self):
|
def load_images(self):
|
||||||
self.cracked1_frames = []
|
self.cracked1_frames = []
|
||||||
@ -1847,6 +1862,7 @@ class GiantWallNut(Plant):
|
|||||||
self.move_timer = 0
|
self.move_timer = 0
|
||||||
self.move_interval = 70
|
self.move_interval = 70
|
||||||
self.vel_x = random.randint(15, 18)
|
self.vel_x = random.randint(15, 18)
|
||||||
|
self.attack_check = c.CHECK_ATTACK_NEVER
|
||||||
|
|
||||||
def idling(self):
|
def idling(self):
|
||||||
if self.move_timer == 0:
|
if self.move_timer == 0:
|
||||||
|
|||||||
@ -421,21 +421,9 @@ WATER_PLANTS = {
|
|||||||
TANGLEKLEP,
|
TANGLEKLEP,
|
||||||
}
|
}
|
||||||
|
|
||||||
# 不用使用通用方法检验攻击状态的植物
|
# 攻击状态检查类型
|
||||||
PLANT_NON_CHECK_ATTACK_STATE = ( # 这里运用了集合运算
|
CHECK_ATTACK_NEVER = 0
|
||||||
{# 单独指定攻击状态的植物
|
CHECK_ATTACK_ALWAYS = 1
|
||||||
WALLNUTBOWLING,
|
|
||||||
# 没有攻击状态的植物
|
|
||||||
WALLNUT, TALLNUT,
|
|
||||||
TORCHWOOD, SUNFLOWER,
|
|
||||||
SUNSHROOM, COFFEEBEAN,
|
|
||||||
GRAVEBUSTER, LILYPAD,
|
|
||||||
HYPNOSHROOM, GARLIC,
|
|
||||||
PUMPKINHEAD, GIANTWALLNUT,
|
|
||||||
} |
|
|
||||||
# 非植物类
|
|
||||||
NON_PLANT_OBJECTS
|
|
||||||
)
|
|
||||||
|
|
||||||
# 范围爆炸植物,即灰烬植物与寒冰菇
|
# 范围爆炸植物,即灰烬植物与寒冰菇
|
||||||
ASH_PLANTS_AND_ICESHROOM = {
|
ASH_PLANTS_AND_ICESHROOM = {
|
||||||
|
|||||||
@ -1268,7 +1268,7 @@ class Level(tool.State):
|
|||||||
def checkPlant(self, target_plant, i):
|
def checkPlant(self, target_plant, i):
|
||||||
zombie_len = len(self.zombie_groups[i])
|
zombie_len = len(self.zombie_groups[i])
|
||||||
# 不用检查攻击状况的情况
|
# 不用检查攻击状况的情况
|
||||||
if target_plant.name in c.PLANT_NON_CHECK_ATTACK_STATE:
|
if not target_plant.attack_check:
|
||||||
pass
|
pass
|
||||||
elif target_plant.name == c.THREEPEASHOOTER:
|
elif target_plant.name == c.THREEPEASHOOTER:
|
||||||
if target_plant.state == c.IDLE:
|
if target_plant.state == c.IDLE:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user