From 8ed01975dc35739a852d1aa94477bd93bc469308 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Mon, 16 May 2022 18:07:19 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=92=91=E6=9D=86=E8=B7=B3?= =?UTF-8?q?=E7=94=9F=E6=88=90=E4=BD=8D=E7=BD=AE=E8=BF=87=E5=88=86=E9=9D=A0?= =?UTF-8?q?=E5=90=8E=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/constants.py | 11 ++++++++--- source/state/level.py | 36 ++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/source/constants.py b/source/constants.py index 210bcbc..fa261bc 100755 --- a/source/constants.py +++ b/source/constants.py @@ -19,6 +19,12 @@ SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 SCREEN_SIZE = (SCREEN_WIDTH, SCREEN_HEIGHT) +# 选卡数量 +# 最大数量 +CARD_MAX_NUM = 10 # 这里以后可以增加解锁功能,从最初的6格逐渐解锁到10格 +# 最小数量 +CARD_LIST_NUM = CARD_MAX_NUM + # 方格数据 # 一般 GRID_X_LEN = 9 @@ -186,8 +192,6 @@ PANEL_X_START = 22 PANEL_Y_INTERNAL = 69 PANEL_X_INTERNAL = 53 BAR_CARD_X_INTERNAL = 51 -CARD_MAX_NUM = 10 # 这里以后可以增加解锁功能,从最初的6格逐渐解锁到10格 -CARD_LIST_NUM = CARD_MAX_NUM # 所选植物信息索引 PLANT_NAME_INDEX = 0 @@ -308,7 +312,8 @@ PLANT_NON_CHECK_ATTACK_STATE = ( # 这里运用了集合运算 ASH_PLANTS_AND_ICESHROOM = { REDWALLNUTBOWLING, CHERRYBOMB, JALAPENO, DOOMSHROOM, - ICESHROOM,} + ICESHROOM, + } # 植物生命值 diff --git a/source/state/level.py b/source/state/level.py index c3d62e0..c98af4e 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -10,7 +10,7 @@ from ..component import map, plant, zombie, menubar class Level(tool.State): def __init__(self): tool.State.__init__(self) - + def startup(self, current_time, persist): self.game_info = persist self.persist = self.game_info @@ -22,7 +22,7 @@ class Level(tool.State): # 默认显然不用显示菜单 self.showLittleMenu = False - + # 导入地图参数 self.loadMap() self.map = map.Map(self.map_data[c.BACKGROUND_TYPE]) @@ -145,7 +145,7 @@ class Level(tool.State): # 防止因为僵尸最小等级过大,使得总容量无法完全利用,造成死循环的检查机制 minCost = c.CREATE_ZOMBIE_DICT[min(useableZombies, key=lambda x:c.CREATE_ZOMBIE_DICT[x][0])][0] - + while (volume >= minCost) and (len(zombieList) < 50): newZombie = choices(useableZombies, weights)[0] # 普通僵尸、路障僵尸、铁桶僵尸有概率生成水中变种 @@ -286,7 +286,7 @@ class Level(tool.State): return elif ((current_time - self.waveTime >= 43000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.waveTime >= 23000)): self.showHugeWaveApprochingTime = current_time - + numZombies = 0 for i in range(self.map_y_len): numZombies += len(self.zombie_groups[i]) @@ -319,7 +319,7 @@ class Level(tool.State): for i in range(self.map_y_len): _, y = self.map.getMapGridPos(0, i) self.cars.append(plant.Car(-40, y+20, i)) - + # 更新函数每帧被调用,将鼠标事件传入给状态处理函数 def update(self, surface, current_time, mouse_pos, mouse_click): self.current_time = self.game_info[c.CURRENT_TIME] = self.pvzTime(current_time) @@ -356,7 +356,7 @@ class Level(tool.State): self.initPlay(card_pool) if self.bar_type == c.CHOSSEBAR_BOWLING: self.initBowlingMap() - + self.setupLittleMenu() def initChoose(self): @@ -394,7 +394,7 @@ class Level(tool.State): self.menubar = menubar.MenuBar(card_list, self.map_data[c.INIT_SUN_NAME]) else: self.menubar = menubar.MoveBar(card_list) - + # 是否拖住植物或者铲子 self.drag_plant = False self.drag_shovel = False @@ -449,7 +449,7 @@ class Level(tool.State): self.shovel_rect.y = self.shovel_box_rect.y = self.shovel_positon[1] self.setupLevelProgressBarImage() - + self.setupHugeWaveApprochingImage() self.showHugeWaveApprochingTime = -2000 # 防止设置为0时刚刚打开游戏就已经启动红字 @@ -461,7 +461,7 @@ class Level(tool.State): # 缺省为少量墓碑 else: gradeGraves = 1 - + graveVolume = c.GRAVES_GRADE_INFO[gradeGraves] self.graveSet = set() while len(self.graveSet) < graveVolume: @@ -631,7 +631,7 @@ class Level(tool.State): # 使用后默认铲子复原 self.drag_shovel = not self.drag_shovel self.removeMouseImagePlus() - return + return # 检查小铲子的位置有没有被点击 # 方便放回去 @@ -818,8 +818,8 @@ class Level(tool.State): elif name == c.SCREEN_DOOR_ZOMBIE: self.zombie_groups[map_y].add(zombie.ScreenDoorZombie(c.ZOMBIE_START_X + randint(-20, 20) + hugeWaveMove, y, self.head_group)) elif name == c.POLE_VAULTING_ZOMBIE: - # 撑杆跳生成位置不同 - self.zombie_groups[map_y].add(zombie.PoleVaultingZombie(c.ZOMBIE_START_X + randint(70, 80) + hugeWaveMove, y, self.head_group)) + # 本来撑杆跳生成位置不同,对齐左端可认为修正了一部分(看作移动了70),只需要相对修改即可 + self.zombie_groups[map_y].add(zombie.PoleVaultingZombie(c.ZOMBIE_START_X + randint(0, 10) + hugeWaveMove, y, self.head_group)) elif name == c.ZOMBONI: # 冰车僵尸生成位置不同 self.zombie_groups[map_y].add(zombie.Zomboni(c.ZOMBIE_START_X + randint(0, 10) + hugeWaveMove, y, self.plant_groups[map_y], self.map, plant.IceFrozenPlot)) @@ -830,7 +830,7 @@ class Level(tool.State): def canSeedPlant(self, plantName): x, y = pg.mouse.get_pos() return self.map.checkPlantToSeed(x, y, plantName) - + # 种植物 def addPlant(self): pos = self.canSeedPlant(self.plant_name) @@ -1006,7 +1006,7 @@ class Level(tool.State): if abs(rangeZombie.rect.x - bullet.rect.x) <= (c.GRID_X_SIZE // 2): rangeZombie.setDamage(c.BULLET_DAMAGE_FIREBALL_RANGE, effect=None, damageType=c.ZOMBIE_DEAFULT_DAMAGE) break - + def checkZombieCollisions(self): for i in range(self.map_y_len): @@ -1358,7 +1358,7 @@ class Level(tool.State): if len(self.zombie_groups[i]) > 0: return False return True - + def checkLose(self): for i in range(self.map_y_len): for zombie in self.zombie_groups[i]: @@ -1390,7 +1390,7 @@ class Level(tool.State): self.mouse_rect.centerx = x self.mouse_rect.centery = y surface.blit(self.mouse_image, self.mouse_rect) - + def drawMouseShowPlus(self, surface): # 拖动铲子时的显示 x, y = pg.mouse.get_pos() self.shovel_rect.centerx = x @@ -1445,7 +1445,7 @@ class Level(tool.State): else: self.level_progress_flag_rect.y = self.level_progress_bar_image_rect.y - 3 # 常数是猜的 surface.blit(self.level_progress_flag, self.level_progress_flag_rect) - + # 画僵尸头 surface.blit(self.level_progress_zombie_head_image, self.level_progress_zombie_head_image_rect) @@ -1485,7 +1485,7 @@ class Level(tool.State): if self.drag_plant: self.drawMouseShow(surface) - + if self.hasShovel and self.drag_shovel: self.drawMouseShowPlus(surface)