From ad5bd754786076074dbfec89e2149ec6671b0362 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Fri, 29 Jul 2022 23:23:28 +0800 Subject: [PATCH 01/18] =?UTF-8?q?=E6=98=8E=E7=A1=AE=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=90=8D=E5=90=AB=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/constants.py | 4 ++-- source/state/level.py | 24 ++++++++++++------------ source/state/mainmenu.py | 16 ++++++++-------- source/state/screen.py | 12 ++++++------ source/tool.py | 13 ++++++------- 5 files changed, 34 insertions(+), 35 deletions(-) diff --git a/source/constants.py b/source/constants.py index dc9e2e8..df9695f 100755 --- a/source/constants.py +++ b/source/constants.py @@ -166,8 +166,8 @@ GRAVES_GRADE_INFO = (0, 4, 7, 11) # 僵尸生成方式 SPAWN_ZOMBIES = "spawn_zombies" -SPAWN_ZOMBIES_AUTO = "auto" -SPAWN_ZOMBIES_LIST = "list" +SPAWN_ZOMBIES_AUTO = 1 +SPAWN_ZOMBIES_LIST = 0 INCLUDED_ZOMBIES = "included_zombies" NUM_FLAGS = "num_flags" INEVITABLE_ZOMBIE_DICT = "inevitable_zombie_list" diff --git a/source/state/level.py b/source/state/level.py index 61c7833..cc6872e 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -433,11 +433,11 @@ class Level(tool.State): if self.hasShovel: # 导入小铲子 frame_rect = [0, 0, 71, 67] - self.shovel = tool.get_image_menu(tool.GFX[c.SHOVEL], *frame_rect, c.BLACK, 1.1) + self.shovel = tool.get_image_alpha(tool.GFX[c.SHOVEL], *frame_rect, c.BLACK, 1.1) self.shovel_rect = self.shovel.get_rect() frame_rect = [0, 0, 77, 75] self.shovel_positon = (608, 1) - self.shovel_box = tool.get_image_menu(tool.GFX[c.SHOVEL_BOX], *frame_rect, c.BLACK, 1.1) + self.shovel_box = tool.get_image_alpha(tool.GFX[c.SHOVEL_BOX], *frame_rect, c.BLACK, 1.1) self.shovel_box_rect = self.shovel_box.get_rect() self.shovel_rect.x = self.shovel_box_rect.x = self.shovel_positon[0] self.shovel_rect.y = self.shovel_box_rect.y = self.shovel_positon[1] @@ -476,14 +476,14 @@ class Level(tool.State): def setupLittleMenu(self): # 具体运行游戏必定有个小菜单, 导入菜单和选项 frame_rect = (0, 0, 108, 31) - self.little_menu = tool.get_image_menu(tool.GFX[c.LITTLE_MENU], *frame_rect, c.BLACK, 1.1) + self.little_menu = tool.get_image_alpha(tool.GFX[c.LITTLE_MENU], *frame_rect, c.BLACK, 1.1) self.little_menu_rect = self.little_menu.get_rect() self.little_menu_rect.x = 690 self.little_menu_rect.y = 0 # 弹出的菜单框 frame_rect = (0, 0, 500, 500) - self.big_menu = tool.get_image_menu(tool.GFX[c.BIG_MENU], *frame_rect, c.BLACK, 1.1) + self.big_menu = tool.get_image_alpha(tool.GFX[c.BIG_MENU], *frame_rect, c.BLACK, 1.1) self.big_menu_rect = self.big_menu.get_rect() self.big_menu_rect.x = 150 self.big_menu_rect.y = 0 @@ -505,14 +505,14 @@ class Level(tool.State): # 重新开始按钮 frame_rect = (0, 0, 207, 45) - self.restart_button = tool.get_image_menu(tool.GFX[c.RESTART_BUTTON], *frame_rect, c.BLACK, 1.1) + self.restart_button = tool.get_image_alpha(tool.GFX[c.RESTART_BUTTON], *frame_rect, c.BLACK, 1.1) self.restart_button_rect = self.restart_button.get_rect() self.restart_button_rect.x = 295 self.restart_button_rect.y = 325 # 主菜单按钮 frame_rect = (0, 0, 206, 43) - self.mainMenu_button = tool.get_image_menu(tool.GFX[c.MAINMENU_BUTTON], *frame_rect, c.BLACK, 1.1) + self.mainMenu_button = tool.get_image_alpha(tool.GFX[c.MAINMENU_BUTTON], *frame_rect, c.BLACK, 1.1) self.mainMenu_button_rect = self.mainMenu_button.get_rect() self.mainMenu_button_rect.x = 299 self.mainMenu_button_rect.y = 372 @@ -522,7 +522,7 @@ class Level(tool.State): font = pg.font.Font(c.FONT_PATH, 35) font.bold = True # 音量+ - self.sound_volume_plus_button = tool.get_image_menu(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) + self.sound_volume_plus_button = tool.get_image_alpha(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) sign = font.render("+", True, c.YELLOWGREEN) sign_rect = sign.get_rect() sign_rect.x = 8 @@ -531,7 +531,7 @@ class Level(tool.State): self.sound_volume_plus_button_rect = self.sound_volume_plus_button.get_rect() self.sound_volume_plus_button_rect.x = 500 # 音量- - self.sound_volume_minus_button = tool.get_image_menu(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) + self.sound_volume_minus_button = tool.get_image_alpha(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) sign = font.render("-", True, c.YELLOWGREEN) sign_rect = sign.get_rect() sign_rect.x = 12 @@ -595,7 +595,7 @@ class Level(tool.State): # 一大波僵尸来袭图片显示 def setupHugeWaveApprochingImage(self): frame_rect = (0, 0, 492, 80) - self.huge_wave_approching_image = tool.get_image_menu(tool.GFX[c.HUGE_WAVE_APPROCHING], *frame_rect, c.BLACK, 1) + self.huge_wave_approching_image = tool.get_image_alpha(tool.GFX[c.HUGE_WAVE_APPROCHING], *frame_rect, c.BLACK, 1) self.huge_wave_approching_image_rect = self.huge_wave_approching_image.get_rect() self.huge_wave_approching_image_rect.x = 140 # 猜的 self.huge_wave_approching_image_rect.y = 250 # 猜的 @@ -606,21 +606,21 @@ class Level(tool.State): # 主进度条 frame_rect = (0, 0, 158, 26) - self.level_progress_bar_image = tool.get_image_menu(tool.GFX[c.LEVEL_PROGRESS_BAR], *frame_rect, c.BLACK, 1) + self.level_progress_bar_image = tool.get_image_alpha(tool.GFX[c.LEVEL_PROGRESS_BAR], *frame_rect, c.BLACK, 1) self.level_progress_bar_image_rect = self.level_progress_bar_image.get_rect() self.level_progress_bar_image_rect.x = 600 self.level_progress_bar_image_rect.y = 574 # 僵尸头 frame_rect = (0, 0, 23, 25) - self.level_progress_zombie_head_image = tool.get_image_menu(tool.GFX[c.LEVEL_PROGRESS_ZOMBIE_HEAD], *frame_rect, c.BLACK, 1) + self.level_progress_zombie_head_image = tool.get_image_alpha(tool.GFX[c.LEVEL_PROGRESS_ZOMBIE_HEAD], *frame_rect, c.BLACK, 1) self.level_progress_zombie_head_image_rect = self.level_progress_zombie_head_image.get_rect() self.level_progress_zombie_head_image_rect.x = self.level_progress_bar_image_rect.x + 75 self.level_progress_zombie_head_image_rect.y = self.level_progress_bar_image_rect.y - 3 # 旗帜(这里只包括最后一面) frame_rect = (0, 0, 20, 18) - self.level_progress_flag = tool.get_image_menu(tool.GFX[c.LEVEL_PROGRESS_FLAG], *frame_rect, c.BLACK, 1) + self.level_progress_flag = tool.get_image_alpha(tool.GFX[c.LEVEL_PROGRESS_FLAG], *frame_rect, c.BLACK, 1) self.level_progress_flag_rect = self.level_progress_flag.get_rect() self.level_progress_flag_rect.x = self.level_progress_bar_image_rect.x - 78 self.level_progress_flag_rect.y = self.level_progress_bar_image_rect.y - 3 diff --git a/source/state/mainmenu.py b/source/state/mainmenu.py index 57702cc..836d739 100644 --- a/source/state/mainmenu.py +++ b/source/state/mainmenu.py @@ -41,7 +41,7 @@ class Menu(tool.State): frame_names = (f"{c.OPTION_ADVENTURE}_0", f"{c.OPTION_ADVENTURE}_1") frame_rect = (0, 0, 330, 144) for name in frame_names: - self.adventure_frames.append(tool.get_image_menu(tool.GFX[name], *frame_rect, c.BLACK, 1)) + self.adventure_frames.append(tool.get_image_alpha(tool.GFX[name], *frame_rect, c.BLACK, 1)) self.adventure_image = self.adventure_frames[0] self.adventure_rect = self.adventure_image.get_rect() self.adventure_rect.x = 400 @@ -53,7 +53,7 @@ class Menu(tool.State): exit_frame_names = (f"{c.EXIT}_0", f"{c.EXIT}_1") exit_frame_rect = (0, 0, 47, 27) for name in exit_frame_names: - self.exit_frames.append(tool.get_image_menu(tool.GFX[name], *exit_frame_rect, c.BLACK, 1.1)) + self.exit_frames.append(tool.get_image_alpha(tool.GFX[name], *exit_frame_rect, c.BLACK, 1.1)) self.exit_image = self.exit_frames[0] self.exit_rect = self.exit_image.get_rect() self.exit_rect.x = 730 @@ -65,7 +65,7 @@ class Menu(tool.State): option_button_frame_names = (f"{c.OPTION_BUTTON}_0", f"{c.OPTION_BUTTON}_1") option_button_frame_rect = (0, 0, 81, 31) for name in option_button_frame_names: - self.option_button_frames.append(tool.get_image_menu(tool.GFX[name], *option_button_frame_rect, c.BLACK)) + self.option_button_frames.append(tool.get_image_alpha(tool.GFX[name], *option_button_frame_rect, c.BLACK)) self.option_button_image = self.option_button_frames[0] self.option_button_rect = self.option_button_image.get_rect() self.option_button_rect.x = 560 @@ -77,7 +77,7 @@ class Menu(tool.State): littleGame_frame_names = (c.LITTLEGAME_BUTTON + "_0", c.LITTLEGAME_BUTTON + "_1") littleGame_frame_rect = (0, 7, 317, 135) for name in littleGame_frame_names: - self.littleGame_frames.append(tool.get_image_menu(tool.GFX[name], *littleGame_frame_rect, c.BLACK, 1)) + self.littleGame_frames.append(tool.get_image_alpha(tool.GFX[name], *littleGame_frame_rect, c.BLACK, 1)) self.littleGame_image = self.littleGame_frames[0] self.littleGame_rect = self.littleGame_image.get_rect() self.littleGame_rect.x = 397 @@ -145,7 +145,7 @@ class Menu(tool.State): def setupOptionMenu(self): # 选项菜单框 frame_rect = (0, 0, 500, 500) - self.big_menu = tool.get_image_menu(tool.GFX[c.BIG_MENU], *frame_rect, c.BLACK, 1.1) + self.big_menu = tool.get_image_alpha(tool.GFX[c.BIG_MENU], *frame_rect, c.BLACK, 1.1) self.big_menu_rect = self.big_menu.get_rect() self.big_menu_rect.x = 150 self.big_menu_rect.y = 0 @@ -170,7 +170,7 @@ class Menu(tool.State): font = pg.font.Font(c.FONT_PATH, 35) font.bold = True # 音量+ - self.sound_volume_plus_button = tool.get_image_menu(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) + self.sound_volume_plus_button = tool.get_image_alpha(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) sign = font.render("+", True, c.YELLOWGREEN) sign_rect = sign.get_rect() sign_rect.x = 8 @@ -179,7 +179,7 @@ class Menu(tool.State): self.sound_volume_plus_button_rect = self.sound_volume_plus_button.get_rect() self.sound_volume_plus_button_rect.x = 500 # 音量- - self.sound_volume_minus_button = tool.get_image_menu(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) + self.sound_volume_minus_button = tool.get_image_alpha(tool.GFX[c.SOUND_VOLUME_BUTTON], *frame_rect, c.BLACK) sign = font.render("-", True, c.YELLOWGREEN) sign_rect = sign.get_rect() sign_rect.x = 12 @@ -197,7 +197,7 @@ class Menu(tool.State): frame_rect = (157, 0, 157, 269) else: frame_rect = (0, 0, 157, 269) - self.sunflower_trophy = tool.get_image_menu(tool.GFX[c.TROPHY_SUNFLOWER], *frame_rect, c.BLACK) + self.sunflower_trophy = tool.get_image_alpha(tool.GFX[c.TROPHY_SUNFLOWER], *frame_rect, c.BLACK) self.sunflower_trophy_rect = self.sunflower_trophy.get_rect() self.sunflower_trophy_rect.x = 0 self.sunflower_trophy_rect.y = 280 diff --git a/source/state/screen.py b/source/state/screen.py index 6580576..e02824c 100644 --- a/source/state/screen.py +++ b/source/state/screen.py @@ -20,7 +20,7 @@ class Screen(tool.State): # 按钮 frame_rect = (0, 0, 111, 26) ## 主菜单按钮 - self.main_menu_button_image = tool.get_image_menu(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.main_menu_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) self.main_menu_button_image_rect = self.main_menu_button_image.get_rect() self.main_menu_button_image_rect.x = 620 ### 主菜单按钮上的文字 @@ -29,7 +29,7 @@ class Screen(tool.State): main_menu_text_rect = main_menu_text.get_rect() main_menu_text_rect.x = 29 ## 继续按钮 - self.next_button_image = tool.get_image_menu(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.next_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) self.next_button_image_rect = self.next_button_image.get_rect() self.next_button_image_rect.x = 70 ### 继续按钮上的文字 @@ -116,7 +116,7 @@ class AwardScreen(tool.State): frame_rect = (0, 0, 111, 26) if self.show_only_one_option: ## 主菜单按钮 - self.main_menu_button_image = tool.get_image_menu(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.main_menu_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) self.main_menu_button_image_rect = self.main_menu_button_image.get_rect() self.main_menu_button_image_rect.x = 343 self.main_menu_button_image_rect.y = 520 @@ -129,7 +129,7 @@ class AwardScreen(tool.State): self.image.blit(self.main_menu_button_image, self.main_menu_button_image_rect) else: ## 继续按钮 - self.next_button_image = tool.get_image_menu(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.next_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) self.next_button_image_rect = self.next_button_image.get_rect() self.next_button_image_rect.x = 70 ### 继续按钮上的文字 @@ -138,7 +138,7 @@ class AwardScreen(tool.State): next_text_rect = next_text.get_rect() next_text_rect.x = 37 ## 主菜单按钮 - self.main_menu_button_image = tool.get_image_menu(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.main_menu_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) self.main_menu_button_image_rect = self.main_menu_button_image.get_rect() self.main_menu_button_image_rect.x = 620 self.next_button_image_rect.y = self.main_menu_button_image_rect.y = 540 @@ -165,7 +165,7 @@ class AwardScreen(tool.State): intro_content = "您已完成冒险模式,获得此奖励!" else: intro_content = "您已完成玩玩小游戏,获得此奖励!" - sunflower_trophy_image = tool.get_image_menu(tool.GFX[c.TROPHY_SUNFLOWER], *frame_rect, scale=0.7) + sunflower_trophy_image = tool.get_image_alpha(tool.GFX[c.TROPHY_SUNFLOWER], *frame_rect, scale=0.7) sunflower_trophy_rect = sunflower_trophy_image.get_rect() sunflower_trophy_rect.x = 348 sunflower_trophy_rect.y = 108 diff --git a/source/tool.py b/source/tool.py index f7b4e95..d21617a 100755 --- a/source/tool.py +++ b/source/tool.py @@ -5,7 +5,7 @@ import pygame as pg from pygame.locals import * from . import constants as c -# an abstract class, one state of automata +# 状态机 抽象基类 class State(): def __init__(self): self.start_time = 0 @@ -17,7 +17,7 @@ class State(): # 当从其他状态进入这个状态时,需要进行的初始化操作 @abstractmethod def startup(self, current_time, persist): - # abstract method + # 前面加了@abstractmethod表示抽象基类中必须要重新定义的method(method是对象和函数的结合) pass # 当从这个状态退出时,需要进行的清除操作 def cleanup(self): @@ -26,7 +26,7 @@ class State(): # 在这个状态运行时进行的更新操作 @abstractmethod def update(self, surface, keys, current_time): - # abstract method + # 前面加了@abstractmethod表示抽象基类中必须要重新定义的method pass # 工具:范围判断函数,用于判断点击 @@ -47,7 +47,7 @@ class State(): data_to_save = json.dumps(userdata, sort_keys=True, indent=4) f.write(data_to_save) -# control this game. do event loops +# 进行游戏控制 循环 事件响应 class Control(): def __init__(self): self.screen = pg.display.get_surface() @@ -100,7 +100,7 @@ class Control(): self.state.startup(self.current_time, self.game_info) def update(self): - # 返回自 pygame_init() 调用以来的毫秒数 * 游戏速度倍率 + # 自 pygame_init() 调用以来的毫秒数 * 游戏速度倍率,即游戏时间 self.current_time = pg.time.get_ticks() * self.game_info[c.GAME_RATE] if self.state.done: @@ -116,7 +116,6 @@ class Control(): if self.state.next == c.EXIT: pg.quit() os._exit(0) - # previous, self.state_name = self.state_name, self.state.next self.state_name = self.state.next persist = self.state.cleanup() self.state = self.state_dict[self.state_name] @@ -162,7 +161,7 @@ def get_image(sheet, x, y, width, height, colorkey=c.BLACK, scale=1): int(rect.height*scale))) return image -def get_image_menu(sheet, x, y, width, height, colorkey=c.BLACK, scale=1): +def get_image_alpha(sheet, x, y, width, height, colorkey=c.BLACK, scale=1): # 保留alpha通道的图片导入 image = pg.Surface([width, height], SRCALPHA) rect = image.get_rect() From 05144d9a1b15b5c361632a482f2faeceaf640b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 10:11:55 +0800 Subject: [PATCH 02/18] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- pypvz.py | 1 + resources/graphics/Screen/HelpScreen.png | Bin 0 -> 78407 bytes source/constants.py | 6 +- source/state/mainmenu.py | 141 ++++++++++++----------- source/state/screen.py | 90 ++++++++++----- 6 files changed, 144 insertions(+), 96 deletions(-) create mode 100644 resources/graphics/Screen/HelpScreen.png diff --git a/README.md b/README.md index 07eadc6..9d3dde7 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ * 支持自定义游戏速度倍率 * 保存在游戏存档文件中,可以通过修改`game rate`值更改速度倍率 * 游戏完成成就显示 - * 冒险模式全部完成显示银向日葵奖杯 + * 任意一游戏模式全部完成显示银向日葵奖杯 * 所有模式全部完成显示金向日葵奖杯 * 光标移动到向日葵奖杯上是显示当前各个模式通关次数 diff --git a/pypvz.py b/pypvz.py index 2d75121..8e4a2bf 100755 --- a/pypvz.py +++ b/pypvz.py @@ -32,6 +32,7 @@ if __name__=="__main__": c.GAME_LOSE: screen.GameLoseScreen(), c.LEVEL: level.Level(), c.AWARD_SCREEN: screen.AwardScreen(), + c.HELP_SCREEN: screen.HelpScreen(), } game.setup_states(state_dict, c.MAIN_MENU) game.run() diff --git a/resources/graphics/Screen/HelpScreen.png b/resources/graphics/Screen/HelpScreen.png new file mode 100644 index 0000000000000000000000000000000000000000..8f5e535d6fb4ac22ef1078038bb7149e484fffee GIT binary patch literal 78407 zcmXV%Wmr_**Tx5slI|85hVDi}I);)EkW`wXQ|Sh27)lzY8|m&Ykxpp@>F#)s&;R|# z#l_+5efFyRx7H3G{RIoHe{5$nbziE38#MR?8sRhl$vwFCls*~fs#9^tU)g%m7oGwD}nAF1mlNm^-a z)=`lUP$?#H7<6%ah}^3VP{l}16xKcpY=C31u;=rT@ntgVXvPX|Czk2wkqbMq@QP@z zjb~FXXAX3qn@jVP4UwYqwLi~2zaDsKKaD>AT%?{W7fsG@-J0Y`xzn(@V&PH|V$>12 zfP#zJy-Ia`^_F)pLF@njBt!^ZDmj#^Y)BVxnz8u5$EMvexKtpRAPb7lHLhDdJm)`S zo*l?v0-k=`HKJi73B^QmVQPpAzAT7lQ=R!a{r_)^$YsJyw<~&v#@~n-#~1!F7`YQW zKOY-CJUG7owf~uSbyJ7~8^?$B*@~}qwS>XQBZa|4fL}!8f9sf5__8U~!EODb7cWmV z&fg;|(+Z)-%*F{ebl0A=O{}M4xqE5P`2r;BH`8Zdn4t8NasU}bbsIlmg0IjGEDP_W zBdPrQ*`WEWYP1dLN9#{{|G$+vb-uGC*+B~mZiEp!eb$jZABY}A$6MuzV^whf(Wqk< z&FduS0|F@P8qetXz}oq0qwiB7(}G6YpLV37u&hJNTcdEc4e02&AV18Nf&E#rRrdPx{7IP1pRwIz(?r_7W%Kw1S`kG3h1CLBwv$%R4;emxbeto3!xFX z>>TX$8V11_IPI(Ke77uZ@VnQ$sK_xnH@=A6=P!1771(51+}?o!Y>*h+=5QcQOh&h5X>@d8 z(l9jvZ-#-*B-k%1|N8)p{(NUV5hOE7Bc-W%W(`va{ z2#a(i8(Iv3TV5Gpt^|ETo~bZW$cV(NQufDp+grYiKci)4#keEnXP$gH6TZc5xf@|{ zfh}sVIwdon5g|jW40)E!dVA^}G^Lw(l?Bys(sKXIuhlH4*5}_~0 z$XtR)VE^&e@0IbJKTC|#z21vp^Z(AbUqJ}_`UK{}#EF#ts%RK}jW6DC>CKWY_Hb6A zsI(>x!)s0>*Du~Jwn-7tjj8G2Fj#|AMLtXyE?-?jW9%Oxmx@=ii4s1iJiMXzf>j>Ixj^p zz+-ECVughQ4~Dt@Ex~EZDkKFkTxw+JXU2)QT!#;YzllTcUudcp=vomimZ;P6e=t|G z`0!aIb2!%SUAI<#!6-3(`n#6|su+i;Z>w%^m^~jWW~i}JUcHu}VlH(mIjxUNf+|Px zGklp+9`xUO((ze^rU!ku?m}E@_VJ>UV0$>a>ZV<9=@rV`UVU?q3#yGxUJm7BtFx1T z%DTz|$Mx>7zESe@OdVkNSQtL^p3fugB6=%1F@=JGEvcXR!Mr`Dp4y;~_OjEX~;qE;UQOZyvE znzC2|CrE#F?R64o+XR*!FBnL?UD*UHRj*e)e0UnWBJ=p!NG@1{-G^6ThHtW29SL$O!>YJ3n-2mJ0_K$6GKdyW z4oeL%T8lz>RCJJ24xdJ(DfS9wnfY-eTa>9>YDn$S*cDa%^&%LB0nTfDC%&L8M^8&B zTWDr;z;^xN@N>K5`5gjF%?HyHWz0cDASxZ(2ORWfq zfq<4SMr92Lq>6#`Y++tl)q@$uhHfpLY2s(7eK-Dme=KiPD9|e)gSRv{Hw^ z?0m$l>sWNNsia87=|oYMdi5a@a4oy!t0(ZGCCI6wuZjvxDSR#KD%vBXDkC!QDGhZpw<{+1$zK0v;(-5{@;pnq#jl3u_%P>W`5IJ+9BkO8QhZvC zm(7N+9c)&W6nFe=8$AfM%RF2m)%vU*jM;(Z-gb>L=TN(TZm1bP1nyIKE zj!B9#V%ZFqCtsj*R-eQ_p9RUgj$`N7Cgce;lhf!AVOKQA&WIPCuceXR&}a1YdmpzY zpAZvXazVM7v+D~PG?||g-%(jp9#@!WILS%SOkRyIV^S*R7@-@rNE>QJz40Pn=ViQA zFGZP(+m3hWIb7P$N9W`s=SCV%;PvnuL&}Mv2TS(-{pfw{0MVn`uOdSG$zgA*^$o zw(LACW)TI-Bk&yNdOmgAR3gDRWxv7WDm$Cm`$xwYP<+P1kks94Iz|slUX-rtRNex3 z2Kd;6!Z>|R?7FR(reIl+!eeXy%tsb3i(Q=+&F4@WiD7xdWBs)!%uw$lyP2D&!d;Xj z>h9sJMzp>5RQ3v{9I0HGc@N%loxN{+B|UmvO+-&vHNn+zUysj2109Y}>YRcOuRv9F z;e@GCu25$waDN98y%|KN;C)KmM1~UaXIQw`^`i759Q*?-C2Oub|CZtD=F9j$vwgS? z_&z>F6O;h9`}5jli*?LriSpy9WK<>mVt&#_8pb$?zzU6t2sA6k!*W07ESf9NV~Mz! zN9)1_$*6eXJ+i^&z!7ng2@Es|a^yqt32{*$Ri-(aQI{*01vPb&_&ws^J<&xE^7|q8 z9Y}cI4F?x5fuHamB7i;rvi1$@0HHUyzCLp5N}OH#!PZ2%&1?RB+~r(H)Gvw3Ex!0U z;92moHT@Va`||8k6!W2jp4j#5+#|HX!##b7^jlUjP#+4kS#L=V1QeS^XqgaFeJvl3 z*pk3!g_5Ft*}G2_sL3C-{maSwfR&eW@j5Dn*>dA~KQ`UHzRoZ$BNaBo`c;RYHo^1z zoJdPJ(GT563!7+@0xWr2TNqMvumOyhoE|zI1>qtUBTp1~t#j*Rv8S|wmTSk#y4cf^ z-)2b;mhEjJ?;B}B;fZH(B1H`9;&S5Uw}TNy=E}tTyW^R8`YaHuz&0MC-OAT77{%PI z386{%JvN2%N&m6%e?4HW0!$c z*BVt*6USA^Dozm-p_7UG&8Wn^9KUC}E%;H2{$5Y-rN2E@SH(4_k*&?7m5AJujWV;h z(>V*M4xGD|c+b#R=qe*1c_!o7H+sF86J#-s!6c`a`fBYpjY6+#Nn#7r! zmZKaIdS0-W2ZkzKPK2XH?f95gs$#TA&**v^V$XX72~H9Gxw`t~JBxGl$8_5*ftYCP z_I6`dxV_PX2utX$1tHG(LZ zq=o6}YVhyLWXUsZ`O`x`YV8a~4Q|WsR=3j~*Eu;Z2fJ!q=RkX_!`KIK<-GG4tfzNp zobm{_>-{fGvtB?X$&*?YHBgGsRLPaWTA_)jo@r^bP|=+!Z1FVKC7i5ws=O$<++dYe z)9&PU9@zuga>PlR26p6=0;k+!G4PqfEUd%$gZzem_eCM%bQ77Pe#Faqr%tVpX`i-h zvscOa3$S#9A%`9#EMTUV=maSv;c3xV(C(?Q($u4*3GoCrJf7wx!NQd04z_f{rbAJa zrmbRxCCnkCg{E251Au{ji; zV_0e&;`IlxzdWzl3$mUT!rs#L&VwhEDZq?m%rzi(lvwXyoeoAsEyggi66x2LBp{P^ za?y@1t}snhmHD`n&>p+&{ZLV+;8yxgrY8=nG7RKvGPNSa1>2||sVWt=K(;I)im6bO zMqyR$DgL$H$6tTD3Ewh&V?e`C5MtyfD^=fgH!kS2?eEMbCP?wielcu436Z0xmPI4G zrjO+#UO-L2T&g$Jme=n6W3qUWJAkfdn)3J_2j{UEY(6V8;*_zftbQ}>tQ0=kQ_(!H zTU_xY5(Sj9qJ*ML&TnpEAwDkioGz$8`?=##(85UTL+ac>*OG6R&2)-I9{fwr1o-@V z^H+?PE;9^ViUzh5AC8mJ7v?W@9Jp#(9sp}XVS_CTyocxS9%HWHrU0`_`UkL71wx5#&P31)CYUR1^ zjz^{t9crIdbY|FW9Z!Y_Xsb^VvMaSsHBM#CDK2A9#U*4-U#+@jE;K%=!BRrK3V;e8 z+1%^X*}}#0^{EO%e$>cVr zSrXl~hs~yAV<#B%1h(z;({zH&o}qbKh3ApiF!eq=F-|+y02g-2-lL`OK+(?&K=U!7 zECp(CRNHRWm%Z3p&5u!R?ik@?0Dbd#AZUk%%F$X_Kv?YF@Rs)5v6oeQE+`JVn!|l~ zI!b3Ae&L@gSJT!$tQf7HmPfX-BU^6Zi0t*`^&Tu{UyYYd1rBZFW1(?KBTuxS=NZe|$A;M(4 zG=3jn!a{AWeYEjtu;BwBRW_dYTwS?0Yrmf)WuUjXCH~XE{3}xPl+R+F2%T~plF90dbHH4svT!!lK`AY<*z@{?e7MqmYxM5Ww2jfRMUJW=_9j|M&999~ ze4|#O5I9eQY&*MF@_#IWj>dFxBu_p-hB&{l}*^@jnoHh++!- z$N{sSEEe0F9qnHoz@r`6&xyObW&`RyG`(_GR+ReB7lmAkD2ZW-RIkhRbhQ6jn*(#i zJ8DG?%uai43<&}rU+Owoc|r6y+EbC$1npa9e$yS2pC8wkwLngKidVWn&s5VBDH$Ve ziRc4)JgxAnb7qnpOcSF}+Ure~A~A`@aAG#Wn2%1Mooo~F@8wu;GC& z*qYXg`usE6Y4>|Iv+8jhW;2tbQvYi_(S}lJdU28>9dGW{k(esJX2Bzzj6UJht6m}a z_Xa%KF@K$8{dw;)-vWL)Qj~F>{}R7z}}Q44({izebbQ(+co-$Jmuox67(@>EDmO?WtA`eC$lFZWL~C zi~p837yxw~h4R`MbEcP&K-JA@%L{j$WctnyM9<%OpRM&rAJ?pWjhT$PC_!T2@)GxhhB22yt68_uy~R)<#!+SIvV zI|^9vsJHl%{^@h;_>x+mld_1Mm>h6;js-2oUiRtvzg1Ch4y4;WJ#=U;vG~u_8`etH zb3?HeQ#0f1Yq< zn&G;~l%1g7!t(=mYP-r`(tltlnMVA}Wp#>*;YP24#F}nnr?PqXs(ZS%ixZ3t(;2+z* z@lA6-{JCiI*UrxF_@iHk4l}oDZG?=|QJE!uvew#dDaSv0eu49DoQncsdG*-%s0?-P z{FnI2>4R2-Gk$l`Z@##6vb@6Bv5q>yPfmh&g6#Jna{HIU5~g*dm0m=?w@?=+ z$3zBNGOGV~~*igw*pQ$tvD`i6r}hSY zlw5Y`Oj0iE8h5=yNSNFQA~uovs3pMBx^7t=m3;v$PN+i-OPws(pVjv(5(~74>E2cf zU#T0yBEZJMt|k1#@BEP90>_(gM{k$~UCfXpTS|v*)ORymHI0V6d)#z=;Knq2S zRf8bkgfj(4U=Qf}sLl!Jm%6MJ{N3Ax-OlSmo(!YS-zeMU8OtT4A}jpw@ap2tdJZC) zY0(#p9wiFNCOLW!yj~Wq6nBo_J;cQgg;XDZF8rAt#UwL~oylO)y%PL+d+WscI6B5) zH1m>&j)8*!E{}>+SDoLlp*-GUK+7wTg27qX?-l9FNMr zrX3;sFYKzOi|qgP_9aRQh~WDfA>z?6)ny1eyb4|U^WaV3_t0Y*qLBMwkIznH|6XKC zZGfH5cls>E*#D0KMnL7yx+TZUYxUB>4&?S&Nxll~9508A`(io#R^MRu=G05w@XwcN zCzKi@ceXYyu6%cf4I|8ogTwfY2`T1UChaN$WM@Xza=1PAdrcoJM;7En1>Wk{mc2h7 zX-J7fa1wT&m1L;;Av+{TPbxoQDcEKP_Xp}6?v`f&Ha0=_j`}%#y{m$B8C8w#-}sh5 zJIj!$GFe|@591s;$Ot;{2+QzHi=UM5908v4aASfh(fZarOr7jSd#tW}NPf1R-Ts$~ zx#OI9bn`yQp`TzB?he1x7>VYz-_* z#vS`yLoYzfNRIbco<}adHk?!A$Ih-{)z};Yo{t<%qc}OjtIYulh@lVo zMKUg*Hd}`0O*7<77|`3E7GPaK+#EP-zkl^a`*Y~~)Qb}rDGNxh*;tb{pB!q!$|Iah zW|(r|Hd@?k#Z_cg8=(pONsP1RM*tqbiEq0udKa2EHQ$&bV&;+EAK_E3yr3X+xm{LUL8*kJSkO`GO6Zg?XK~2C?^x87% zvDw5d!+;fw$Q)D{7^%oCZTV6o+-y?6nd;!=VE-G?dEMf;wx>WgR0=Uo0GAx|+=z|} zOur|-X>Whh-O-D8D#-R2?}%J835pv}Mvt#@X!i*$Kco^16$*LvXe^H zmVi(|Xmw?Vl{fJw*|bc^!*o*zi!XhQb*Q9eexi-vqoK8&Ja*8paImslQn0v@5!Af5 zzzI7?jM^Fkj9PfGZ#i90o$XA7p z34#Zq!m5MGth%7srNIG+mM$^~*Z+94 z>k+FqSC&fiQ*K3$iUZ%AX7RA4{?hC<2^6P#H|XyNe4c{3sW*PU>zM6cu5?GMj1^>D z1~lFKbM^zpO5Ye@T5D)~daEsSp#;oq#Y?Oj?@afet&6xhg)kkr&#d=I!MO=FSZ=SR zUpTHY5X)Y+i3!_I@QwT6SUr_QYd~dGOF%TG{MxBDoL=9t?RuVHJGEw^+L5vjECL8~ z{kF7X7T$zK(&np^Q1!266>ve%d9-wcJ0_u$_=xnO@S%Ez6&(eAS;)QVnt}EVWy5Mb zL}@2frcS3)ym$60=CUQv${QE)tIkv;(Xf@|ClM+tA7^m<;O3vFFUBCDJvoO4!5`HR zby*h*9b(+#bx}&cq_Uw3XsO^ z$~nytBqt&i^ph6*LU{izKr&~H(6X`;%oDR|qKP}xaN0zHYF=yfd6u|pNw+VOWNEDi zj}j#$!a7fG!mcrCkLE2!1abC>$BWQQ;UkgiLC(P1-Q-(6c<8Qqt`Q?1eJNOYV8@_d zMUgjzpQHl`?{&Hzh!#<0u<_<)&qjO}G#59-H$5Z`Fl6g;En;R~&94%-)9KT?j!Rv} zpqtYx&Ps+M(vD{!5>P$DCrU8B{zOniDqMaRe_F3mtVk8LNQzKn7Ftw$@nvXtVSC2q zt~IWf+ieITP5u4cxxdv{)bEN;K;l|ED*;=2Ohf^J-LtRf(bRnBZZRk39m0^@fX6B` zx~}?Zo9_31sDZXEPtvAP#VbNHnKV2q{F$Wfj#+ZvfH`%&(OPn-h`c=L-)E%uX44qN zYEY{Ujm%v@DH9K{g*R<$mBxg1Pru1x9O;fi&Lx6gO|j;5!Yptn8dhvzSdF;mXn zs<_<0RkBfx)?K_Gy9VX%XOv2jFPP4NdA%kk-T4G6!i zyUGsvQ)=|1DrBWJ5Y=`ocyUeH2aC267qb>XQNK5nSx`99Q)9AXyHIm*WOM;!eI6)f z&ZQ`Q87IH1D~~fRKu}2IspaC$gn5N9@$u*vqkaf$hA)mA`*jq`CTrYOXoN(d0sh_( zcwy|T3KHO`&|E#vfvP8bs5?X9JjbjhQ#H_=7+OA@1CoG`pi09LNgRs|(Qtq4X(XDD z3m~dc0$CF1E3jT0@D2qVKtM$@QDW$COXs{CPKFr$6qT=l6ngq?edAC0#YQw82zZMP zwMYTSS@2#kl1^+;fjdz0D^^0b#E@Q5|-;|ww+gh^IKw`}unqO06Z!KV_=fve#Y-7q)e{iFvZ z(MKfNxa(`L{I()MwT$$d{XFkj(xr;bppuk*pJiufqruN4K@K@8W8dg{bf@jz`C0!~ zgYh*QQBzz}aFiK-+0m9|Y1yoSf!-tr@*5@DTyNRV5Yx(46=iK6#4Le;)0J(RLSJlv zqP|G?OaFw^-c(b9F%0BlgHh5iZ}DYIgvR)G8l|4q`HVe~QR+?Ovb3|BftrLJ$WV><6yo2SvbVo1$`od5Af3pJs za!`~ZMnxU0{UL;SGV=BV{hru{9nh}?iarcTB`W`tc4c(gTb zd%cb9n-ig6PUwDI%Pl)xSduLvmnWKFr<@^1yk+U4g@UeblGV$!I!w>K~o z9?dO!h4)$cS1`T|#tAP<%#^@xj`&FQ&A)HDvTl19|m>I1#W&zh`4ik`7} z+Nte3J}L4t%3Z>^I;_`shTed1@xIH4#9R=fi!BcO=cQzLh-NAPyCp^|tPHyvAP>B4cef@dR>J1(mc zmF504+!+eO*~ zmvSCS#+~~C628D!$fXHgSUcHr_zB$rHfJk8f#X~ns1PWm8;eoHkK5p+C3N$ZY~Ea0 zR`sMd2lP%D(6V5d2ay#erAMoaWt&Xx{zEsJsGs?94Ktl>0JqRcEh{J!ya^gfVlCB( zd{6pg7!U%M(u>Rs!-IB>&CbgB8v4`It<>&pI7gN?szTvccZP?@7QUQ}-26;M=RIf( zW0$8>M)kEvz%&rL50!tfhhN)r#8l-(RWhD=4Q|Lz+uSk35mb&#S2vBwZL}MHdVWhN z#Zc!ORpca2I1xctth<>(*_iIaQewf2^9FDJlPSb9 zFVzsZ9JTyH%wzExT`q1r1swUI!pJX$FIk0*8W`O8_w#~g%BIw-DhM8O9FseF(l@6l zN4(g~DdLG5+VV7)#ABuDR)L`h$80nLfApw1Rw57hHPWtvRL+cQ ztqKKgk}xSKyq=52dB=v^kr--Lw+b+nu2{}bwc6@|rF?=VMx~1j*%Ljr43i912yyfB z1vO_1EekkWi*bW2vc+`?>NTZvUm}6If#Q56!Z;AR%Aze&s$5YSlK=*Bgw>m=lSK{J zu0CUOGN5A|Pg#|VVrTAtY@vIfcPLnysnVe6=wzyN%zgRuF-az69x&yRw)IV3eG_PL z0IUgtMpA}sed(|)CWG8E&o51lL63pk`r?N&Yf;(iltzMi2T2&6xyN8>_rK6?TGq-L z)B{>6yG|EBDJ(%e&s6@f_h(`vf=r?yp#v*7!fvY8RyxqLNYd7?JOa~tQX=@?teN^xYhy)2BW>dsr-RjA_NKTdR^Z}@Zzo=jV=X`A3AUQDvmLB$ zQrNOZV07Q~Ncx!dG#Q2H22X(q6n;z=l473U5PDzR59h`whE^-%vt_I3s*mQ7t&E!w z)sWTIXgQ*&Ct@gM;VcQbtHgdo`}OZRmVu>)FD>qb0nkBZDCiq8q4H*>%!C$!qWqF# z-V*{pdO>Ex*uYyYR8a46n{RIBdn@M&MG;yPN795EC#Wx3+esc=K5?`o+UA$_l966Z zfm6robQHZ&a_tUiAlo5)*P_H8Oxk7sv#UYG}e)Fp*|h;QVRVol|Zcm3oWW|3gFV}_qA#- zcWeUpL;M`lE!eU}Re0uL@MKE+ymR2RTmB=pxUKDK>%0r{pW$n(xi*$mAVY zF0@p->RfGqJ*bV%U-w$b3>IkVXh%4;MZYmOuXR!8ZOqb9e8GM?*6@}mS3=OCSc@Z9 zjpUD(XQ|cu6}S|FR7J{&xO>G+A(NEkW(#VHU2Crt+GPzmP1P^QqmuPD@*I(Z{_?Y+q+Xp z4wBy9?%%Cg#)g~U8cSKvlE>WH--YDE`eJ%_@>+b=mw(U8wzLIsMY(D6c#cMBPBE$i zup_lZ5^1B4{M*st?QH?e$FMMneieMT`Xd87B1|us3*T%>(E6nvxncn`Dr(i-@0tCG zkLS8(eW%}6%eOq%!P5|fj9&W{y`Eub*1EvVYvNdDR+UjNr1t~a#{+GO(9R8Qp%QxBNt<_RBf3qVf2D%Qnl3n{{O zfsPav_LxRQq$+Xsv=uw+z)0yD#b%pDkOzV66t70cAsTz;UzxW6+xo5Q+3^mY*N#Ca z!-E+*!`2?T5UR&SSnN6L9K`iYPu4}EPAdc7`MH`n**Wlt`sO_l-HkQ zW?G@=Yk8_;(~WsuQ3^v$$@P0-ED-3GJaXQ^iPdIAsvfYlg{ZbDA0 zMm9HUvI^17D>d*{nu^qR4h%L@+gqv<8#(-&D>}AG(6x{!K-QD6x7AH?_s~787UD~g~)pD z;$Mer%1m^|X(%9qV6O%W$=_loW_%^ix;$={W7W6?hLTwKcpagD6i z#P~E!spF+1&7dd(c$OqT|I2~pYjHo0Ywr};%o}hZ&FLYEd#J=lqToZVxUNe{pPxeA&9vGOp zH9L4bQRj0tWJ{q7LCM!efBCKOnU{E3ujSKFM}}o3#7O?|LzNKHB!jkigaXNP ztujh|4!x=MmrirKW&;8-(s}Mg3Vw;-2*ExnYYbe^SG+Da_umi;x69Nc{#s%frxhX^ zn7EVZ5HzjvC$qBmTHsJmK>TJVt@=egRxh;m-vIsl8xP(zIoJqO?*YJ#W(Y3MZL;_F z$1AX>zHyI0%o%^ryJ`RtcpV|mYR>slPNb$XBMRG!6>D{z?OZ_oEz;uctwoMJq@%R# zH;U{&L|zzdip%r*8zR&6o55)r7!Id+OdLD~u5A9B6Y@=9Q%|2@6TB$ctz3#|jkxs$ z0P?>buVX|A={L4|tf5OzgT5&YlZzM&%>s_pd6ISysDgM@alugp4tW1&h+{5-r=L!J z6W}eZUq^J`4JK;pW+R-w80#j3uHCRH zeEkfSvx9$X61PAu%fKA-g114;71IN~2)vDyCpD1Gw&_WnA;w6(3_S&#ewC|K*7)MX zZ@4$cO-CnlQiZ#7;5^zX>B!oJuj%*{r^^mb)8HcdP9Suh#rE1XY|&%7f9>lY8kYx= zUy8U*&^!TV!|MD!s)5@>NZ5i18FNdcBZ{Cy`TF?vrd$WW;3AWz81Us#&4?CeuT(e%!~g!*!i|zou>;r zW?OH6#h2(=x~4`&F~tqrsb{~i(jYmzt$Ry=R0GveHZTwhdVYvqw@E-vXG-(TRWYQA zd%-AJBhG+Zcz)xzc8`{uIG6k7uN16FTp$w%Jw@5Y&}gi|UwwtQh2)eFS?8?etO3L~Kc6F3)FtZQx;7+|JyAj^Li*~n^YNJ43yJ1V7cW?lt$rRWbntx&SA?lIxqC&xx&lQh zEFkX_6n!%2`!P>jB^sG|!V>?O(MTWxMP&>BFPdP<65 zg~J!vdq0`4<#SkszRfFQjYk+~kcTjI8riH(&Wi+hl`2?w5%wS4Q7X1|xZIQ-1Uc8D@AiV7hbioHYpVL=#Ql&C4eR0;p zJ+mjCFCnAmt3wK8xCCVYblgMD{QDgM@!ls+<7qz=!S3xJl7?9EE{oEzr^v){(0A_9 z%2MLT(q1M($!7e8Q z+z=_JtI03Un|rTK&SN72+K`*sICqZw#x9v=l?aCY^+A>(7{NuzvgJfjS4JA9xqPjlJ z1TQ=A{D;ROHIrWjet9R$B3itVt<>fjd?nj;kug+qHu-|b50fm=1KU5(UN&o|jOCSX zT-7aU4ww^tp`)hAg8S5CHCA>3t`)w(|DEMmjWT{2Z~?1%Jp4-E)cr9Dfz>nH4$EdG z@2}mf`SF?XL9sa7YQwGNwCIh1M%~Yo$l|~JEc=+ladSn2aKqnJObY49mJa8yElNdN z#!%Emr=)Plv(h77P-5cIU)vGDX!N<)$Oti?Hg7 z&-B9m`=PXM<4^%?yqtgrMmHEzsc(f*Y$=z}ysh2+&Dy3Jr(*l_Q9nMQM>B<8#42lt zGRuVSfVN*gOA_hrM~}Ow_7XktEn>WSk)%*Y_ttPm&@7FzcGB=LuV$xGVsw0JQjvhO zM(_OFh~gSo^{7Ga8Ffe>ZG$n;?c19Xatn10|C47f{2i$(s}$4M+t@)R0okYQbwSf+ zAWB{9D&c~Zg?S~AQCOCFXwac8jOe$NgGI3={#q5MvUf5@20{tDse)ncUrgNfMOa-v z5Wpl6$QLIArHCUzPFu}Xb(W^^=x~7EP`jimjAO=^N7@E|xhC{N??;*0YqReO*{M5` zl^vT;iZy(=r+z+3wP#`1Peg!v#pyD}gkoVd7-pJ`_1H>N)d&}EZ{rRG@J#T?)it*{ z7I|uHJR<5psWnhT;QWHcMSoYpaC=Qb4#Q?;5d*ft@bfsR(-U|ifbFk@S*o#t!VFa?#_ zI=j|TGeg7f_1~{#59AC6wwN_AK#5pkWhnoUTzC4FTeVMUyVu+3@=RQskCha*P@ajZyFsK%?efy zQR#;5<<_@ctgR_1V(y;4^|r}%TM;kq9`f(Hk*-GaI4g5mSLAd$U9|7Iy9b*ke)wbp z+Q3Hej=qQOi6QKA$(A`?V+$yzhUO8lck+HL0`_m z*pLS6^8v0$-&li1yGDt;R=>nniw-m|gY(#m+CG znPI_X^aV5)>oLe|x_;0t`7rrr0ch67Th%4bsTl>DrH+l6b4QRP&9qxKt)z#rHzVFw z>9|+1pc7Y;VT85cUWLzml6~{VnDirvgyc{9djmxQryY|Su_eX%I}lU}ulU-fPYkTt zHx*jl8}+AMq$`FO**op(%?B3w**9 z)FfuouoVe&*0K_R-S6huiag+c$^P2carc&`4E&d_9Mw~A|Ln*kFq-N=O9kTeHyU{W z1<;vVaA0A>G%D#@FL=OQ5hEVNMW~6wgQ8M$()y|gE|!PB zjxesVfF>0WD!ZB1sEfgHL3=+!5UJ7He9YWM7u|BG&Ec&sp|O=tg5ljIBCZn-0vRMs6vK!deR?lZbs z)ToM9{F06ZI+i3q*Y+;I%rC~66I}2n!WD<#ryPBv*lv!C_(G2#?z)QZK`}r=p0^Q%F&1{~fw_MuR>=!$v~C`Se@YtLV}RG6Hn+EW8~`x`%6TlfFbtw7WkJUjg^354L9<A^8;wxXud~b$e&mwG9J`LOzNWqQ zAuOJ$m62YBDMi7)lyTI0R7WZG7a;SfjD&x#SGRlFR^r0P@;yBuZOdE`jX;aCvdK?t zpDwFoZ||i z8{yg#3=#m{RiHc1P9O7i>Fb})P3vsiOq8=V&nzSF6e$A9CQDB=q=r8C8s)qo3ZFm!lPZuxu> zWjMd-#=Gdy+UVG7TmJ=n)nh-cfTZ(dRjfJSvaYYUV@g;;VX#EBN%+%R4EtF&Lu=Fl z9g}FiG2yzGI&h_~I4RHk-!0~4T^xXc+#h%RgveX;hGdeQ>Ah-O@d|o=8h@snFfb5U zQB?{$eZa!rRIqs^Ibk+_O|Vl)g-0;8o=$}!~6q@nEbSwH_5(^tX)sz8=$-ay1aPTQ5D<0n&nRK|KZ%m@Nu|@iU;k4*O#KZDf`?%a_8qASlhHe0ldR*|M%aWtv(kxDoKzHNWQzqNnS( zAGYNNfhIsv-!vdIHezuO*ZT}|1q#PL}@57TL2b~wqRVO zVOp_6&mx=@yPQ6~3IE8)F*f(stqRR`dt>$r``>H_5R%d`%PQG7hRs`Evwrw0Q=$0l z+wIk%TVqzCPlx{vS#l&>F&6t7+sM9@NH!q<-CN@cMfj*E4blU*zLm+H zc``-zVS#7$GD9F)3xLikwf+$r&OQW20EeT6fMLW-aXGb{aRHczk&=hJ$16Z$0XTOe zCU`mF#r0)SY=`o0Jx660tJ&mBOnE(p!LwSMD3<5rU2luFuS;>hI`|f>wBZY(cLUQW zK+|CeA_+lxL^AK=0_Hk_2&nDcr;x@M#$WoT23!K5ti{9V@AVqy-@@T38GyQZ$bP<2 z75s)8`ujBYTUfj@GU}HA0gtgB%y^jDfK#2h0{Q#ap2yT|2L?6`*MKk`HoMeNaC0+E zLfu*5WfL>&*8j0|l~GZ3ZJUr3q`P5gq`N^F7`m124rwGsLb|(=mhKQiq#J>uL6i^y z=~U|5Jn#3DS;Ja0XZAV!-d9eAtSaykiL&lLKU>vFV#<4>RW}Y~5sy}?>h;?S&#P;4 zfl)IZygU0oKPz7Umx&B}5yI~>&BQ1KtAB0L3W#;)nTtig`cqdV_V|Op9sKxb9I4n6 z?DP#O-Q@w5(aBB@5#C}|pGb^N!kh?QDfj~gVJDx=L-8q5f74{9H2o9d!h~5!pZ4Cj z^Et*Wdk;A^Kp67&_j$5}R`6iMXWcDbp$m*+GPn?^%GxJvpGe%Mw2V_hZ7YR61pT?u zc_-`Iyg!Oakhpvi5_^9_W%3Mi{tng4;k#}#!{@YF^qjNhUdxHLh1u524kUXk&$+BN zPsA55<%4P~7T2pG&$S`04$BW&`TXB)6duT#6WYRKM~J19Z--N#YSYok5jYvp zsK^S|mM!Mi?lhLh6Us}qAN2yE8Sa(1^MBlRt9u2$xFC!kdfo>8QFr;Q&juTzOt1mQ?C}1#oGXF0%2+?1{Zr2N;)KdO8GLV zfOx5ZbpGy1HL~%*@SV^dLd+#Gqm>t@mp>RI?*1h9xOcjLK*A!hT4Hj^9UbAu`py=& z-(Eo?d1}!5r@@;gHuKXimh~neO^!VxMlxaXOGEhDx@CWJiVF39nc)_rZBx zITN)}w`WzsFqNzBr>}|CxBi}o6`fra<>@t1CEz0vEy;hMgf;7`U1q~#BM8f^!41|V zfNEJ4XymwNP4k)=ueeskW1EzjRD!o=WCYawwjFaCLfvhWf1b9_SR;|?BBxVhfKuYd zIUDh(PE`1qK%U@~GL23q*e^)Ov0T_;RqB|4nB!A<>5je_tB%Z;b$`NKM!CFpdW5D# z&nS6g`rrJ4}T@m z92yz%Qt%?qo>o%G`dh;M7fR(FH_)eC&x^Xb)JVozvi=A-{0m9?w)pSjmrS=1p#<0V z71&0ielH2zOF%P#>I36+C_FlL5L@>0j7n`^52JOyNk1dEtfRi-r0Sr{_g91dO0)d$ zL3uo0{Q++%&-+^PaK)vhS@OMZ6U$F#m#8JMoo2!5Knl08^Pr5A&|1HX2Kos-*vk^* zc|Uk1+riPVptLv>cqS*e5;U2o7=f1$dx;Bo_uBfc=%n9pf zYBt`#OSrgbPeF{kWppns-|m$^4=cCD%Ztl#tv4V_Viqd8xhGSq z-oe78{x_doAo_9s6;&$peAhSqar09_MGj>|EFQS=ZkI4{Uopu*Q?}0}u&2iDl}y#} z?VoPa@04SbL{zhw_93EL2HuR&&x(5k8CUg{|DBjKk3;UW`ZX0m6m_yP73+$={Q~xW z9Lan9M|s%SA=3>nnesD^aoYL3+l2>jWbkUswGYr}G-YhTUg#aoA^XN@HncaFRN63T zKHLU0xyF2eS>^_c0EXUl)j(aYcros$)WhZnm*+3%n)(_bI8L!@u1PB{uL%#obHj4C z-q14=wcZJbbUh6Y)Bl=vVG`B+CF_z@-%ohu(V9Y&oRph7OfyVtjr9}z_RCM)6PbcC z*PYHMds$$M|8VR`irVf|mq)5$Q>X}Ei(4BVo&_4pwZW3NKMYs4Q@;Xda66bo9z7J# ztpwL5t6nuMRPamyz~27q;g`|A++E`$3GeY-uia`;&AwyI_5Dqq*G-uzrl%z-O6(60 zH;0>{XJpk#0)TGsN`ATg=n|l6h^m+Rjcnz7cA0XPCvP3CVvmJZ(2#Pw69K(Rtu%>Y8aenq zf!qp$OM7ilPMtAXesI(+vbHR4nzLD^D>Q z=Hx-#VOi0&DiJ{+pgf8SF15#C99ZLoUY*4#b=y)bsm41OM&_|9ksC~k_Jq&Mh( zR)-#`@Cy3q>6*ccgre@_fXQii$UflkkxeR&*nf0+j|Pau1|rTO=~)wztNmeQaRczl zcFo9l6qOw@lF!9n3UePn5I+R;dXq}4m5iTlRLDsn=8IctoA?>y*)K$}cY`^PNpprV zM>TW|h(`~o#`AQy|DJEK?K4`HvFAL71J!AxO?1pR+z`xFXl@>$YJUYI2JqMa4|8an5yi!=9_EihC`%&DR%Enp!X`4-*LV4PCRs^!r%nptCOnaf{P!JE zv6(8V5K52!p;+Tngi-2Dz`1Lej^95Z>tnJCjj%`PAyzi9AW#^+Na>j*eUYzWn*>0^sEve7uJPB6=-mu!B)j;j~) z%D4IGKgMkW++R$8=7qK}fOL=(48q772MR!WDkFtZh`w+ir2bN)aZ{q$LIndq6qf;y zS2QL?8nL*=JsXjqE@kT(!mr6zPe+pOjAa2mxe@n^6jE;MaF&d=})X-e11RJ(eK)^0X`LUyP`GL)ihT4?%9J=3_WZ~xJ#gqTN<||qd3v@lTVwxgSOy7dLSb>u~?qD`G$zFjYnD| z#k1wVX`LH*l#F$EnLG`Bbc0zc@$iL{^^Bi07OuJ^^nT|#P{XE(FZ{!Ch=_`Zj$gXU zWb^!`4HofcC=PpUwUf1oz45Mdb zRDSa+F=@_)y^tk-kN6L51so`8Y;4#2%*>e0%HBI?58}|Lr8bd|4N6(kxQ_%I}q{R+!Bt`D9i^^Q2Butx|`2@3OpfFdem0*1!O+KvZrm&5AS&eG+-ZvovGln&}is zpHTOo+(A@2eVgeOT|!tyy#SY;gtYl&6wWw; zSA~Trkklx93Tzz+jtu2aimjAGs&Z41B>oG-KWyBrszeM-G0MuKr;Kd_4`jOLa?=-| zqtsj*^U?#H4d{+kp>D8KYf#-a^2F_R5r|Ms)7>JN-Ic)HuIdS(Y9>LP$5uDz2tf z)39YLqRcAXHl&YsZ`v@h@DbXA4ikvpkChx$-nNd)Q68)@C8eUVTLk zxiPjO3Kr+w>gJTZ88OFRjj$C|YX6ZjI(q@BhmIpoO&xb$F-wIEZV^a&Wm|xb_2Zl%Y@Sx<0r-ptHfE9~ z1yd?`+!ywJ2;{MJd#l_3Ty(xj`H~w3wmD?lLwD{y$)(zsgU)Lo`D)#W_tnv_4%uA; zCRVN4pYs_wLI*Qz`5CNLh;r6>#ONCKfzPe@ROowx=H!Y?d1x^!$qiZrA}%WdH12pb zzx|JB?|^X}WQLb~hSbmkpJ|EN%@{hJr#m47;VI6?%B21q@pz}Y&)-OBIF71O3I>h= z+rSeT()+-s-~ZNg9lu_P8)Zsm(0b%<=l)KSg_-yB_LjjArvA=Cd;jO6shL-9%Yk>B zF?p7(q$0IvCJ+NXNJ!>;{)o5tssvs2RqI11BQz@A?vhXa*it_#OG{8<3%|bTbIYb> zHe26elSD|2<>dAf-0z<*<9~`MGJ?`w;IJv(^b&?i^zN*o{hXCJBi+-04R^W`%$9s8 z=(E7Vi4(g39&koP&tuW?X|%0O1;$6Ry6s}+TH*f)lULLZ z`WyIprx!$y1BK&rK8>PUgusyQovLE078H(#rDaE9TQYqE;mSO_H1w9!R$Rq-?$&+) z)(rSFy$#f9AiI%ZA(P-Uqy{Mc!Es?950(&1EBST~Y$)m+Z@~1eVrfCPw8ckXFajnU z@s;KIor+*WXXW0W+ z&~qo~&hO9!|BsL<`1g}+6j@1Wi!QPYeJY`ikL;!lfi`4{rh+g3RIRw4++CUC*qcs7 zk|&@<7R&t)X3ncv8!4eXVxPsLklrxLv-c1-fGEnNfjY~^ZtWq;Xx;H$EYTS-Y4BG-WJoq9bM}>FC zfLrDfA#AFtO`~P@`v46ax@Z*R&^#W(lkI(%`7 zvxmC)0cWqze|Can-J+U4_zFKZxgxZnZp|cilfM7DS_93WX!SyiV26koM!*;UO{on0 zlrTB7?Gn|QA=#Wln!<%6o8-^D=(p`dPDw|8R4uZztmlz$QW9aZj2AXW*I5f{FAZKK zEdbq4L(b7?#m6XKO_;A~rl_L6>MD3LU3KbFG13;~jp+4v)8G-3@t{_!GAnNgVj^;M z;;g=pi4?J4_O&C8_rCB93Dz%sg)!rghR3;gZ}PT$t@P(h_Nqp zx9ggi3Ls<2tIULTtMFBhNc5zQ?cg76%8mRU{(%s#l{t$1$H>CnQim3OZVI04mYBZG zD61D3w}0IY7UQ{q4Ma&EZNY0V!=?;@P5&ofX+KMa^Ft(%w1)rn=m;(EmL%%=Y-1lN z9ok3R;xN}*Coe|liq~UD#T`JiBeVBqJQ6b03!-fIh2SEV8HhQ8Dna>j20;ZYiqtFr z86;jc;y;7(&WbOqY}vP|DE8UXO1^IHWYv1E#E$KIKjHZNks1XVSvVIpX{-#Ky_D^) z6npK0G*WpL#8WE9%F|sKOV&lh!t6DMR?*2jQO>8SaT?s7IF%=m?w$58@~@2X46 zfar1d2^|lbhP{1 zr0lZ56m2LJRV3?*N9u;3D2JFKGi$MGpbf^{ZYNRy&m=X?vldk=HA0sNv4!jzNoS?g zv|?_@Xr?v;`+{P=5&w$Tvi!_8Z|OXU1(1G&GkU}&8+ILgoOvBv*78^DsVI@AfS5&q z+krNiO5dDVh?%P;>YW&&Sg{e+zbq#(${pb($Vq7OdjE*#=)c*;6E_iY5pS=%7n(>S zLtFbI#vKPE@(3pXhHku(ivE{oo$1`E1EZzupD_?=>}^cLHW5oW+O&6KDq| z^uzE@M2FMm1J54POt{0y*PD%AGNX1+HN)80n_Q2io)A1T>vqDLT9FfH$@lqIr&?NY z!6l}c)=b5BEJftPa3MtqZjt}IdZY4^k8dttkAs_Y9Me|T#F4LyJbH=uXxSLNSvfE4c8TQifq zt|>zXzH1O73^D~ki0=^P^PkMPBPq6WCv(3H28U_Q zt$pZW_ws1{1j~|}G!$9&QL9zQ@MzqAJzVAT_DjY}VZf?ovThRJVBy3U#z<+Y^}hIp zZ_T!5^3{Z!$Zk5dPUH#0RqaaGn;1w}VDLU*36XYJ%AAUHnjJXLea?FZ&aP=@NtAT- zJ#V|$=Wiy@AjN1l;l<9qNs?|h%IvKT%gf)V1KoTlX2!jmJX3kzJ#b!7YO*V?u_1t; zzV>uSO>$F^x2Q-#I=j09_~&Wae!)^~h7}tF(mT)v*wxQw)=#~5k+V=)xqj?qTRh`# zGhb;H7b>UI=-XF1JOvMgnz*aGg6V^B=_6Z?+#B>dAMZz@4T4I76xmONU=T%3Oo=KQ z)&>lB7w8`^tY=YX?FgldI12nwpN$$}EN4p~^K`&od~bP7Ik0Qnl$o=^Ini2Vb+z~{ zpVE?5%b!!26Z8_nQ=aL8b0qqHe905eYAG*=H@y zaCH;&9+u%xLR)49(EMhKZW{eS(vomZW9qhQ@AJ>MQM|9eY&pUu8!E!QNy@%DlciW0 z8gfur5rWTDh#JW-gB)rHb0&mouWPA}px65bIq%S7%{7e-(-s$KDG&NGsLy8Ver1c( zv94+XEBjucl*K~lb1Wtyq`6e%MV!c4QaM8bo`}hb{uui&I=s@B1h^9;rf@7u87va| z6%T#~rJ@P$zw6}*i9r^5nc42{d!h3xbr@wtO0M}2dcyz~0!MBPw&k|PcF77m-m}Cy z=A6rzlUi9lenePcu>P7=c6V=rHZ?XgLeW)x@z~Em*{b*NizB<2TDL7QI~vkrJs3Zt zj@rm7%Om;9pu2V;39x7X;`4N8+S(d{@4ERuImy-vC5#*?u+nt!wNePb28k6SnY@^M z=yP+D&r;OvO%eN1DCPZ2l#=CV2G861IVHt428gYzOq>a5VW_H(359I(M=l)lH`vFN zXx*lf^(1S|WhgLy|D*xcB*y`G0Yu>Q+n@cK4fOxa^GVd;r}~Xq`|0)`HrazpNUYlP zP4Rv;4yq~5(zH&jwzTP5ir?HThUw$HS@DftB_k}+3p_L8-x05xkJJ3wjA^nlxlFH@ z{!ls9#QK{itY>>JGhlQaWh8sWm7TF)_XTQHW~+DzcchoW@m&Fd{YDqng?|#t49rYX zn~8bbe&!pTbZ{+hEsQqrj+xQI%~ia9W}8OZeSpHo-t@BBmTA)ihb*DJ=USxbctOy3n$k`A~3zbd^~H zP9^m5k*KTGKU~YXj=L=S4?RM}h<(JO_B%a<3w$Wf*;oWk@iX0Vn>V(-Ml6aRW-EMj zL&-(IzEFm?N5a4ROp{I!eq2#xHue3VHO$lfO<2j{tKG{YPRMjCIDdu?lrlcbt#_s^ zQWw0noX0D}K0hnl+N1ee_xsX2!qYz%GUj>6FO$Mcmi$`4k@;aZB#e6ew+AalQfEFI z&Pe0^z7YMaLK%m$j!M~2^d2yPVi-rN)(1W&NIcv-Iwx0p3fA6tPAI*rq8C9wxoBm% z`|qKtk=9XATE0->{j^xxk7B!~1Q835C%YcMY~HnPR)!Qcvw)_H%a+U)Km92h1|OSp zF2*;(g+js$XadT0m|iI$ZRtjMYD0QF)LWP+`gO7=(TPaeECbQih=9JHWb!@((Jhu!r%VCkS zZ`eq8|GOjUxch<-g(}RAF#jrFe~UJz0cw1%W3FLHs_9w1^3+Rdb-V;&HtW-qC#>we z!*IXG-4H^LnXObv95k=>9g)U@TTnMZBMTH!(w!msEvA4Ee-RRZ;aBHYpB~E3%pefi zuWJxXoVklb?N5qoaKk&vqo~f+_Q8NTj-H+drP5lvP+O5V*H!=4Cu?F{M>-!dsx_V-`1|F6KkW(4HHb6VezVduOj5JNnvJ-Ky}0f54hs}K zTK$`R&Nh&(zym>}wTpL}eFLR?2c(bJbNbM=Mb-befyelq<|BC8z+XKrxjRthd+ z!QK@Quid3UIw^BV3sAp=-URWtKCu&SI6x`TPLoVvD5XTBdBvufKp<$r%>G>0ibJl7 zjDS}bpKrawC|?ju*A!m>F(+t|Ex)wegyUzy(pn% z7=EoSH6#i)%Q*G>LeBS2H#c2j{B&Gv7Re3#srJ_#3^j*Kdi*9&^eiU2D^${?{3@J0 zE3CIe7_gABq_uyyl*pqN&Zeb&GEG2mmUDKDpRB-SxEFf8?MVCX&7Z_+U?BHw5j#ra z#`-3uc=<_ygcE;44khsK<~CnRXF_DO^8NU4@sVyLmIw_44ZTh3jMrKAP3Dd^_k;FD zE7}GPJ9Ti!0O3@ z!LGYAtPxSbE%A8tT#x!qJTtc5uU+bjU=v?|6XkVVYXRrjW^M-&pZV`zMJ%MO={40A zhW~y}V*@3>)3wswHb~l{I{lYCH>w3f@>^GSe{8#t(eej5uyb|{yHb)AC=6CkwZ4xr zv--Cjm%A`V$~bmaA0tg}RTASoAN(^sdiQ)?>i97*?aS@CF8x0h`oieg&ss?pmF5m2 z&WaTNPQqN`OTjF<*jxtE&8|2jgl7Rd^|G?w+ox;@ze5-uC=q|34Jp>Dj@kZ`LTZQ~ zwQ=VtmWNn=ZX;I<#vKVE^)^Uc=!%ufiql#8j$BeMW~y*+dE);dcuq~`EWlF}hEaq%}tsH^}*7f0ZT)*R!m#1udiG(2um`zk;!X+s?D*lo3A4$;~<{PSya{kCy zVj_G(Xsj_DMD%iSl7|!vb>>ZKkRWpE?Mzl)TJlD>wl|0E)TORxY_>;v(85Xy|Bj_f zsixJLMBGa*d*IqAv9c4{#uFgmL%6ZaJ~ZYQN&#Y)N~FOa{qJoxMa{^oRS%ZP6<8wg zVH4$R1jx*=_0f{o^sad;qH5(M1qj^Z2DNlvu`^!_5^K&Xa<&B&9V3`;%3B8n(kv^o zTKVekoRC3^=-e`S)o=+WVErwGkp;1DZB3pHdC zavBr;4nfYv_);Kv>+%N~1B=homXn2PN*{o$n-sN==?k_`$*8)116oDJHi*+x_&!As z0F?@6iIw|oq;tUJWLFqj?&0@*>rjkQ6jM{Nv*thUR1iAuE2j83J;^~o|9x@bi^`qbJZ3C#81UXU~38Nu!<*p0XA9StxaJhn3-zPKN9{+xC5_b29mZy!Tz8*gN z1g2=u6Gi`cJM?GLQW5$w%YY-fk>UM!KTzWZ-i>-c^)?^^oVp_h$$cO6er}jPSu?4? z&<6}4KzScS)VkK0BeSExPJfqs`e08v8`Yn<>pPbXo6qDZsaTxX$xR}Re$aR3+ee7_ zP&FGQr%R;9KE@`8vlu=s-}5!9K;5ImhTLo(7(3a)G#`LXi8ef5*AnactzG z{20n^-)(gyXdmNT>|9g1gV{I3Mxw8ou=oqU76Dtaus(Mw!XxG2()r5tB{^pkGL&3@ z>pHo4OtIBB`H2!#8{#W0Yb3{DNDj(;OyoxIlcfdpnDrAyWrv~|EQRU@@P;)HxyVk+ z=C$&VY7X*L9$NI7|5A4pKyEitVXN;cl=X`)ZQzq5H`vm$zj!~!Vt%#Djyu*AYHg$> z;J-L}fzSi2GE_as0Zavb_C$Y?S$D?_gaq#jGxbE}v<;E46tpT#3t#D|_i7G*c8Ku# zsB4)KStK0d_uG1fR*&5MTk0!QQ)NOS9Sm4VBO9zL_>Vr@%Ce%y`2?b8P`5~WYcw?5 zMsu+J2ZW71fb}0|Q=OLCGleor_(O549@2ZNOJKzZu~zU9CtB)Z80onO!EV^N$7^NA zgQKero2}`c*?cquI2MQ6?d|Bnnx-Q!IyoL;}CM%D5V2aPK&bCdw zb-8fmZM2CS@ttItj}Qe*zO=hS%e}2_)98s=K%|abLL$Vf6}}D7Z6Hv?|2V;~C@Tn{ z#RRSZSF9*v@-M0}&);7t#^(~-^tz~yml1x7hQ88oe?K^QA%5Wb1*~g+`V8lI77J7j z;3S>1YGYwZ-=>98#qnpB)LLlu`im%P^`+{`i*l+oxOH|VEy=CLx)K^Ij(klx^2u%2 z;!u9c&nCQ>AWK`?vu?x3twz2P|KSEPn1rh};&byjrm0J(qGqgT!cO1Q4e7Xs)xWfE|`j($`oKRVBJ!;fD1aNoabaAN$IPYInveDgu2ojZ{btA@Ece-;Qkb9T=yNsrO;%`gC-X)VMCO*A9 zxJY{X{&Xg{@p&?KY;abgv)1hyx061tH*%DinXtCZIMe6LIv&#>jqY7K(^sw~5Q{a8|QRRx_UjnlQeZA=gx8{g?IG-Krnl ziq1uo9^4ccs3pZ+WUBSMZY9N{%z<;!3U_&PX1c+sHPQhz8ses5@KOAG&4B^^#E<-j zos1X$iIKcjx|eFb6r7F^r7xty0VC-MyZ{rwsdK#G9i4y=&DS99GV2c;N<@j?hmG4% zD2aD>w?@A0qAoXB`te<*Dton;1l#W&m)@$ zwm?=|dpozN$X4LpkNfxW&`)vgv|B*hGM`^zPD+bQwDx(b1ECqOk?q3jmydNRcgHJc z40a0iL`WQ-{smU9I1g|cv!c+5{{2SijEE#16Vb%4qFea($L8r?N5c(=dwmA-K-$>S z##L_=JBjlH(yk0f9cAqBbnYzS?Pk z&vH6%`{2v!0>1=V-sX}i-*F)DbBX%-am6waSs!kC;RSXuG|Sp#`^`6$>w>TvJFz8A zm>$Wf4sF6nH8s=j6CFtMG{q8kPMFi``EB#pSU`c zmYJOjt(!mV7Ekfv3*wKw>kR8d(WA{%AXF*jKnhjJ&g9^9 zV%qv$)iLIzKH#1f03y z7+HgJAODX=W6Qzjm;1K7QMO9w%=2D;$4;Z3;Z~F2YA0-P+46)if=b?jI0|e$o_Gc= z%-$*FC1R18!Fza(X4dn)n^ERHIfT1EYJVerPxRXd%@W704bP9{ zj^mRk!G3zSn13jaraPMQnXJIkgzS^x=b&H%X%!1RNU?URt5qB#M6>6&rjN%;fQ`xo zJwvOD<+%m1?rrmXFsl5NmG4v`(3h;^|91!28-f@jvs>SRb4KCSQH+yTf$|{>9^9}T$5c!wnRn~g$h7EW_rzp55)bRoZDs6 zE<9|1p=*8H4I*fP4D$M&)hMmAfZ93@3C!IaUpS-@JrO%0wC`s;+6*rp?nkLI(b5~S zz|j)4#R{UhvI#^}4~aRYay$No*yLxjzhOo-4j_X65-IIQ2FbP;Ds2T<=@!Ja@?@=X zdqb|+{jU9+b*{}fCY#_7=aIOX`p zSpqOlUJH#%EZ1JrfoX1kK8rxY3vIA->>y?Om?1@ZomR zCMJEmOX}zXe&lqIiO)w%CUMg?mCE>jC-BLSo&Fnid_jU3We1+YhHZ$Z!l;AFlbLJ= z>_!FZLR2$-KdS5Q%Sk?M5s0I^MWQD8of%BQQRcX{)yK2X69^p8&5h&6s6XglqP2WL z&)U9MeEz{%BLh3XRHQ!Zmmo9IGEZvW6Dvoue1ARvI0qiuDCDQO!f&3%D$?aJ=di9^ zzaA-w!B5nroBi&-VX0Ixykq@Ad2ZN`v&oE@>o|+;EKq*-MKNwc5iO5EjgnKMrkR6~ zZff@{E|ra1TJNU#yAA>8ID}Fn>bBC%znzsobk|s~{~(-LlqxD^*q_6)hL(qO{sYfB zjm|<%ryYVSqSC?Na;H^#vt;+r%EPaWw>jK?^Ya`(ya!!fx7#D@1bSq^@hO#g99$6c z!7wQe*dJmsI~>%`q;e3OpGWX-@>hkR;*nX72wuoXeE1i89*0!KCNvcq@doKJNcpim zF1tkeG{e>b_?(Q%4`0@?HeuAgE3w68h=!!dQM&tFxJ^72BW%SOot49uMd&UN7P9Vf z4_a#TfD=Zlo;8DQ6DPsN?k=NoR8defotUR_f&E56OImW|zVwNgNNj)hL82PcjBdUl zl{LGeubTBah%9wyL;!hi5%f;_no+Pee&oWTBn|+E75j%KvrLHggx(B14N^opn-qF3 z4HTpHMa!+D{_mGCny82iwMHH;z8w4>ARKb>!1{=9Q!qx~#iI(jF=P8o6Bq%B&tDmk zI-iojianZ+i6wxi%_TLGr}gqDsxWW|6u`AW@=p`q-=tl}kH{KTo;T|VuVCnf{5&t~ z7^Zc|B4>T=t*>ktY^0M&pl(b&BU(=dRy0;V2fgs6;Mt%@yO4?e;0Z|-zx;e>_{d_@ zcg`%Er5537?+9bg80;VC7Y+hq&30Kj`N32ri?&qnL^w)QclR3`o`R!APJEHv#rF4{ zYZ2VAQRnuot5}t+QS_YiZ%7tJLMw{iP6(9}K9p~_iVlCZ2<-dY^MDSigC`#`pD8SS z;xVu(`+*kGL+fCuI~V96sjf9<6H+I!q7@Vfw|7^$2XskQ7|U{zlRSe9#JTlqY~jJ2 zRa&?iee)GGArQW?YFrAq8V7Mix>h9^;k|6yF zn|=$Xh0v4ev3CyVoRrtwW+TnAxB?x5Ba5s0*0@Hky!Gfz=81-cZhrCta;T}(Wxl!9 zEKiap0|bY!sD*g4QR$iJ#88h-*e$|xP_n0q5xbh&19MO?5(x{+z1oLgWD6H;PR+L# z*x9CC-uck)6Z*aNHFbC~By$&=fiS~6j+kJkCil)pCBBL17l)zFKW$s_#aM4ALC?$e(>N67 zxyG`=6`adADT-(9Ngq?$!pG%7CRYB9BC`txPh}&D%F3&OQDXHOyl%yoSDMG!u$T~7 zYYQu;@7r9@$+K!{nW~f9Ts%oX7@XZV!0g*UVVP=c8Krgaq;o)@a2$(64L6hjlYOWkg8Iv_u zUgI=tqRZeboOpp5v+RucPrZ3e!lJjW*BC z;RA_Ag^FJq>8+qa5l+m|b*W4F!28N75^0+${bW9S_iTBkM>+VK66eH|maYad_z^Eo ztI~MUw7W=pCebW@*$-1kigVES=fx?FGl^KbJsw{R|Od+{Qi3B zb4g3B+UH{9Q=f^SA&f-BH<_)Uz3^%kWDtZSd&P0|Z{K2;=OrS}z?(_~gGy3@(m?%Q z{{K#{?L6MgKMdytKeB@~_fn$<$6QH8oXW-mWDCoedt?gl_!INI;2Q^@UAUU_x!vwE_45j^)b~+SaLH}{nAY`g1 zHCoM|3o&TqDw{x_{>7lcUIdhPA$5F=^>CJHkwHw1HrtY34D&Jg3vM*+g$G3%!3c* z&bIT;Hj^GGb1Y_><^P+Oh(f~4Hl&zYt%tfH%b@SJFG#4r3PR@AuyviCtIATj8LV{8 zy}iYG0oB**QXWOZrKV?CH#H8UCHOUq5~K)9SjFQax^u4&_w(FA^f_8yd<= zr1)m}V2E8Td5*DUv^PG&;MGmzfhn=d1i9H!mC~@1P8n0jwRV!cy29_$wpTxHUWAKO zYuMmuVT^K@1aTb)imzzRV4*d9%kz_wmjCHD7!PB6j#3Q^;D&8p(+a zbwePW=j3$|Cy*bAZWaUFIsZ?)$(DFy<`F^;0cX09u(ll7HywG0LMbi@49lECn<7O9 zVJt2G^s>^A_T=nW=D17;QC8D5Uwi_eOFlsCz?{}lCZ?K*u!Npf))X-R2P$L7RTEiZY$EaU74qm6Kmm?z z8PFMut$<#TcxE^2pH$FW&4~A!7-Wg+{imOhj$bQm_^@6ty#LAkT)?i}qXZCxr zk9ew^gBdOn394*d!6ZpNH-PRQDR%KCLsqv4mR@Y;T42Gh*C zzQth9*~NDX(2lsD>hgG%bCDh)HvtrYD1gfig20sz($8*nU-~Cw%gTR$Y!&oOW2vHN zv}1PvInxn#r=eNDC@TvM1H2Q)|961YH~x*6<2aIF=J{eULRzJ%POFu!tefC^+f6r% zWPh$;nlJu3SF`n`7XSNyV)7?t)+*LSTXXxB1tkEH{hhAl=4ZemCH3~%V}}i@=J{yy zC#-<9Ru1iUvt%k_8C& zKTO&ZKR#a0Hkz6IUjBDBa0iexHck=f#PtYLsPcOK1uX@xhU^%6%J^VePS@n1nsb~A zb*9C}&|~*7XAO$Sk&05>+(`VVSrLBMB|>KEAr+C4g{Absi|cSm&ONt`4FlNs-|S`4@;)i4Qv2f67^yXQJlF z^p^F;za)KO3weGONKW^n)jm-CDE)UJ@wFsnJ3|yZBl!2PAkN)e=~=+riaUk4J&p26 zp!(;j0SAd|?x70s+vA60o;y%jb68Fz8oofRR197g$cFRMzf8Z)g4W8@Tj9^LCGA~w zYGR&UFF(glYWzy~9W#U$g9O2mz_yGT%{;d*Ludm4S9!BL5594(F`!4J_RtcwKV%|> z=^0<7Dp@(B19P3_5_FYU9t&>2@wiZ^xj*U6WipB-4Lc*$cLy0+Zu8^uP6evB;QLnx z)d^S=$p{8{QNFw);nR)>7R{f2)T_U*z_IJG>qvI&(T${`+xeth3h$KgT9P;;I_p6d zDY<=^m}y3Nr=*Af2$V|4F0CIuR)nwx)B>sudUt}GR+K?7G+*IHuIXd;G3kA?zXc_0 z{6Uj^vGuInFz9Rg1R!xH0~i&vd*G-Q<~N)m34wIn*hCP${X>`&G~9|}%5i&+vAlZd zS(vZ{r80ODLxfPby2(%uU&%=i<(LG3WItl;z@-2>Bx`bG18G1=anbW472nK;+bSfm z7RE*QL@)oX$!)RY08jZnM^9Nt=VRkd-PQNpZ2t~u9DOF@IbYz#zrN+(^1%i(RGyAx z$QZO;{Hm)##WDeT3x(ObqJW%L%ro0AOyZW|nh1!?>>XogoBvrbf?7+!^}0a)d6dFY zA`pL6UGW$&c^t(i>;A;d6Hv@vH@=9@*c}01^f9X))Xtcb_PFU-vlbE4An@~y#bAw| z7da8$0-fVfJlprRMb(l75SgvD&U%HWG2IBRzL%XJ=#mg+G$8c#8w4dZs7=U}S2|(7 z2mK7+1-`3go~1y{`3CoG;DDW-Yu|7FaU|vq=KUK;2Xf+dJU7D&?jEDGJ7S zJ3P8#s|rZl3E#;+Tr~>Jlk3bNKSEucN7I<%A<440L>r=PI<14oRhq>V!p6fKCY2eC zt)HS+q83{ZWes`;FSev_IknBcdsvD%{+tkee6DNB+bc^$9AXt4iZh$_SP&8Tyc?(+ok>yMHkW==@^lSd9g8oLuPNna#5QXB zlq;6e`vH>a)!hkxfBVmL`awR@_*6|P((98W@Ed_xj3Fi)aW3~9@CSf90ExXAJ9z?_ zdx2BI!KF5znjb&C&Yiv}TZIyNKW1oTQeR7gyM9_!-(wn7_cV~T9B1jk+Xq*os()=l z^jfJ?K{2!o7krAvG^L;b6*PwnBO2?|2eKAhubH5uW~4u0FA4I@78#1^8LRQK8n zd7_}878cq7GXpn)-RnQ`R5eKOt!ohSeUK@R{!XSDM{rXT8U>`=-yLyq{o9bf(oKmkNl-`=ca_WFRk1>_EZz6wrG&c&`E z6(I5ABfMymN8FiYvk;8GT79%P1{KGdNV#Oq?E6gTI{uvQt3#AlfT(TgTYN=^o&T~t zs<{|Qd5Tw<&F{B#Kp>vcY)@5F0H8_aI*uze*nmWOlO2{8VGf3BXS1> z0b!a5=M|Q2T66tX_5!GD_GdhI#p$ z)9+c|AEJG6_#m~Dr#CzOiSO(Ve~7iz03?|KI5#wilGSmt<=eqs;Kqtt2^XS(=F!nr z>dU2$0d4EgtZ0me3@>4g`Od73mis3H^@I_^@iAyuLaw$4=7)dnV$wdve#*K*?BB_U zHu4{BACdf;BBD04DbyQS{+P8AIXM&#T0#OE7=}#?pOOX>Q%ADsXMd>4!vE#Cs-_#{ z(l|x&VC&%JxT0>i84V2r!TQi$IK_*k_Qo5w;`dGQpG@35odSRRsqT^SK2>m90hYm^ z)Egc!p(CKSNQ>-YWX)n4!z(4Ina^A@aza!joWKR8U*2L$$gHX&&eLobtsm%@it%ky z5>X=%Z79A?8%n+?3ldJRi`~&2If>{ZsDe8ZFSW+%rH~eQCLwDN9?{E;S2prTQDlF4 z)}@x)T$_g&Yx2dP!{VWztRCZDoxpq6cv!|zH7TU&8>}TbNkMxsRyvNkI(bG1$cl-} zw0pBm0>SWbH~JhzepaSmJ2_Ez`lf~|C8AJJ=KKYuWZ_YX#Uo}Wy%T3X1e^Ntm;1ZA zD3~(!nDC85Su-G^t(g13>+rxuoNB)rH`?NFzhoU--}T#x;>P9maeu>mO-uc>;!CP) zfT`(N(=P(X=Nj z(L3)l|CFk3w5C(YyN0!&8~}c<{WH13k_nVRxQ&WF7@6d87`stvkW9>Vg=}@qu)8PO zP=@tPI2Oc?KL1jY8v-wqTX6-f_Nw$9;L zdS*StJzIuw{_x0Wtia0DmWsAPGAh*mnsoE<2$+X}Aw&;3eN%0~N?2+gzQceO+VE8E zagGorC;w;s9L=?mUb9i2>g579^Ea!BvyB^TT%>oU^EGW1OP~i@3$m44XWQxy_+)u$V=Y)tuLT-h14ygf$+dshkc> z93MBj}`40lyTpE)!XL9^#FCIMD-}c}`&_r$z@WCZ!BK9Ezm7qt$0(_%E%PSWn z3t4Px^Z$4{>!>KZ_v_OQQqs*xgEUBYHw-P^jf8Y}Nq3htNP|d8he#=gV@-m~Lc*_geyjeWTY_;I^(tKM93AwsE7^R1XX-`P!rzU z(1sFX>O?LG9a^5OqV_F^!74uHJSL2?9oPNKu zFD$o_j`@vW?90Nz-3Iq_%yrnG?W~tuqv?f7oQ5HhPlXojs5E3xOR_hxLGSK>&%!~9 zjXs?_?3DwQDOS9ZzF13ho4@L1xQrFXslwV@YO0Q_Ty!(tC=4dqKu2)VOhMIaG4a;`ig^+GIeD_{5uTFm0) zpM4KCauo7Alu7y0%q*Y86F>wC09;Ir$a9uXZ+@)&bHDTpl4UAV7A2C!Oi!!(Q}$w} zoS1c9M5 zaJ@zKyv(pW$^jK>(Yusx4undVco~oKsG{IHkAmOM{k~`?6AYB&k-x zJ7QXtR=EF4Hy34hi0O`zRaHK=Ni7cU7Z~kKlLQyGdz*oy(q5yQ&FU?GWrND2reB7t zutGDSZPXDo8n@7tS*i5pSS8(}09u-aDsk|x>@PEcxBLaT;1rWaqVcLfIXf}erL4E| z`#Wty6@xdw*w9s|#$mUNIqC&}XYl`%tfJGB)$L#)*`z7Sgl65{xld+;+8SwZQnq%Z!f6KJ%V;F6oZR%_YN)F!pWq_71c zEROR_#kw0Z%hObrMETk4sZ; zQ(MYQIBjVZEO~}A7Q3Bk**;!1V_=(Hn1KZtV1bwFYFv0S962I2<;^~deKbXma#APV z=b1e(QOtXk(jpuPEf^HT*H8<^+Y>g;7|<`LjaZ;>+$Gy`xKQm{!a+UcQHs`Q{%JMR zY`K#Dre#~Q6**o64dzKY$QZ8)XQ%ce{&gb$Q13e)R_m9_u-*Z>!m{oG|l|>Ib zs~y|pQiGBxp5P!OHd1Y#@oiQi-Tx%T`A2`XwA?J!mJ8|QYkfZlK7-GI;9{6N=%CR> zVzrR^0IIYm4vjx0X(7Y0St)ruYdT`(5nRyp2mtD67nwC}0cxHu+q6z*W1l#3cQd`! zs;>%Jj(ZB&WAp{D@R)e=l0PWGCo zmaGr~@ETBjgYH~pyqG)Y(UcVVw0;mZjL$Yhjn>TnyXsscDnhwgD>M6)q*f>OiHfn@u2u_=tG-Vp9SmN%(D=0nG0!-59cNNW!v@SyH`c| zS|HVK)Lofa2V{RVS!U+<2EHj!F>y56xM~s!k0C405^gi0;n|&A=<4Po11YAv@cq>< z!EsVyB^4G`Hp$e%vC|6W&ykF5L1q`Y3UUwA!*V7V+PaD!VSR!Ao|C9Ib$^AKZ%8Pv zVTn0-EIqx6FRWUO%DnkIQt6h`&*5Q{S-zWXx~~a`DRA!3cG|)OGfVI2XN3FYb&OOoxr1|dns`J99BuoluZ1GVF{VPF1b8cZP;LwHZCc<%*ig>RMzlG3rF^ zI}`8)n;Pie;u$?h*Hft@WJOR6fq8zd3fA>_u?J@+0-qwVEj=dwxbK?b_8h?kkVU5BalEe>N-|!NMRgau6Qc+XezpY+Z=aYTKC6!Yb z=RM(%9;*u+mMZt4-}odjt|=k(w=lnx)W34s$TJpyw_wC)#SBfFthW z>C>Q}7cg>1M~f#$Qrb_P^Ple9ve+QSjIA{)Cjb~-ug-zuy)J?3^N{xFA=pLzp@ zDrrk&#rXfEk(Y2Xb4q$@zMjm?XqK#WsGv3i+okrRjXbf7G{@NsU+aMhcY0NSerzgh z#>54MOsMb8`phrH4T9rE5~GXL3Y zW7RsG8JmTjx zhwhADsz#Nju&9tMafpx?^w#2eH}|CqYf(qxh^v;2>j!GhK*?QsQIONF2H+Tw5eu5Lo*X}E~a0gck9mIt`ty8+5Zht<#e4#QB+(B&d4YOWY$XO79TXu$f z*j(t3vO24TC@(r$cqb zir>JMQ%`ObU!Q8K)M-asxUrD23j?$ffGn0!>pE0*lA-8qd&A}K5OOW=+?e_0?Ng^W z5-#oz$>p&bxk@g}*@g%vvaHI&f2}npSHXtj+B_@dK9k_CJbA(B@-eORcs74*SUyLI zagXBJS;G^=Y>-#-hN>ekRTba0iD6mvB(Ql?0&ulj6L^w~GD_&zL>@^{dT8*W58R{G42FF=K2&!NCI@b^ve>R~Ng{Zk~Cc zP0`i-M$}aSN$hYsH-p6oyk&WsI#ce(ycE{FIkIE;ui<3~)z!*(dso)hLof1_dtKyG z%O!rGR4b<}rdiWzy?G*4Oa+gN9S(968&0w&^9vhYm%Tp-uw4QWCJhuWigbTjS3<0d zW`W^Ulyp_*(xBlN{~cyWiAaZ!=&!b5(jV))qLfUvZ@*!~f$o z%sEN3XZKytt$pIf!YK(H*!iU1%%9|?oD!HtcXESX$uW(g?;$?5XHwYbPL|9n86?s> zew1v-{BYRaAomGa)@UbVSgn9_Qc|WadtjsUEljZwZ4F2Q+c-$&EEq^$9W;s*{4Kn2Y+3#QsfGs9AIn zTB)7tab=9v(c0xVz77%~x)WyiakhAGtNc|bPz(1~2ND6P69#%_b zaLOcoEYVE-e$_2nH^Kf+S^Q;-0XHYbL}nv(RKsPbiYY^(d?mywP+s0kk|8$r%O8kH zIHHx@IK(_-D3@6`t?9WJmw>8b=r#NV!SO0ukgkw1=I}7f)x<9-VJ9v$&K^U`uZ8 z?PrbOfomCVVK7Mx5x)U=Pp51n*UgpjJbJ3=92^I~;eSyKC3B@vSI zWj>=2u(MA3o`g0nQFI(pxpADJS+e4&6wfrzd)@)b^*7gg0>2u5b$LSg70{JF6$mc) zf-1`7d{3+AR09MiZO7pUm;$#yAVvY595SN(p@N@Ya7`#hhr`hemjDI#%y#)RUW{Im ztQH4gT{gr8rE^;#4cUh`3rf`)l>SUwckI4b9>bU%t|-?lSfHFZ>2W(SK4!_SR_1ZA z|HuyojOCL2)r}p<{Lmksu_WwDyQjgPI2?6ercRY`hEM4wQqN@?-P`mLv=j_TqWaFkAXK094BXWBW&(v4pJ)4Oq!9l?M3GK@rI?)U?sj0n z;yG2hY2fTRv0ns-CJ+plf)ZW308Y1;?I&b(N0Qk^z2)NXcz+^qg>uS-ymY~S)-5YJ zJqHd|fba5N29tR8YMIWFgO26hi>98u@ zwNGOr`hljJw82z1a7XW62uml-;e|(KqyJ8|+j^AJfz;mdDCn2q+Rwhc`7^0_y!?&- z@ptg*z}0%NXuDT5DVJ6EHc%*Y`?KR~SZEX9yep=Yo@wv?79&`8)Vu+FkG%M>kZh6< z7oB3NN;W}u-J#B1Duig)dxS7jTZeh5kM~^Ae6ovso^akTVhVRc7z6s=aG<<|?3@x8nbZS>4qQri?SP*`^H) zlX7NDOXMUCa5{e2SkUwdi~&hVL&# zd!;nvD5=i_>s)0~9l8xKMfBN4j6P$(!?2Dfm z8r2)u*>w_)3AI$d+{IZLC3ykN0AsgLLd}&WM1xF~0BqLwMA`@dd<`uf~D@{OePN?(XDShaa^Bm&B~2qMgCHaJ7RfMt&%#s z!6u?|b7*$X+aEFS-TbGX>>4);fs)vijMfC*@{}uZrTMm%;%+7v8RKsF2NtBn%vuQa z8=$#pEL-3jXDgy~iO!vs%wG7Z0N8;%kPwtDon5AXxR9R z+9Bck6mE2!EeY;stzYi$spbpu^~xbuLl_FWVVbzLx_)Jtsm$r`m%7*u!{9y->ggto zqp!6)w_Lq&k8s+&?QF7#sJO{aJb$BG?n>As7%nDhOsV~cwJb_#kq8g%l_Wvy7X^Bx zI;j@E#rD^TU7^+SGVgb z%m+8klqr(P!J``tE(ri2Sj|l6Y=I?6+Q$?lj8_%4vWy95HLn3&(HYXb zT#o_n*a>BWO_urNgn!&Mg-va-$9OH=&=r4$IS6{r^l@zaE3I0_kA}E53#z)669|+J zI`WrItZ}@dPm1jVbT({v19mXBuE4?3`&8}&y-MxuqChm)i60N=G}I6p=DL|P3)VY{ zNkRhZ5ZDY#q`RaR0}u%>p4~@e5epLlb@gu&=bAcu?XP%J-|?`8u>u`aNdm2P_$s@N zaxAG|HN-LVpX<8mr$RO4l&db4l?fVwDU`!ZF15=r&ux9B6#ni~jR-`+m&wA{~3PE)p0B2ckji=;i^-b>b8o-XSKaW0P#*$Dq}J+ zhoqWzV?dMCiui$p@Az5G7;D)_HY5v9v(#+K<{$XMnI_gY3v4f)6@TPV&`*EA-_YxE zJyi%V8;O;USb3~ny!Wk|o^!8w`J|j8;BH$PI-G>4#^Pkg3b;7ru#(Tmx0kolfLNpP zvC8#|Z8e$oLU^y#hP(-yDQ)ivp-O zQTq&wkbC!-w)sGVj=UP{sjv9;bHM2^Ir(GZx@UXcd;9$;64vD)`p6JFh;FQFK7sP< zJ-U66Qp6ujG@5EhSo-3`?EC{+{|=lB`E|wh9dJ*~Aquu>0KpZ6$Iy@9QJI1SP}{&# zo%6P1(ZvO|tpx4x+yfWhutHY5@2LWw{%5@{6rCf!$Sua1X zW?}RI2+Av(2DFc4e8|tF;DSU_R_Rn$a#ro^oGfrhDx2+-7o+oKYE+I)Iz2hg*K+Xi zFq$X#b$4pk+fSPDM1$1<{k)=|>08xEX#&Z7+j;=ic{!@A?oWuV@1Alhf**JD@6dV= z)Dux=tY9~Bs;fC6_w2o8l$;mI&Z|3o=3F|B;%m3qB<%=dy4iAJQElEz^twS>MP$;T;lw1o>Eut^iRn~3PaJ07Ia46)sWKu%PRS{6&YWwpZ zt=O}cWPZ~GhveBYBkI4p*mjKhS(bj@uw~qPnAy9gwRxx&+*`muNIJY4{m{w^BW%zU zit_FmuIQTQp8B0&!+dJ@^L_Vv zHv)g?mqw?NQLqe^X$#JU|Gbv0kQaemCT&S>u@9wnggZDzzz{Zy8!$d-6F5Aa(2u&; zCq}4pLb0&qy<09q8LZxhxX%$djo?%bIJi~)D^s}yGVe1@o zDDBDReVU++*i*tB?*E~n3D#`~i4;Ml<%r>^n~(qQr-{8W{$5}|v=G%+%D+N$*U1@* zN*w8Ee;Xz8`%Fb|zQ1a{ljb08FV}BE{@IaKKy1dZOor+Y?W|P4D;8t^44Rvu62NLE zV3ki2$vSSqXQl11zjYjeo`Vg|8Ka_Q?wdGk-FXPm3ay$SXu=2+Xh_IZaFa?cImLw+ zX{_)v?$PIu4y;U3nM97WhR%F8*H$K9!jQ(X;~xGzuAdXs?H6Ku+v-$Nrt&%$k$XPX z*Ez2expH+F`-~0sQ{0-mw632lLCNs)(snbgH zb#~<{#OFK_7s^Pfkp$cNOBARIW97beuz`G9MqcG^f?=DCdCL6YO(X|gM($LqKM?A# zPlvyJxJ$zWsCp-9(fiTOOD!Ui(@M?v*o19of(kL^X{QM(-lfsck}1lk{!y1@SJVu6 zXi}r1GLm|w+=-}FST;Xs&fgZ=`v^|zH;mzXqQBbYelz^rB3JYbK7FL3-DXjx0{%Df zobhTtXXP^rXL_(?Ro?4`9}YrW`x3oLB?}We>dx<7OP@9W+AnO-VuB5=(#0 z?R0g6ms&pz5XoYr+)_+;=MxyN^WI@sADQ)0qT*jTjnW<&cJ?*<@u?S8X~(LuA#!QE zi`Z;LQN8t5S9nvfXE9UNy7n@MpX&WhH_~_mSpUQ52Qs5X+Opca4z@KTPr;Hf+$ z|6#QWuf9Yuo1Rw=tz=N0EgpjQK|J8_d!@>L?#OEp5j9?kDF^iBC#Y{D>JYw>)r$xT z0=yf?=SKjp0z^jo156tcW%mJu(%org0EVyEt?4c5=FTWrGjUX7(`%GYb7=4j>=SOC zW7*Cdx@)R&oUt>>8AcTSqcX+6aH>SF&JkCoTKex8T<}!HYtwNBlQ6G)zZr%QYe5JJ^pDLNX?klb9qHjY1OrH)~Lz-$$ zv%Zo2Fv({9wS43m755WP$ECj@(m2!0*t*!-%r6mMk-Jil{(1Y|<_;QGS{I9}3#n-B z;YaJoe8VbxUmEm-gvWkK8%#R2xeI?w!mU9-9L~J{`@z7SY$xIw;k-k|(fr$YF2$cp z+K26cTk*X#RD*v|gXkiIMe8*K>n=)kGqI$5b^$sXk#hD<=n5$)A|J-}ifg`wrndH= zENgw8YE5V7PDkM=9OUeWV`=sT3*e>)CkDxQs&jLk#834ELH<3%Z?*!;(r+WKZ;2I$ z31fRk>;t^iD@08J49`jKC~1Fuw91Rf>hSqk_boLK~?b#gH2{ilemrEYS{PqRURN{}M zKscm7pHyysB7I=jXTF6^xTZ|yL+ezmhr*wi%Kj^3y09{B-YK$pq6-%>*Od?|g(|N= zJ}aKaJGvXOQ3)FrDEg=NM2(&G%JDBOQqGYq{si8HoeoN4VJ1#y<> zP1!w5cI1qgmRWeu&026?x$Nkgb|)^`xqQ3(^yWg`+|5kkuv{m12RMATz`1u2WZ-sm zKlfmokqty(HL4@pwUSeybg{aHAzpzWC1iw^>Y{}3sS4m&-F~R?Pq`AG(fjG|OEszE zl)FB_GCyGM^q2W*_OF)iiXwG+>xuQ^_uCbVW0`43h?g$QFM~fOyT1MxZj_*aZX5i$ zT)S=SYUbQTIx66HR?hneB;GWk%$#b)RUS)!XV|%cp9SA~*otV!Ba3f@N)ivzS)cqe zk&o3@9ywm$DjH8$e!ZuSe}{O?auuwz9(TOLpijHD=3fP)0ew3>t=%`}CvMP9CC9Mr z)xSpN4yx5)S`#jFu|D!Aq!TaQ%Vwo(wN{eU-Q}{})FQ&OFsUa(+GvAkkPHjWwS8_xD}Z z_S6|D_%CoI4E81xJQL?IlNSeVpggtus&5p2C}n_%fLwe(-@t|C3>PW|C(OBx*&N8RjAC$t~ zJ^fFIO%3jwEOH&)E8vm^vrm=RW132|GvN!?uafcv-*U54>3_+o`zKIa9BQswaDbc@ zNe790J_pmcF_z(46hr)?%6lwwN5u1X*%}5D%4TW^`lDlYRb@!ECeJf$Q$?7qQn|(Y z7yNiPRG{n1+S1(Y0<*2OYOm_dJLZ`ev`-*zso%9LrQe^fEz!)k`raucjHb^sjWT+f z_q%Pz8%F}^LlvU+0A3_m3NXU61kf~vEXtuOh$Oi_F*R4(lPGLyZi`HGQo7}I{^C}| z=oV|kB z*O7hph0NoW|Ma)tX{+gbw3=-|J-B`S+sn)^gJyPXMq+MmeC@=fPuL3S9sm)YM;FDi z-IxnDaW&))`5bl@|B@X4G)rh* zw-=CCw~z}6v4}eo^-igD&WA7XX!c1XF7@jr0#)86P&N+@T}|W)SDtg~%QNUv?J{y0 zD1vTR9Od_IIZA~@8&E+Lup-Sl+cS{7wCctx#2nTv=v$t#{&;k*-wg8cM5GQ_3qN^F zP(JV7KvMml@dY~338T?)wTa4vLcO&(L<%Webv7<%XQ`4o%})TGr<-S0qKEQS)czao zLj2=R&`oKKBCX?HWwNQmXr}~gJb0AcloPp{bY|4ax^kNbN?3lcgEZbAs(AlZuvpSV z4Hx`^Row`r@yUJ7G#{=)JsS@L*~cKr4Wg%mE>}kApeIw1B61Tz;7yn$VoJcyc*j!Q;V8)$>y?1 z--ZzV4q(IpX5-RRpV=gm_6Ha|r!SiFO&ra1txAVl8WH)HN!Bf2OL$_ywA0ToMPMqf zH-~Pnl^oS<_VxJ)%nF_FPh&#R!oVZi$b;Nm#KhG&oDCr)c%|jDsUlXo@ z<)0XkNuyG=xGO{CR24rDt)4gcu&e&H3~()1%^n*JP97m!vMl89L$8W0>T19dMJv@mI zrTDyq6fI!neZzriRce^$f%ChLd>A{QEDBLe0ReqQIq%ajP?s!yP0sFbd$}d3B5F7X zY^YY%x*Df{TRTo752XlJmrNl{`~8T@aw1rK&=Vi5h(r&IZTmSp0Iuc^YIe2;k@ElQeZ5(_4ICg#g=^W6>)^|n1LBF zJuxk@3e*{u`G+VCblICY`aQsZF0cu?zdQD7b%W7&y^Q9=YI4(8S9q5>5jUvuxLPh# zyvRB3LrqD!Se@QZl80BTR43AK`L72)dt&k_1_d2eTpUwzuX}C$*Kg2ujdsnoR$B}* znkw>nU+^Vn!e=yat#*zR$xn9?0TZ&e^*c_S{XCmI{rRE0W*_T(B~6Kx_x)FVw3ELZ z=;({`gQq>;uc@E=$NhOp%nB>|u<(3`J5O^qBlTQ_K0cf4Hw=mlz9D@BoDZw^hcR~> zZk_L4pEFGzTeT*bNP_U&*3;vz2lx$lmj6ZhC|FhcYFa<|RBre)%tl%mn#FUBH{frl zY7}l~`Mb7?#{WUZlz5LeKNrqj!B`*k9w6k-jn;KG!j805UCj3w101rwU>m+F~K%@iZ-*bb8ku&9}!E@6R6d@ff} zuyUy-|5B+LRA$J89Fh>`ALhqSlhkY#DynR4)Y3Xe7P|{f$$oixn&ku}Nlll}0$!UR z3QlNzccS)Mktl^i!ZL5D-XqT(9WFe!YFTP7!OGAhfw5 zI)n?8q~If`U>QM!3x=n&_;2pY+dZLm#^3M?Sn@Fu4$|NfGx?8l-ly9f2s*~Ji45^6q9nw)BU?>Se+F}g&b5V6|Uz%6r5U3hNu&feGQ&=?smlV7PBr} zB^{=m9%Ss*?!c4QZ;$PT54R+174X!YLT7!d7STseA=HA#Qy{Cz$YnLq}ZJkX8l>yD5pyf zl(_s!g#yIsqk=Dg31`cFkNvaJp{-7^z^q$#Aou8iemNT^qnEqthZmCO+d!}I7TyCs z&j1t&+3pcq`SXAb7CO8B_izJ7jFXv5k#js_%VPAn7CezRfx-j-i%-C>W4n`XG z{CU4@@4<>|m^Zmiur>|zVOB;yuINkG^}-~vEXGJ~KikCze!6aFkL!Z)jhdG~ZBJxPFJBboHLrZS+5*hA zW}%#U{YB_>Vt5MFafI??c~TIASd%=14G@(++$_yoJPm{v?bj1Wh0=*?D|lPwk#%ey z?pr)0e}ko8g%qZCPN45{uqdX4mg(+)sL9LD(@E_Daj$)hO#*bt)N3K!aFi~3g7{In z=w$j=agvYt9#$n!iXm!KKt_eZmpKs^>HmPv(1mhL4S~P6w`4Fa?LVm=5EYG0L~VWI zI%|x(HZ8tsKIgvwq6zB&s0%L%Hm?Fe9S%`N0QA?J4ItK_)h|T-u052x67k=QlafTQ zlDWWn_@W~VrIHCaYZ~@Il$tq({mq7j8(KkI_4tyH*+g2PobThPY(=?KaNk?D*S~&5 z#lt`_;NuK|RYl2eZ%Ea<4}2bg>{~#IF`flQP7PuwzS)3Z4n_O)8VF!+dbpX*XgJ|A z$3?$pz;L<1=R{CQ23Q6+K*m7q3s8;RHs@YF^wMpf%_F3GKayW|!@jx^cT4b`&S>7R zqbS*-*@S~f2Yg-Zv$8aeTPTko{LXO|*#zOWuTMo^B-j z(B=Dp^M%G@1*z2|Y%paF_4c={a=%pE{9m>hh_0%tgs{vi(&}}dY$ZqlZ2`v)Tn&?i zu0wZW^gv16zKZn7u5-A-bE6>=LClO4Ze~xOJ0)l+J(I4|*$%()6hECaXdHU!Qcuk7 zoUyqJiswK-L9Ni5@NcY+vM~gDu4l)t{g)!Ij}VyH$1~2a?c}nto zT>1J?zIw$Y#UOs-XHp?LWLM9{GLR?9hBU3LzKgD;&V#T{{aYjn(+{2NH5CPdq`1V# zPw-|!wH}TOW1sDtA743N1KAuXZVO~?$tL+)3o~6~3mVZu#xDfb%#9MQAZZrC5(Ve( zccw|I6H{`(d=r8QK?r8}n>V*82^}nxlF`chCSQLi=zQhe%mfH0jN`oxIVceYM;vo2t}|dP)q0>7Z|gb*)&J4=XD}cpOUBSrbJLKvp?@y_*#-6~V4SFSkqAmP`)Ut(iy?iV z&kYUL_*^W{l<2H&#u`>JPamc3uWHEBwWrjvmwm8mQ#jB1>;!5rLr1#Y+9VVx21ef8-XOobtN*6I0| z#|*oPa?RWYD`>@f7dZ4!nbAw3Fd-~}u;%JPLJwuo@zYI_>GuB9gNq#v5W95J4CL{+ z9uc=3vcbFRS#X!1(pU&gx2Pr?<_Z_gRa0i9aX2Te;o1hTAFT5j2f$!6j=L16__u=p zubN7*_ z9D>|7?qM|i7Bv-(sS~E!YGIBs&IfQG!-&7Mg{znRLtQm+Sl;?3H38I1&^0FfYjztB z{X6YA6v-yx^(ZhO0?guwK7N^6b!T8wIKy(tJ}STt{XWC%VcSb^On8g`0-jk_n_D68Lt z&DWuMl;vY@3O<`sje=aGvB_e&+i_j=OyqGrlNIk2BpVzK7BN`qY{0J`X3Q%#rk59f zy(E-mR~qy!`a1O8cwmOc*Yw_Tm{mq`1k@FleLtxg;EAg{{Eb)f^r{KJ@Vk} z=NAh#(|XQ}@49E~%-KWX;~6=ge>(vG(4CseJZ>v;wGfeVj;d zS4&*y_->=qN1FMl0dqLwgVh$w6QI;46#VWZu}AUgc|e55`ha32wfU$dLrHMlW;eXw z*!~%NkOQjtVwJn;KgoDBK=m639XXI2oM-pac9xuC+d#p`^l03@jdT1}cJ=F2WHOO= z5hev>DT+Ve_3(h#b^{c+W%Gl~LdL9tE{UVFs(3$GjP zQTIDbh`*cH#b%7WxA7N_1*gMOccnJU2|uw{nd7IV8r!!MZyXQ54Dd<`@PowW6t*l| z$x_StaJ+MbruG?U0_Ho=CK(gAzP9fH-S1c@8uPf%VhpB!<&hCJp}4%k>7v3h;1KCP zFpyPxDJfWInYNgMgigWucKu}V+%U4{1u249AMO=~@@l3E--lr>u%kvbfx=CN#T;n9 z@FL>E_lMa|3tLY~JUCf8(p@n{@>npy?~Z2H>;pm+6Wl`g-q$kig)^dY~Ege4v< zyy%npyZNv8X9yXc6;YyDxC4y$uFzl|Q@1~9EBRy}fQzu<@9#^fL%g$})0j~|tXc|_ zohSS+kfHKY`nFfy8mWopa+DQ{t()LA;-j)sex$K&Wb67)#tzuSml(S7c)e;6&v`sl z>Xi*SAksCPtF2>^8iBePR(*A9at0ZE(8%G!=7_F1G8JnYR)DfZ_z6Q86USve;7+FR zA2?-a8rhGqFw^w<`aNt0qUcwUJ_X@Joh~jgKEoXwKwYMYXl1WtiK5`RZZIe@xWn~3 zA|*^;O5pL>LunNcun0?zEP^$?$zXvXuDFqcE!WK+8Xgagc zpEzI>5VOKkaWe(XcxDmK05;#~4=PQFxkc5t1QPK+ci`DHN%oHX!73{UX)k|Aq9~{t zgU(eo?_PnS7QbKuyBjl17YoP2 zf`Lz}Fw6J`>dpb7C5ce_8UVcAv~T3j(E4+g5Vs^}RnoZRgU&Mp-{kRvQ(I~9My&^_ ztk}dgHCF~Q);i{yzE^aN9bZ+F(L*9$3wW41JCiArff{fdFjo^9mB0((|Ik~Qz_~P6 z1R<%r{?uc5WX5z7n?_;0iV_5(1cz((b;A%_okhEsJ1>Gk3&<{Ob46fkuu=nm1+A_F(POauFx`0F6#K-8d<& zwwFC8sw@?v;!njoebN{7&2-fEMSFu1WUNYWz(oTo1$klTa-1<($y4krGJ@my;tm)X zfCD@%fVIMirV-%_Y6*6YofzyYSt@8bPl_`YF}?!spdCA$QZkxDw(}9z0c4bRDJ}k&0!93;eTUTC64MW&q3O}O8QmgbWFkwpso|B(&1Go5m(L-hBK#)hjguH&jgz zQR&arZ@MB&kgWBciA=ayZhij-ZtsIu8ffc*$6YQ%ik4KFQ*!WINl6G_1$d@|R+<-7 z5EYigjMsmX_0ckU$E;R(ev?8R5Hz-R`t3LGrSv-VYno{sEpnT|2KH!6J$NoQ7uM+x zm^6cxUrUm+fBaaY^y|+dr@o}kdb9$A2*i@`O}O!W6uly_SC9M}DvXl>+h9se523*W zfirz6LINXNX036TkPY8&2^A&A655aCd~dV%egiAVTy9`*Pi}p_iD7nUse?}dvT!j(CeX$YNqqjSyWx4s!ilAPM z1CC=e+!#!a?-Ps>+_|u1BHs+=h?ISe@MgX^^B{L&um^puw0EyXOJwz z{f(r1rT(X!$<#hU$WUo?{EH;k?nBl6S_`C=QW`91%2#lGVwQ(ug`PaKeksz3Ec1Zd zGIoQP?gAV&?Y+^q#F`QVz0)n1FdFdUggkwsqm^`0&IdnQrurI>HH~S_RsHndI#14a2 z4*GP?(sz?SBc?Xx)Y0@PZ2lkl%UaTg!GC$co!Yu9L+C3=1K>x6j;83EDKl3_BhfYQ43q)erh#b@F{<@KbFD#cBQo8Y3L#LHg0`lx$=|Dcs?n1YvP`0RfLQ zI*sYV!D)j$4(d-qq0Ej>nXe?YXhry246N zOMS|%;!gu3aLc#wH$QV#ktd?8efhsafZXh9{$k8*{pnnkj!lQ0kmbf%C+D{moS1Ds zE^|aZ&yGLRv*S4Sd=d1 zj|yg28rqmbuHqMkDXU`y|r-Z{Q*^7n>WFv)#eK)U|6p1nZNVv z?bWShX;>SjtWdMk=4j~jyD9fIslD+CdpRWpmM67>X+&GW74#u1$joOoI#t3u5R&9F zA1^|U4%vp|2mzUuZd_XWQ!vLuFVN5g*S03o%g^-oTQ|vuieXYdMBLeUqu*yAMlRmw z#+Y`$%gc6_ARY!Cs_zxOa=*peE63eB2Rcq)op=k)etLeiZeIKVvOTCeeLd@SgjsfSTCgT)Cx!SX z<;AezP6KmvK!K@X8S*x4um3lmt>MH>?DC!8j=3IsIg}7&)t$=MoWxm+AKU67s6&G* zTQqe?hn1nK2)a+d{ZpfRG3@ax?kbBmx;=2d&^20;E|N_XawuDG>Cq4g)CZvdDCONX z>ut8wa~S)4tD>Q&bs8RguzB|7k|`B(WNSsJK=hJRYEU7!jtoayb|`z7hZw`&D#Bh_ zcUP)M9COV(hQ^$P75Q2szdHJ`;_3Lp z2XJX&#T)hq+M&0SL*~Y{#VsGV7Tf$qLO)-=gwcr|rM1jp!H~AMNbxidxfi1MQI#|N zJ&@ScR2+>g{gPu+qhAAQ-*8JyXTBgZHibLt3^NCt4THdj46z zAzc^}94FBsj`39dSXP(o(U?w}X3s!qqbp6NEm}b(JZ=P6>;_V9rd&NjWwt@PL&~G) zMRv=p;MGzqd%vdEnCMm~ni0hx&1CwON(z2ZNXgO_=ZfX=$7QT;HWeu#2Dq4LQ|YMK zD!ow)Q<567G$*wC78`FWIN-sZwJ~JZ5I2y`k%#uu5TOrBNIsc^)e}3Lm2XuChIS z-P=w_0lR2{^3W zI_&M`b?se%O34aj0)nwMgP9d2Cf8ul*c&xxSQp2Gskihh{Dd|KX6gEw#S}J4_||X& zlr2>k5rFh}k&*7M5@*;{VU>Z}c>+zIALma2<4#UGrjCIzoSD#i2RCs4mB$O!|7f=b z9IP98`+K~rWYwyytL`D1Djs1l1IqO1czQL2f`YszY(Y)P?J_I^Wn%P));MH_csC<3 zxpn7jJDaAbx=C~^vPt6GXS*%?vJ~%~tede3Xsy?n+l_=gb0wB)|J*sNCNOTs+qh^u zxc<10A+WBC|1(iR}rBImLh|1RFSb<%na;pc`3Q9omD;-;kyUoh2JDN3sOQwg zuYh*#eU#Fb7h&ainVLfntmBtb=zLrQvB1%-t%V;rL z{cOlBVa-Xh$xAOITRSK(83SjYouIU=lEaAIrI6YP|NmGz%YZ1lwgE3lr*wyO$I^{7 zl1nJvEM3wK3P?B7Aq~!5P(>K=@>WG9R1^TJQ>T@|i(;Ie3KyXu8)lFq`GJa1i=1SgPzyOow`I znwQ!As`nJt7FWeNQ=7b1x%J#f-Rcj&%1eJ}^5bA2LN573j0E{JSL|7iz@-7h@TV^? zZ6|>g+p{)8U{qTlkoKP<@-36uoTn}wX?5zQosW&<9IOEXW>h7lEu@epeL=w8MXvW9 zo38Zw0zY#m*9eZ=ZGmzNG78ik*pl<7;juIClmzw&lG2Cr_F7;ZG}V8Jx-V}QpwH81 zg}|i#fIjg1_cRw;WlYH-CmtAGqjZRqUI(;fg`||-EH?W*neHEIBM!S9160TlfLamO zy!2#@`%60J_bv$ZQ{`xQD#k!(xig>&5Per1UOlF2n2?^#J&&A7L%$okR?Mk6qZ8Kv z4<7lx_@24!)EYO5wHQ;3(Ijx6J}OGM}JR{K`KOwJcOzvRZI`d7zT<= zYDjP-j2PvJiPNbS$&28pL+El66_kdBS=t+x6jeb-^@`4&gT?Gq)ZaCQgeGs@13Lw@ zE+xkcFo_wCqZeN*dne8(@DjyH)%B5UMgh$}OI3Z%QC}upLZ;hzi!tTZ>5?YEgxHE& zE)ojTI@BT~U7bbR;gi_0*SOOch|kVN9;9iBWC9s#Tw> z|IWySmfFkG`@c4nBr|x`6B2FX^!4aVn1r5oO=Afy9k)o?;1F9H9eJtdS3b0E8*OMj zwz8nVVu^Kxi`0z98RqX9_aq>3y8ulNYjODmXpGfNR)i&p>Oy1Aa|oGa_Fg~#xGsV* z^N&0_J)cfD(}Av$9EhGfuIlvw7^_ef+?TDf-Z7Sabp}jZ|K>(hKmx@U^A3b?YHSAp z0}RX4fj(O;C??CkO7CM1So%t1X8t`sR|AP9dYq$aZ5#PLYm@zog0Y zv$4|68yIR?miaO`jaC3iU|&gf*XnN|e(I+K&JK&Gk4dT0TavUJ__r70u^sWuUL^Y| zWy9YbE!i{p;w0E+$q*)rg5_y*4hm75Gf*1mh%4EFeM3`QM4ch(>}R%>Dt*s zWU9LxV0_nON@@jvu(6Y;xDul1W?xMJbQMu@8nZW1?tkn2I>LUTWAZ0{&@RIY@ z=?f!mGMuapSmup0m=F2(&UgZs2IE!b!U0h4Vf{W~HR`1$4k77d4p5w%0%fHUyOd*n zhoaCF2n@GYo)l9(Fto)31V4~VylPDOAczpgd<)EsN=kScwF}HCw?hpMY3l@ffkJK| zJ+d#2qnd++<9KntIz&S$+$9D!qplidU&IXXxCma78Gxc6yM{n5z&&x(!uqBD1H^$< zR$}4OuZTxQ=qspt8TfPp^`jt-Xppy;8 zR?KY`j;%$>s&t1+4`nYvl%Kzy3Femro#7;kk`eb!RHSv?S#Tik}KGNtvdUu z)|B_PJU4xr0C%KKG|kjs z+_%Y)4@jj73xdCgo60joG9^sE=OkOOepeKfz75LA0?c7tu{FBAR_$42wv8A(;n?)Ue9*`;9`<4%I)-8d47E#wud^#lfm0umx!%_l^D9TOzZ?jTN! zU+A3n;cs7I(WSEC*AVf`pu75ag|Rx{E}qSFJ7W&~!O#n@{e_g-Ao+dNd5dA*tE7mPo zbomA_#t}T+?N3dn8!4P1{*OdOb;N1v5Fu9{%c^8%0OEmBEc?9g43z`v`>GgjOBlj+ z+&LDxr3aILbjrE$TY)%8^x49VuUz#l1g)oG2pbXna-#L^kS4NxtKOs99?SJ8gIf0{ za+8>O0#a_#C4v!GCm{Dk`mI1TNSQaXAFf?EnUj!rHT2a2zAS#2Fbg9^XB3Apiw5ET zsin(t@SWgLIK4Qu#Au8y`3tjK)H(_^$3fGLyG?DFyUQ}M_E6NKGhjHL0I&i)TKQyf~u%ot2<}oRQpYg=XL{#%vWxJajZr;IFVFW|2Q-JB)InC?x zvd!-6k2jG4>^AjXm+B-N)7a!wy~4!{3p_vLQX17j4e8|$iLYow{V?+$T{wo6aAK^u zMb})tpJDSCcJ)gsb2OA+78Yz%y^l@NF&wwD8!tuSCr6>wSB`8v{Fwc*7mM@De^kZ% zogTz)hJGE!Q6czeUJI`p7hVw+beoEhR|ju{+@gf@_=N>ErHP+~wHl6=s;ezz#!U;k z99DJtJ)g_6qLwMR^8^-$M$3n%+li$jdcILHcpk_m@Svs58fiwG)RizepnvmI&FpzF z%{*U>$0YDxNz-U{>4a&deQdJA5A#CNPSuvl`S3x)hLD6{v&J6HK#q5wZ|Gd4PDEAe zRFGz@C}zaL-rmvtsmFvm7^x7VZ{udWWE^>KH0B%RR+#8l!R&)YE9OtCVGqa#+==6n%;=@5w|f!2p|)@8w6?@{r!`QOr}Zeo##oj;qJtlu@`Oo5jHeOWjbTV!V;w!QCSpd zQ~R~qM*co+p=FLKoyhGi z?DYJ6cWvv!ozMDCWdIhnge*z)b4U?gqvkI`=%j<;V#Zmn5aE}H+S;EnUv6fdpTfY~ ze)X-n`lW0lBk}f{MpFZmX6)u-JSd(($i2HD`pc~8FJTGF`dK5qne+_R`T;Tqxm4Y= zF~`1LvdrcH^Tx|Nb)cRJzOr}hkW=0N00(4%wNG{3i^JM~*y{Ch@##nNFBFq1 zP}Pdilw0^p{C%$1`egXKIO3`_KWTC*&U`8D{k8}E{)0&Xu)12i<=JWJ?IUen-!c{J z;Dk0RNsn#9YIOO9h?6vX9f@iNm*207ID%<$ErW!Aewgz(n@Ld%JL$G)P!2GO6rcah z#q!pyICLBK-LWEY{rPjrEcQR6y0iQKMTxYfKfR-b8=HsAM(;n-I=NU{5swFcSguii zQ;D9qNpmV@X_&?v)L2wg)F0LTnw51(N3UW7xB}oXwp8L58isKOROLIiYf5@!zG{eO z`gBc?B0bFMmo5}|O9{UqOpzm^ktJ^$zDuTJ&=H#xrERBHG|tce!~H-MO9ky?#j zSf(@v177uP5|-6PyUndJeG-@n&)_yPoFnJhp-@$AYD|A@zER@Jvg!Qqh7!@f;bVmO zvL*Aa{-`+>Lno!d`%dpONH!|iy)}z!(Yiq{(bi(5oEJ?Z_Fk`V`;8KI*oL~SE;%r{ zV`|m-Se2B$Cq+%}Vwv$T*3Qwgjo~kJiz#OVuU#U-26eNMq_&}*{OQB8#0X2t-EgcR!P6R1zYk%e6U*zW12RR-us&d{|nW(hYt4o(W5{vw!bB zgZ5W1fdT9S@<17jcEUrqaB?|JPz=&KZKq%^4uAc52y+d@L!pi}&Pcx?tGi3q$VVCO z+V$4sBOaZEQjqW%u%%bNG%DJ6cYZ&85pSqON5bRY<|%T!YUGd{+-sDtGXIj0AG_ZP zHz>N`7wnFx>P}|NTxR%?f1aW^<@`d)yd`VelIZi*-xUUCIYT<>CU<|DccGOyx`>td)aGj2{Fn1N1nmtB-%aF}Ax*`*u48gx#e6L3Yy3RLPL^-q5$C3DFB!|pAOx(p* zC%%t7x?4DJ*E2R9Asf-fNwjT*qXcV9kW!J8h2==g>)hQdY7Ul0Ex=m9^0LL0Lqncr zC8dq+O*W7Aqeex7=2jc3?W;FdiuaU*3HmL?$L!-c%<_@1?w&ylWE!sOVzSL_=_cpg zyPsAGcf)P4r@lih0OkHAsJAS)%uT|Tjd_w-cN(%HqwvA1MI;|P{wq(vZg-XoTdOym z+lrtNxqL4^NS9Q!X{Q#Kbf8H@QY7N*vEv+<=MGOa^<;_Ak&9Aa=*gvwUh`;FLl&H( zaYHHIw??8OJ~BnpsQvit`*dZCQNQf1b)WOpK7l>Hl~S%2TRm?nB3VGSMYvhab14#_T?LcsS%8?x5VH_mw~KPuuA7wAj=?kRa(BE|e;n zlQVvKRgFY#_l3KHOQbFXeBoz~2dKnSZ85D+V{$uTzGlI2gepdE)_KYY>9ekAf%jIZ^@?bEBy*MKWbEyr3shXd^Bhhw@=%2JXVxF3{|zQ zVk^o%zqwJRA!ziE?ohapJ%pRwDu>fFYbK>A+~qiDbYf|RPCGg zLyvmlj z)oR{=iv7C4pc=5QLhnCkf5yX8epwW-N|z|0{FK+jjUrDoNX(w(X{Qv$O3cf|HR$cI z6?qB2DXY}duI4)~{^7VV;4_gpVJEI(YJ$P~Ja_LsgWPz>)BQW zT8Rrs<2|rt(eFxI5IBtklWm~$zGMe?f#qqUhB{#+0fu1`0e9bO&doIhbMd!Q3ADWD zf8Q{fR^lRlVVh-y8j>eWsF6hzDsFU_9<8)~*E0bvXmM&rL4!Z0yGqUaTxAFi9^xAJ zL|Dy<-Zcz>CDx8%{2a{Te}qb6Ga=9Tt*0?9}eq15{yh# zZA`id-hk)OBy3wsh99oJO{AA01ZEypd@IKjb+9`qK4<#o@E}rVjB8&I zCi=e7oVDe78lSUm0LHrCHuZAHyDs6~6%^>|91d)UQA^n;Ozx@s#ilnGP)}q1WalOG z!X<9Bjo+%y-3lv;Hf*lZUzusA1aSB)aof90dCo%*BsMK!^x#8G1_~@EXiNe=6l__B z#4vZJvYBg{NZ89^{$iMzEFSUP`W^o$e^4!YC%**>&`Dz+1D{F|$qS+FFy+f~8VT_9 zWd%4tV)XYLyBB-pkM0(j;Kpi0=yXc9AdUeg5yzzcq=I^7>h}Gld}w@fr#=+&q%H5v zw*pMF)5&9I8YS{&whVCLlJU@3j1Va4q1a(KsvrL_#Ko{ZtVgfZZk;#Ghg#6XMdJZQ}$Ohg5YQ#U=c z5TzuT)$Rn?<|+AGGzcxxU69B!m%iHdC?;#?ikiF(yYE&$4=S>;A7mQ#GAsKI_tRniDChWgGZq+4W7qsy6X&gYc zf9{axxCL#g??x3OAA`+bTkgnF(Y+e%*<1NlT*t`1#<_C!7ZF2&)5zGMMQ5=os5`ni zvF_pBD*NFlLx|{@V`UHVv+pwb-+(k6;UyZu@Lz6O81v`y8|TM!AAE9HfAeV zAsjSQb5;)(1+1(H!S)SGMm@KU75*t#=EY*DBJZg5NRbK^hBA*JVV67ZvTC}f@*+Qe ze((;d@LcjG%iokO^^z31UU7!qgg{X0gXQ5cKJ9u3o*!~@82;`&F`kjCs3_aO4~moc zCl0GO+Ol9snAz@OuY6OuCC+6)L`@66aMW$8&`dse)WL#M6@5wR+1OL{Ou6$rcM5uB z2!eF$&Bcry4`05bwxeWaH`0ob&2!>q_9$#lY_yTItr0zj+vO-E6z5FJ0ME9SpX(^f zw{VS7c(9ukMtveuKh&wG#s-4CGFC|fK<=#?E(#TveVv!&Sa8Bv~=iPj}0 z;NO~0+JpS*Cmd(*2wV9;k}y$R0QyS!@7p1NzE}!nN`TSvZ=u!+>y(^V`_6(s=EcMh zcbNrJ{NJ5N8AR!8EE?K{lfD`@td;9#;nRNH$hVH#V#3olM_`YvpS!MiEouC+2&YAQ z{bCj6HbJ8G-<4D>kN*W*Rsns$1bAGPnEOF{5a-d;Ba7Glb*$B4MZHhMqC2LyoCV$) z1wEHLLS^LZdk5LKK5cs|EsdXm%|*yN5VR0ZlJNC%!c47}=ss9fO;zgX*$~w2ziWto zY%temy$bv{7PvlJN$|M#4@T8|xAJl4^u-Nw;<)SFy%W|W>^s;w-SHec`%Im*le|?G z-o`L_EiGY`Y*3+R8}|@gU0){}my#%u`y+K12f^0&ZyGcIdy1x!7<0dP-L3!aPMe(hi3m(&Vvvc>bZ(d)Bjv5Lk?c1;Vl9@dX)YEoSQb?wF z?p;=zI)R6IU-#Y8`olXgoLCC+L-_X$dyee2*Su?1e-(|(MMY0mvW*=k!-bNZD(E68 zxj+x2-37^$#vD-$imtpja~isT_t3AkEK`~B{*%gwFdklULM4nauLoI=n(PMEUoJZ! z78RG96PEn;(jnE)n(zi+5_()N7J$`T7Ws-2#kb2X`Auyv8^Szy_;#ROkNPmaf46^; z4LY7ts+*d)VWxRJO!EHhdN^V2K^X;uip(c1Uf_)f;m(>Mxq?ux!sFzdIcmgz@~i$r z{}C8OW5YWO6LgHea}!dwceykk=9LxAShQcZ3g47OlfO@jYwN(Eu^4vy>k>)*lU+4B zTNxaSV}$7hlm-0j(zJJQIKaP_iKugOH2SmO{8x1zHH0YZ<$#*+^*0pPk2njeQp(fw z4ldFPk@ulWUgAv&K@7cqU?Deb95p}fH%t?Q2Pd*Ez*Q_4J83#zZ7Z?BO z4nG+N7JMl1{=BnFq8qR~=0NMtS)kZ*+T}|0SeGvXSb+=ymRZ3JJ2gc^t#E zM3x1_3Ma(aOv6xdj0Sh4i0;?GuDCq?VG)0R^qtEF4jg$bp3-{mBt=u*e5bJ~KmS+a z*nyDlqbMb!#_#-jG*)1rrsr*vmybW*jCJ;rMZwkdYykh3)Qz8axQU&3YNyR<9>cBh z`anT8Jt{F<84L6%a?Yo(3)x8k+d@AAyF$e0DoBpiCu8P;l>}u)ivMcUDDvd{mBPEw zUR?y^<&_(84ET}t)111_eCp-eu}R9EIhJ?=50l)_>RBp)NBm|;TbEV|_7C+_zkzVN|~CNrz`*wemhz>?rEZV@Pxl+X(c1gumrnw>q>R?oQ1rM^;|?3e{qGL3z7$|zt`B5>H-X& zR?_HSt_<8zB7Shw1UzJ-suXjY~MHbu;ECW#?<2`o5u- z@W%~){h+#0et9!**|j}OTbA4wk~9&8s$+_HTr*dFNlL- zPVHOBXIZ!c2S^s_dIBqi^vsC8|CYDq|95`aoP=E@2+#cgSCCuOi%L?D?@j~s-l{6K zUQlg6so?(KK4uX^t-inVO`%9I1bR5ry7RRT%pggcc$kbJ*gyx>FHu=0m!qpL=9{ZF;0(S%bW16 z+s__-4@zh}l7>gwJ)H$a%BBE10tEs5VA&|=M~;Xlh{HIrkmv*eq#IilE6Q*$&|RG3@_{ukog@6LH!7&xUh!4%X%>Hp}|F3`t%{`j>T1 z>TUoh@0ejyjZo|o3NeHN1Ww1$aB8h{aS^E|I_0nTp?R*8{ejjTpmhM(yH-$ff{ zlP$olZwaWz1TxMtvVh&k4|a0qm{jc{{!1{QKy1tf7`LaITd^ z9#xRhkv4Q>N%AJsf(H7Uy4MCyk{EDr4SrVILzFN&{^ZOl3YDbF0rZi|1 ze*zPBM{5nG7@##P0*Osd9p+)R$m;u***+A&skZji64Q8H+P`q0Wc7lEDij=IG62l# zoRegCq((Z7dQZ^)G!w?T zty0l=V1S=_-eCm({jco^|1Vo~zv@tJ5k_H@GVyS~klU#~-g@QS5XH~>J{~@6SBl3; zKW@kPf3%r7H;)ge|F=`5GmXV_)zs4T8GyU%$jT3)XP-fVj~6}j;l5~;ku&MopO^Kx zXVZY4M97mN`RTl|`HQA!84IM>cClMQo7J?e`X?L=jcF0#x%w@)#HY!^6u)3Xe)&3M{FsuEYiHDJNftU=YL#_Q) zD+5cO6YFhS3M7gweNf^P$pG-`7+v#Fg;xn}JF@(J;sd!q0mSGK22;%NiY?)CnpyCt;rGTnf_`aW9vfag;d}f(oEOpbT=*}8 zor4&P<^%+`2;`oeJx+K5!gDz6ZE zk__MvtF~8>tVVlze(8bO(5q%&b<2NtY%_D0Q3RV2DK`wk76^IDom8?;V z&RXDEgOx*)!4cC(CIsTH`FUm9AKqhdmmM}fqxx(`QAI;y@WLI|0| z`1y~`IN|_d?$y|c$te`jfW@pQO7i5}*jQQOs^G$p@xt^06P(46q&P-0=oaYdld7m0 zwA=*fm=%B2(!E9CMT6RdA0s8ycaNEbtF%mv9*B-2oFVkyz()|AN)m%u`DJ>W@M)+yciilvR$)b6LNz zKPvBM>B0mM*wT!mm$*x3b9U^R>yCEk_wE<*{HX)7{dOs8+$o1&T%B-Z&|p?W(96^7 z^{;Dc*iOZFT=w7c`+Cp{Hax{Sn5a6E$VLSFIVL&_^lrF)dF7OuzZhgFBA2lH!A~@x zVbXO%RKim@qFnag3c|>8)gntyeaJ4akG|<$rl2YA`pcghChjZ&vVQXqc;#CTegNm} zitKyKe)o}N%ETLHjY2r~eMb0g?|`wsdEl&@0q-xM=(JAB)&e;zfjKV5x#pkcio6_o zVwPiPyg%y8tV9l?dZ{WN;)3q)Pn?y7P0hZ%kua{K40!z(DLS2LE0iB2(}q3dL(kj9 zk|It8&NtIe$5J_aG&_d_eVS=Pxp_V20II#B?k{Bi&cl~&^x}vf6O+Knp0aRcC`C06 zXNzFU1lt#4s-vTh_3Hn)P=TCQ9Md5c+L8&r`Q^v%YMN-6Rwo`Qk(*t)2?XvyZn>H- zPrExbN*L`o{0$I-T`V?h+5R+!n4G}vI5l$mRjH_a4`^T1F9+$9L63b2{8(pQ%fUci z9UPZdL`?BMqv;BeA2<9*_c;^%XgDCRy)r1MgXqGujd}fHJa*y(LO8tF;%9eX`j;~k zg1btjoInT;qDl5{8h_|>XlVsfGmc&JCr6~q&H)Bt|job2T(%4gLKGD;hX!lq>@ zu#UgIJI8EWZZ~6hzF9YK!L@v5K$E7xG`G!!(B4lC=+%2vAmC2rMz_^|GXcKTb5@H& zt6*ZVt)$K<<|-PfuJ@TO9Z*Q1LJ(Ukfw`8roOF};bHKvh%2vLwE4z^?y?G}=)KzOy zXWl5RIklOb<0~qcm`ka>VlO+jtzKshr49 ztGY{FRGp7O0IpXDOvA0=KXl^8s}FJ~6~~t=7+v>b6p+f>7U$>di#EdR22>kQE_Gg8 zwDJfG08m7iWKtm*?jH%py7?~w0%;RqE)?{`4}D`vcowlq;oe4?X;(w@a)SW-4f-$? zUI*qgxZwUg>zDFGM#AlSW%;?Qg;n>E*5M5ZAFFK#g`QCAl?`Ts%xWW7C_J_1<;dC< zF7HKS=hJ

X-Lcwmw~aeRus17YUIJvu?FHm^JdV|7ijIxNnk7zHlbVO2zDO?&L$$ zd2lw1Q`NU;>z+kK@&xR!CU0&}RLv4L0qd>H7Aq!Rkj!dE)hcVoZ*BFLV7pEoKx1MS0u9&t*n%UJC3}hZ$H6qJWp? z+T&@eFf@X)Eli=XZc;>ilR7*|YzKGL;fD`%Xov1;a)k;eBMG=t2S0B&&O{~fRu+B9 zppjKpR^R>E39SH0abA#OfNVt*HLCAh4!w9>Zi~%Ild7;Ul#a!R&qLIJ+%Vg1SS)_D z>|NEhQk5`ih`92{r_+ePxG8AJR5#m`0AR?}?=afQ&Ln}wP>tyVWC{SPY}h3=!(o{B;fZbSIRf%VJRXMahrjDRwM(GO>aijHrNQRB0gchbFDYvPjOn^2O7*BYz;`Ok z>P^8xcCC0V*4*6L6pl&jI;ko>n=qh2JkFlwaB4gq;p}*gK^kMvYn%Lel{u`6aVh_| zhL1QwyOnZRHlA6QxZ}>+LJs4B%$e&EtCzH7f^F1fA`l-2H1|rXX~i+0Lw05zcM+9+ zSi^E^et4!$s_Bvwb5H>m*s#UI-5v8sD%Dj(RYGp%2mK}MzH;=tZ{Z5n47qnbX{@Y> zB(z@(qLD-xqS|iS-m7qKlONBXW(a)EKLWIY?JnECQl97UiiJoX$EB+I6cd-vb2y{@~TchS0x#}pn1 zR+rZU_XSK^42{qqi-4=hVT}BoZQqHBh9`m2plgaj@N+YqhDXoC%0ZrN3m0udpu3|d z1ikU{DbX3e>wBezMB<{bjQ}@O@yMs$yL3H{yPN?Z4x66!C|5Y94|Biqd2be!7Y4#H zHOtD;HBoJO*wx@v$zqg-Z?iP(jiLb%!9o2QIAFH`D)?J!?%L^<#qPFBZQb_CCT)s zztu5ec^G+D$bYi)B6pFa64B*D37qFQmw*`>Iqd1`6YQn zeZ_=PTT4=|h%c5e3OI+&?T<`&-^xd)8*;Om;iK{eMLQ-ZKcBi+CvOg|_-EJgW!eqD zIh!y_jyM`9t!mQ_r)xFgUExch`RfXD8* zLh8>u%Kft+_V+t$u1QH1SOD*M54*7H86XAc)ej%ws>8S*wI6~Mq+a~yH*WEg6P%Gxt19iSQf8z_R4$k}DDT>Yff0xN;aYkw@EIf|I)aDh zl29B<13GS+Jn3joo6~=X<5KYx&@TgC94hi<^(&y6PgN4yr+~>@8;F>!T%l|>TUaV4 zVO_0sB(hPmWynM{|2xwqCFL4)-44bqY?g@bni8i)Kvmw~_6w`Zo!SR}FR=?(NZl}~o@R>d+6Q~q|>X`N2UrlB|7ZWFRznfgN%Ws?;zB1q;)6{C=@ufB8ui_GGeMa!1 z_Oq)_*YC06f4!_);anV~>ChbYK71k9t2O2!DVi_>QF(S+sWsL8!$;^H9uE6 zXH<9X89X@fqxCwlwN}T-DWNMw7#I|&TCmGNHQ|lpI(;9lUs73)4=fPkm)@Xp@m3ps z!0LqZmaHWM(1)Bj;Jj7$5yjj3nT?ZiSgDZ`y&~Wg+&b!7;R8d@8#edBIB#Z z7MGp?qljP0dFIGvo+Rv8hO&Mm51w+aMG|nUj~Hz zj(p$xp0_NxlastPUsQ{f@@5>y=X$#GTD==E*Hz#=7NKie?3s}%JiCEJM{{j8`53vV z5Q`mnk^dD>vze!{SX}!`3iU~qTF5f1x#9n+ExWw2Vv zML-^=!uNq++3B^QS}JWnQhThTlf+392|+fPvTvboXL%y&m!irTB`D}a&*Y}~td;Eo zzHb+sCHQN8v}ZRUKa;RwsU#AlsDbal2f%}7eZU?9Wqn1h_DUj9jU>c=E#{~vwaEy+ zh&|Oo3)2K5@Y3do>;%uXA)UaBit*AWj23BC6tJ8(kh_8Ql2ZsU9g5zRrQfa%)^8E> z3h?WYqQ{cvD1?~s@%^%aEZ8|@v9=$@MCUeY>}@^6L6(tsK&-XpS``h02h60oG3nSv zm~!lyIlQG9tfr$?mHm`1cNI?($&sr>L+exw^b1tr6)A_=-fgcDxxemQUXd@Dka92n zx?gIE%o&gIjf-A9TScEKFoSuX)=xZkY}p@eda<_oR~gUDbg(|nT_HEQ0?LU zTk3YyMCSegr`5JXS^`jf^1HNtSg*Yn2~zrfF+D~?_S}$etVCRYab?GXmaM1{EXqh0qTn%48jiGOxcybyhHf3qI$h7Aq~hQ9MM|pzDaTO#vvJEkw=K8`f$G z`XzD7{H>Q%D6=_9g$H;et`IO#*-Zc*n2+~RI*KrWp{dQN&Hr(LiA=r#ZegtT(%j;B zhAT>>mxL)S$vXR=scm!{5Y?kx)f6!Ju6~s#+r-CEv4qg_bgEpao@1=DcTjcQ$CheX zT-jc%n&7&$c674k6!_5E;Q@BHLz0qvlU10F=7e~1M((uXy0TuRX<;I)3;+#t^^LM_@*p#xF?{mp}B0z%dzcHF-hqJW8UAMwkslOux z%ysc3$#MlLcgh1~ukX^p6Q(&mb#@tLP?!_R0D=Z*_epR6E_0e}B~a5c=Nuglc%{=*!2N=8{9pPBk8QX*jrubFd_ zvVaXRNI~?&AnF5|z=f>5BDAeI>d+|5!Q5B*h@OtS%o$v*?V|NMigY+JTm z&l3$Dnid)ATfvclWl=x??MenrJ4V`3q7 zQj-Yuj}+zS{ollypP*@z;aeswjtABx$J~QlP5IINZVYw-K^61xEv=_P4PPsAMQ-by z{D|9!h^KcJ9MT}%nZcD&X(`fS?IrD(RaGky<8l`~5PSC1LWeRcG&Hn^FE^7YaO^^1 znAx3PE5imM-rvk4XOzwB%*XMycDU?LunUkT1%|3`Z}&?AG5iF4@9qnR$A%Zuluysy zmt20-KQl4ivwaM1>WW%(qZjMo*4QXMq8uFg8!c=z)xS_^6B5X%B8yXeTG=4MO?3T& zuY_|O&Twgl@Pjp&WU@=`G`=ibVdL8*oLE>96-8ew1}i!7lRUBU^k~kuseA~s5pxCV zMzIsGg;|kmlw9?%DCJtdPGG|?vxNsNR`6|arRA5*^JEI>taEOYzZw?h#un6_|JwLD~|OZ${A+jJ9>xi<9l0*OHa~-_whJYvBaZY zl;U;a^#$Z3kW3z@ToYRo`$CWk%f&G2T@fA3lnAdfJB{@!{?0~TEs5EvV&%;z!hfF& za%22+|AlDJhSSgwLkbY*H67zK$m>1l$=(8EYoxj^V2c0x6#evS#7#7qj@xG zycok|K7#s#1L2Y8-Z?|+oOpJIia55VOp}mo$P#WZlvd^6ys!(i_;;QKEw>!%BzG+r za?5Db^!!vCF)yighF#6qrCYy(g4&RhR|Gs@ws8{JB(7FDFb(`0+mE0;yVZ*tKEb=- zNY(6Ik!+kOVPOVgXBBy$EB}yLqYgj`-{V_+%vx59dp6A$)BjB;JGkwk;hOAzlZyf& zZ0f-l9eZF!vAvItuD@2^u*5S966ESCx%b>5%eo1>d8fS-5R?hk#$JDM_AfqodiX_PCCF*6}p(@f=5n zy=|NM>;>}W=ysLPbhtkl`AW5_EobEtY&bi60Iwdpadv4sil-kE?b*6yGj%Z2KfC zvbd}o#(>k`;6j;&tjnvOmDVYeId51|Rkd%r-%cnUz`$ud_MG*V4(#6_+J1x?gWD$_ zbktm2$1F`yr0SQ?)~AK`E>UjNRv7%}H~^5IGul+A&z)VRwnjg5|&zZ>gQDX^7%zUB3B!!5S+ZTE~e0&h*M+8vy% zD{g}%5p!~&kgy0GOBeFM@sq;$BpA%VZ7a+5E^av8A3~--y7++dXe`^Kp(ECrDrxCU ze-U&A>WaUt-N1fG-mrNjCYf{xm6ua9z3TcL~T+#t8bRM-7U&dvpQ?JYh51 zjbb~zh_gfkHYhK7gdS+#9mb#*j(Kl)QD`}8|15og%YOcKH`(@L7osu0+~eFokAlNL zJ-kn%APLR!Cd>+@WEgY0ltsNPr;7*3;$YBT0Nmc}bFAcmMn<-8%FN`QRLsDob@j6| zLnjeb#sx$X&Al=RT8}gHzYA*)6>=02nc#;lCIYo(VBsY@glzVamBquV4Kw_hd4zOS zsvg)lp-Rz2ExAhXO)R0T_wF8$)bkVobJg4-6^ZT7LlYYsbTd_rW}?MlH||IMdo8^X zo)QDFnhCC^LP6H0+I>#*tlr?($<6Nc%H?fAAiHYvB}$a=vl@$iZ3_0 z68Xdpnk85CXC4BHDA}7k0rLm$)`q_tVmV~gjtB+|FC)Evw&r4a%HInE)}E;iWCk?g z8fF#~ICK%zHfnwK%9yGLz!K+YMgf|UBcE$>)4x7O^Q8E7(LgocdQ1B*oqLk#6T8s% zp6GGZynCDxC@M_fd*E$t?_7h*tG$vx!}gTUq8ggpc&>+Kji#R`w;rNt8-Emuy7D9H1`s^as+9Xa_bR^Cuk z2=i{+V&kjQ8~gb52Cyx1VZw~)w$(}&x2@bB)3{}%KM+M(9_s>}me%}EaO6i2pYQd3 z%*?QRFpM+U{uN$)P8>8M3ZH+H1+hOinfL^iFJF)>CJbcMC^m<4_ceL+F z5l>bPM|h1CSTU%t{=!%TpbC$4IJYH1&291|T*3JmHJ)7kK&o&e+_>~GbJk!X&V#Jn zNTFc;w*tG^2x$BbS2a`ToNFyBy5t{6Q}qjkbmb*{Q&xN``Z~gJ^fiDX0Kv8V0=^6P z^wFY}5atTqHLZrqx@*N^H|4_rtLePsseIo!eq=^uJ7h)K^VlPM)-jGFMCh2=k(o`U zWRscE!7(CR$mmPKye*W>tdA-hgp8LL^>$$J%`n*5)Lt&)L&9=cn zJrT5nx$#-7T}C?Pk<&zzQ#?&+_xIKfTrz6bP)$at*X<-&J#5H`kiJbiB%GWt~E>lX=$2pSsYF2i(f}ew!N* zs(6n%XSiKwqE)_m%u+9Z>+!V$ZT4r8Z`#{ggfemj0_i@{TTGPDEX{fFm!i$e*}U8f z-CB#Md8b19-eW`hppctzH$8fKJ0R<#em?O2F*v(7fW}-aK#zw1FbbjTTRl~uJHUUM zDbJ8R1dCWV^om+6PB4#tu$zVokr^|J^cUty|6r|0j$V$}yl{gI= zP7d2lU>2NuYrZK&Dl7(*9&)`j49Z*Dd&F&m_xPP2q_|!ww`CaVUKCA~SW>-VQi#)mffM5Q^Ues1_s^-0Pi3+s#N#*0EN zxEkqQ97^B#*qlX4%_LfRTWxPm@Ns`|1YKjUX8ML$66y`j-qvyNmro_BQ~AH^qSkI; zL`&-L8IaiBZGu}&@P&S9P(bjX zPjc>Ucyecn?~1h7d#d8SLN;sTsA;0BLQYpm!V`(*ntFp;E}G4_kBitpR|{-0BM}?~ zhL(Z1^Dwd3-o0~axaQdM9&VuAnuC>3ud`PfbF<{qKIkd_;heOF?miL_> z{^n3r@~THPZC%T%bQa;P96#st-KJzUxK<8{97i9fJnXm7h?uMMj@Q2Vj-xmET2NkC zGQXL`?ug)q2(s(9n1`f!Uq3vCyi{%1x~BOK zk2ksoj@{&$R7@Qb=Uivw78Ou=GJXyiPcKbnyNl~pLD0WWiV7KkQdD$wiHt!Q`0j8#sz zjEv~K_jKmbdZODO-c}4eM+1{3PI26^ZQAVbb{@!IdqN|XPpyLaFLyfCL9h$F`-OzZ zntn^bQA@+AaUFAid(G!VhsEihkvJA@f^UVxj40Z;SFY@+57)V`h3rC+1*@I%CM8us zz2l!wM$;}i_1m@Xo&F$Pn6RDXI%&p6vA@%yW#a3n16%|v+0JQfwO&J{Bj#NBt`}00 ztSu8*G5lj7jU>2=T8X#2QLohTo^nhfA5L*gv^1~@ zDIwMS{zRhv>VzzHFm?FGJ%E9B$e zh-;DrGnE2;m1UX3aY`-5BGnVMUzv{xP;v;s!Ctv4@Ob|BNS2Ba6K_Wmnh_AYMd)xl zMJ+ZxBGrWZK2bh<=QOLNu-i2=?h(Ofy6Nm2QC1~)IQ6t8_H|U}Oi!mXCHZ?KtgLm7 z5hvx>;oY=5;y||s8k^DQhy7Q_+%kb6Xw;+_-xAH`!n!;v6*IFPm_Im$iyeSxmmD{H zov3G!yafVLW&^3I*6$B2uf@g=;8eh&_U@oyddutf51kA7vGffB-cU+b7X(Q$-KVub zi=)&>Gai#>1*gp{)H07n?$gy~MM{uva|GC=91w z1E-hjW>J4yM~&Ru_TN;*)lLEcAK6%M5m+-%sg#SbESGj6p|i4G9o4);rlOf2_WL^@ z#Qalr|0szjmrE;S7A zz(Pzo(fA%l?(pREt>$IFmV;VTePexjTfx4g>zUSOU)yimHalxz;a6e3hPQxjh~sY*XAVXa2txKv8H~}BFcNSS~^i>BCRQmOeirm-60}y z5>!P<<4|8;uVG!_E8v8{dpYAJx=Mal0@OX2KLzt=Yis5Xn@)*_Nga#fWrD3SS8fZE zPo<03m3MM~2fCg-wxVQy#iOHNM$U#5#fMKr91+m96?B}+lTvs6CtWla-+FcJgfy8A zw6dG%5mmZ$b}b|+$^1LF@@4^On=-M9Y_}Jjb1m2 zDK^F-4U3z~kFmvXs<-G~VFTTmo^=6(k}^s%&3(gRjnu@q79WQ74aOArqoWtE6Ei0! zs$t|VRO}Bk;D-ps-s1uXnUc#K-RJgt>`^_)y(c*p+$KiU$2y&v)1mGX@stVDFCR@6 z_>gI`tx%5_`zt|b< z?T3d6W82REiP_NWzd>^feU=J&|1?&mI@B-y);tcn@ZHESwOcdz zVjgqAReO-x$dmJpA&>4)6LN??S&&c*HKEA4-oDG@^cAf>I8UD)gSn+68d?j=?#1^o z;$QXAp(^r8FQu<})h5zv=$=fdJIF&6^eqAhL~`ZizUE}Vr%w%*tE)zwZ2e;VG{mcL$lQ=|8 zt=YHE5${#yS?wC4{F@iTr`dRq3#$_^Vt5o@ud%bVgb4>^E>s zWK3)pWXFwrl-c~_OLl-Z9;vcqeGg7IU97=!0GSx!`H=RF_(`GgG3$lo0CX2elG*qc zteQTaAR?5li;!#P*7#NtX>E5-iNuf=ThMf3jo4z}5AyXE_t)@v@5H zSvs8@H(Y;-YaJlAFVQ5xtGk#3xhb_n)uUh7F}J*7GhXJ6xvzEQqWXa_tIgV z+%Pz;u9NRSPw>=;v7K330=`OC04Q%y)%?nnz;^u0K+1gfF6){7kUXR;G(9%r`*3zs zP3qLxOTd)eOCwZV)~sF)i)@I@!{p{pIh+*rZrO*+kp^^Eu~6JZk&obl)5u(-kA0Og zM~AUv#m0vWqTHup8qkAQ)bSiyz3l_pl%S?dLAV+6)}~$ES+px{K=PZTy3*yR7nkpC zXK4apvko*7`*jNy!4YXtvukm1JQ})ViSoF;Gw|xe}aWyrg@AtA}M#MXvv>*ez zB-NG8Ll3WC$&!!Y$;K^WwT^4J2Kk*%ONE7K2_9}b(gY;-cBrs>XziT|XFgn*kLIEM zu3>S{BpGKYBT1w>ek^-=8>&YjyX|Zie01f!`9r3h<1g9G;Rm+N{57C$N@%K-(IDeM zy>c}8f;pk-r0wdTtw*wPj9PL4?NAT(Q1@LvR!w-3-m^A#HBUj{wZig*T=Q{rED{;J1|QLGPsxjA1%8-63I$pg?h^T_1Y+bO4_!C#H|IP=9m54?Vj zJ?#q_j`wN<22Huyv6Fg3^_4r^qL)B>(^9_)RW^M{b=x0%15{Jj7sCRF0fhEYZDvTy zqN;ur7)$*=b!jA-QI?jyFkkWS z)RTYRaQCE&F0qx!NPFebJ_uBMzID}n-cx+M3I}kYu~@7x5HP|A;)R~1r4w)4K~=p* zB*Jh_LiQT5f4L+dV9hMRgJ~G; z>Kfd4V_17BIGo+y!8>LaS=O5f2jH9Mch;1nL#0Pa@&9>lb?C~)@z~$4;!#WS)XpqF zYLPT3zk6%F0n^Nv`Hwl=`A>Rfrb~nVq|HO;+Le&O3OB+pMMak6{}4-0TLBSA44j9{ zNZJy?#*Dvmm}6`wFih_Vv%v^UK#cXzP@aF;M4Oe@qY{+QdNp3a>bXd_!ad9Wef?qb zOKN)+*we9fc8$PcXhBx>{B1zLT`+8SPD;*m$Pm&B7Qv!MY4$&>=FUZeFIZEm?xU}Q z?;PWJxaqF<{czmna{N*RrW`uwL+6f{ z)tBG$aV-)3<1mv4KNpA=MH+}R$jnmUz8|7E*#44%b{XJj0o&_)H1(48##b=`?9$l&jJYLH zl*`^efjj*lkjSbWz+w-?|GuOr*6g;zeHcL%7Xu$*qBDM?{~Wh`G>YLV+rdgoe=j74 z;(pCV9(mdxK?M^xS_=4Ky)+wB&NtuX#fyP(y8p^QRD`84F;ko(PjdeaXudXyf%gdZ z-A|yHn*+OLM0SaudqLTZF1J0Y)ke$ye9}-w$(!8&-^;FKpZ7LDq|nJuFN0b5ngwDh zAjF{qB#4mrUpacT`oG7n68&2V^O0kMo^%`AGLTNqvrp;KutD5e^n9`4XTQ18?d3ob zC8&7Hp2Y8e*lG9A2b8PRl zM8Kv?hdDv3zso8mF`52)zCTPeT~2F_Ge9Wc2DPXEOtqzy>RA#?bYT;y-BI`gLTTl?yMSM;`*gSHx)1=(ItSUSA--6d3G%g!E2KPavnmL2!1QZ}>@VTJ5>`8^Z zlnD$Ibkkjywp@-V0S8DUb`lhOxC`izBlj#$W=eq! zWKT=Ys&Y@fEag{ldOD;4x^4$$ z1QKs$=f^Re-1`0iRPMG*aVFq}4Ag$|?!CEXnZO%Lll2V15vY~VsTWV+^9~b> z-%t(#PYN*M6B7dFfvZg%-L_Up9&PG`+O{=6qmlL&KS@HA5U_`0ER7Aml~8qLzO9i)C4$lRSB zW|?(Cp=f`wUz*}?pgpbfF=6-b@=>aKzUF_|_!pzRxZ%#o;R}n^S+?DJ`ID$IXaIO? zD)fp8fF%SVk7uSp@_5j zHSLTy2-V6TYWF7Ij?BCBl;9Jn(&MERq$b&X;Kpy~96>y2?gdfw2JfPc>z!5ljc>XW zTdL_1(eIllehj@j0yI3>RUe*x?D(Eaqr6;@EXPBSYKLZX!Sw@C8Fwls=Yh=de#^m4 z$lN=@-WM%%5_OEv+8oAu(KJB;ArGa)9r0y1|41>&NOWz@A2j}6q>w2cKazM76@QA9 z)oGI$cKwR_oMd;mS~6ZRH|;8u?s6+X`9XB#Z45nUhPQ8@+BJf5xV!SDgS}O6E{HZ z0(M4X>@uv{hWkoZ(}91{7uxjM9Z<F6E};YOR;X(YtIrkp6F znb2{fV>+WhLz70wIWf=KG72xmen9D!vFieVvF;u;FsLzcDj@79diOrnFDE#GG z)zY%?_jg0pr>c8d`N`-FwpM*YV%JV@IwTZgj~xZC!}Mk%Rfw}v8Ewl*rP$J$?;uFL zDUv_{VEuHbGh^|oeCexW&WetQ%-=2p|Hj1-$h_RYKm1v_SN}XN=wAmLQi$L#Vz;iAoJ)#fM_>B(wjg^Q|5cFA=(qti`@$oeJEGrTu#?}NAgG%buR zD5lTNS;TpPXI1-kPan=vuT)b6Y3X!St1Qz`XKkq`rWNqFyZ*WpVrl;3vf>eh3*r2B*$~ttP0qc1eXc#W>i#i*HKI8ggJcqOE5mnM&bpd=C|OGQ|2#=*o+O)^ z@5bL3c%_(Xt zFOGsijsz^tn$EPyRTzHiGNs0uj-o3g8}2-1MCFLGU5EQD=N)mVEY&p#xA1YhYrj1H z0R{+xPoo#5e*lwORUJ@S5YjknE)z=*b>t$prXKN*YLl}L5YVliE3j4nuD0gcc|myt#v?<{>VG>^&P5Vj)Rjev##Oov4Xh z3U=}+9q|s;M?)2(@LSQ-UStU<4eB6kH$x!alnk51NCnN#$&4$iH(SE82EVx^Vg~b@ zwfqga^tkdFha;l4{ZklZScx6gqwnC3qa99?thnmQrdlZ@rb&=NuNm|mV$FWcW?Xvr zn}wj*r=903c0Bdhm9WxV5}?j&WezoyGdPiW8bHkGF*MD0^q=i@;6eAfB0(D>TvJdGh zi-i8%Os6{g)oY#I8`5yHBeuTmUcK_ZmTZE!YrG(g$WXox5Czf3=^Xd**QJIzs((bm z(bUP?A_HSBH}k9OKYHgKxihR-`oWx|n?8m8!gcz(FKDKnTsJVDU^Jato;kIgSgyv$ zG6z)R%dK~Y;_kM*cSBXSJg1LzXexP8-93EproK&z*x-lwx;8bXdc|R(shildq?j8F z;wzIXSS&Ip4@S(Qj2kd1lTZvu6y28(scuQ!IXTEp>r@Q6zkI{!(P1E6qP8fC7rAD+ z9z|VSwzbgcCheZy9#E#4!F-uZH6gm@lk)55=>PTiX5^rkSlG z?ZFBRf^(MfQl(chzyAn$%PB0Pw|L7NJHEMpYF|Hikgn>&%BT33%e`R#$_Y zrk|a?XlBa~3S3;qvRtg7Jv}AF_e1EY4Mk79_hMls_E`jd;UyB(8>X)au~l^0_@55E z!s^yMN-f;}k78`Ur|@HND0w825_a9LVqS)k^aIBN@l8?Q!A?|4`l|Tj#2&%v6kf^? ze$$#0s7E6lIViEMcDU=7T!Q&k9qh+aSRHlPt-`)B9~Oh>&$Sco1=`+`*t6i9UKigD zmKxlLmEf8;C2=*`OqRE}h+7_3h`Nlv8ir4q3zwU%+5s;6(~j5JN?cs*1UJyE zE)`!F5OmUc5U{y_Z~YMOOYyNoyzx6LS=Z~3@$;9>VzKX5_~cbjqvI>t^cQy6pQC#m z+Dtg}C*!>056frN0=7Jr6SJ(cy)@$s!;%xtl}NdLFf)CqT)%)BOCG$|hm*!R`NYLX k&26mO0yP{bja297KOOt{L`3+!AmC3|Q(xn~+JlJy0Zq`9@Bjb+ literal 0 HcmV?d00001 diff --git a/source/constants.py b/source/constants.py index df9695f..486b8ae 100755 --- a/source/constants.py +++ b/source/constants.py @@ -71,6 +71,7 @@ PARCHMENT_YELLOW = (207, 146, 83) # 退出游戏按钮 EXIT = "exit" +HELP = "help" # 游戏界面可选的菜单 LITTLE_MENU = "littleMenu" BIG_MENU = "bigMenu" @@ -110,6 +111,7 @@ GAME_LOSE = "game lose" GAME_VICTORY = "game victory" LEVEL = "level" AWARD_SCREEN = "award screen" +HELP_SCREEN = "help screen" # 界面图片文件名 MAIN_MENU_IMAGE = "MainMenu" @@ -117,6 +119,7 @@ OPTION_ADVENTURE = "Adventure" GAME_LOSE_IMAGE = "GameLose" GAME_VICTORY_IMAGE = "GameVictory" AWARD_SCREEN_IMAGE = "AwardScreen" +HELP_SCREEN_IMAGE = "HelpScreen" # 地图相关内容 BACKGROUND_NAME = "Background" @@ -509,8 +512,7 @@ SNORKELZOMBIE = "SnorkelZombie" BOOMDIE = "BoomDie" # 对僵尸的攻击类型设置 -ZOMBIE_DEAFULT_DAMAGE = "helmet2First" -ZOMBIE_HELMET_2_FIRST = "helmet2First" # 优先攻击二类防具 +ZOMBIE_DEAFULT_DAMAGE = ZOMBIE_HELMET_2_FIRST = "helmet2First" # 优先攻击二类防具 ZOMBIE_COMMON_DAMAGE = "commonDamage" # 优先攻击僵尸与一类防具的整体 ZOMBIE_RANGE_DAMAGE = "rangeDamage" # 范围攻击,同时伤害二类防具与(僵尸与一类防具的整体) ZOMBIE_ASH_DAMAGE = "ashDamage" # 灰烬植物攻击,直接伤害本体 diff --git a/source/state/mainmenu.py b/source/state/mainmenu.py index 836d739..a65e11d 100644 --- a/source/state/mainmenu.py +++ b/source/state/mainmenu.py @@ -34,26 +34,30 @@ class Menu(tool.State): self.bg_rect = self.bg_image.get_rect() self.bg_rect.x = 0 self.bg_rect.y = 0 - + def setupOptions(self): # 冒险模式 - self.adventure_frames = [] - frame_names = (f"{c.OPTION_ADVENTURE}_0", f"{c.OPTION_ADVENTURE}_1") frame_rect = (0, 0, 330, 144) - for name in frame_names: - self.adventure_frames.append(tool.get_image_alpha(tool.GFX[name], *frame_rect, c.BLACK, 1)) + # 写成列表生成器方便IDE识别与自动补全 + self.adventure_frames = [tool.get_image_alpha(tool.GFX[f"{c.OPTION_ADVENTURE}_{i}"], *frame_rect) for i in range(2)] self.adventure_image = self.adventure_frames[0] self.adventure_rect = self.adventure_image.get_rect() self.adventure_rect.x = 400 self.adventure_rect.y = 60 self.adventure_highlight_time = 0 - + + # 小游戏 + littleGame_frame_rect = (0, 7, 317, 135) + self.littleGame_frames = [tool.get_image_alpha(tool.GFX[f"{c.LITTLEGAME_BUTTON}_{i}"], *littleGame_frame_rect) for i in range(2)] + self.littleGame_image = self.littleGame_frames[0] + self.littleGame_rect = self.littleGame_image.get_rect() + self.littleGame_rect.x = 397 + self.littleGame_rect.y = 175 + self.littleGame_highlight_time = 0 + # 退出按钮 - self.exit_frames = [] - exit_frame_names = (f"{c.EXIT}_0", f"{c.EXIT}_1") exit_frame_rect = (0, 0, 47, 27) - for name in exit_frame_names: - self.exit_frames.append(tool.get_image_alpha(tool.GFX[name], *exit_frame_rect, c.BLACK, 1.1)) + self.exit_frames = [tool.get_image_alpha(tool.GFX[f"{c.EXIT}_{i}"], *exit_frame_rect, scale=1.1) for i in range(2)] self.exit_image = self.exit_frames[0] self.exit_rect = self.exit_image.get_rect() self.exit_rect.x = 730 @@ -61,29 +65,24 @@ class Menu(tool.State): self.exit_highlight_time = 0 # 选项按钮 - self.option_button_frames = [] - option_button_frame_names = (f"{c.OPTION_BUTTON}_0", f"{c.OPTION_BUTTON}_1") option_button_frame_rect = (0, 0, 81, 31) - for name in option_button_frame_names: - self.option_button_frames.append(tool.get_image_alpha(tool.GFX[name], *option_button_frame_rect, c.BLACK)) + self.option_button_frames = [tool.get_image_alpha(tool.GFX[f"{c.OPTION_BUTTON}_{i}"], *option_button_frame_rect) for i in range(2)] self.option_button_image = self.option_button_frames[0] self.option_button_rect = self.option_button_image.get_rect() self.option_button_rect.x = 560 self.option_button_rect.y = 490 - self.option_button_hightlight_time = 0 - - # 小游戏 - self.littleGame_frames = [] - littleGame_frame_names = (c.LITTLEGAME_BUTTON + "_0", c.LITTLEGAME_BUTTON + "_1") - littleGame_frame_rect = (0, 7, 317, 135) - for name in littleGame_frame_names: - self.littleGame_frames.append(tool.get_image_alpha(tool.GFX[name], *littleGame_frame_rect, c.BLACK, 1)) - self.littleGame_image = self.littleGame_frames[0] - self.littleGame_rect = self.littleGame_image.get_rect() - self.littleGame_rect.x = 397 - self.littleGame_rect.y = 175 - self.littleGame_highlight_time = 0 + self.option_button_highlight_time = 0 + # 帮助菜单 + help_frame_rect = (0, 0, 48, 22) + self.help_frames = [tool.get_image_alpha(tool.GFX[f"{c.HELP}_{i}"], *help_frame_rect) for i in range(2)] + self.help_image = self.help_frames[0] + self.help_rect = self.help_image.get_rect() + self.help_rect.x = 653 + self.help_rect.y = 520 + self.help_hilight_time = 0 + + # 计时器与点击信号记录器 self.adventure_start = 0 self.adventure_timer = 0 self.adventure_clicked = False @@ -93,21 +92,25 @@ class Menu(tool.State): # 高亮冒险模式按钮 if self.inArea(self.adventure_rect, x, y): self.adventure_highlight_time = self.current_time + # 高亮小游戏按钮 + elif self.inArea(self.littleGame_rect, x, y): + self.littleGame_highlight_time = self.current_time # 高亮退出按钮 elif self.inArea(self.exit_rect, x, y): self.exit_highlight_time = self.current_time # 高亮选项按钮 elif self.inArea(self.option_button_rect, x, y): - self.option_button_hightlight_time = self.current_time - # 高亮小游戏按钮 - elif self.inArea(self.littleGame_rect, x, y): - self.littleGame_highlight_time = self.current_time + self.option_button_highlight_time = self.current_time + # 高亮帮助按钮 + elif self.inArea(self.help_rect, x, y): + self.help_hilight_time = self.current_time # 处理按钮高亮情况 self.adventure_image = self.chooseHilightImage(self.adventure_highlight_time, self.adventure_frames) self.exit_image = self.chooseHilightImage(self.exit_highlight_time, self.exit_frames) - self.option_button_image = self.chooseHilightImage(self.option_button_hightlight_time, self.option_button_frames) + self.option_button_image = self.chooseHilightImage(self.option_button_highlight_time, self.option_button_frames) self.littleGame_image = self.chooseHilightImage(self.littleGame_highlight_time, self.littleGame_frames) + self.help_image = self.chooseHilightImage(self.help_hilight_time, self.help_frames) def chooseHilightImage(self, hilightTime, frames): if (self.current_time - hilightTime) < 80: @@ -116,31 +119,30 @@ class Menu(tool.State): index = 0 return frames[index] - def checkAdventureClick(self, mouse_pos): - x, y = mouse_pos - if self.inArea(self.adventure_rect, x, y): - self.adventure_clicked = True - self.adventure_timer = self.adventure_start = self.current_time - self.persist[c.GAME_MODE] = c.MODE_ADVENTURE - # 播放进入音效 - c.SOUND_EVILLAUGH.play() - c.SOUND_LOSE.play() - - # 点击到按钮,修改转态的done属性 - def checkExitClick(self, mouse_pos): - x, y = mouse_pos - if self.inArea(self.exit_rect, x, y): - self.done = True - self.next = c.EXIT + def respondAdventureClick(self): + self.adventure_clicked = True + self.adventure_timer = self.adventure_start = self.current_time + self.persist[c.GAME_MODE] = c.MODE_ADVENTURE + # 播放进入音效 + c.SOUND_EVILLAUGH.play() + c.SOUND_LOSE.play() - # 检查有没有按到小游戏 - def checkLittleGameClick(self, mouse_pos): - x, y = mouse_pos - if self.inArea(self.littleGame_rect, x, y): - self.done = True - self.persist[c.GAME_MODE] = c.MODE_LITTLEGAME - # 播放点击音效 - c.SOUND_BUTTON_CLICK.play() + # 按到小游戏 + def respondLittleGameClick(self): + self.done = True + self.persist[c.GAME_MODE] = c.MODE_LITTLEGAME + # 播放点击音效 + c.SOUND_BUTTON_CLICK.play() + + # 点击到退出按钮,修改转态的done属性 + def respondExitClick(self): + self.done = True + self.next = c.EXIT + + # 帮助按钮点击 + def respondHelpClick(self): + self.done = True + self.next = c.HELP_SCREEN def setupOptionMenu(self): # 选项菜单框 @@ -220,12 +222,10 @@ class Menu(tool.State): infoImg_rect.y = y surface.blit(infoImg, infoImg_rect) - def checkOptionButtonClick(self, mouse_pos): - x, y = mouse_pos - if self.inArea(self.option_button_rect, x, y): - self.option_button_clicked = True - # 播放点击音效 - c.SOUND_BUTTON_CLICK.play() + def respondOptionButtonClick(self): + self.option_button_clicked = True + # 播放点击音效 + c.SOUND_BUTTON_CLICK.play() def showCurrentVolumeImage(self, surface): # 由于音量可变,因此这一内容不能在一开始就结束加载,而应当不断刷新不断显示 @@ -241,9 +241,10 @@ class Menu(tool.State): surface.blit(self.bg_image, self.bg_rect) surface.blit(self.adventure_image, self.adventure_rect) + surface.blit(self.littleGame_image, self.littleGame_rect) surface.blit(self.exit_image, self.exit_rect) surface.blit(self.option_button_image, self.option_button_rect) - surface.blit(self.littleGame_image, self.littleGame_rect) + surface.blit(self.help_image, self.help_rect) if self.game_info[c.LEVEL_COMPLETIONS] or self.game_info[c.LITTLEGAME_COMPLETIONS]: surface.blit(self.sunflower_trophy, self.sunflower_trophy_rect) @@ -294,7 +295,13 @@ class Menu(tool.State): if (self.game_info[c.LEVEL_COMPLETIONS] or self.game_info[c.LITTLEGAME_COMPLETIONS]): self.checkSunflowerTrophyInfo(surface, x, y) if mouse_pos: - self.checkExitClick(mouse_pos) - self.checkOptionButtonClick(mouse_pos) - self.checkLittleGameClick(mouse_pos) - self.checkAdventureClick(mouse_pos) + if self.inArea(self.adventure_rect, *mouse_pos): + self.respondAdventureClick() + elif self.inArea(self.littleGame_rect, *mouse_pos): + self.respondLittleGameClick() + elif self.inArea(self.option_button_rect, *mouse_pos): + self.respondOptionButtonClick() + elif self.inArea(self.exit_rect, *mouse_pos): + self.respondExitClick() + elif self.inArea(self.help_rect, *mouse_pos): + self.respondHelpClick() diff --git a/source/state/screen.py b/source/state/screen.py index e02824c..657c06d 100644 --- a/source/state/screen.py +++ b/source/state/screen.py @@ -127,32 +127,7 @@ class AwardScreen(tool.State): main_menu_text_rect.x = 29 self.main_menu_button_image.blit(main_menu_text, main_menu_text_rect) self.image.blit(self.main_menu_button_image, self.main_menu_button_image_rect) - else: - ## 继续按钮 - self.next_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) - self.next_button_image_rect = self.next_button_image.get_rect() - self.next_button_image_rect.x = 70 - ### 继续按钮上的文字 - font = pg.font.Font(c.FONT_PATH, 18) - next_text = font.render("继续", True, c.NAVYBLUE) - next_text_rect = next_text.get_rect() - next_text_rect.x = 37 - ## 主菜单按钮 - self.main_menu_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) - self.main_menu_button_image_rect = self.main_menu_button_image.get_rect() - self.main_menu_button_image_rect.x = 620 - self.next_button_image_rect.y = self.main_menu_button_image_rect.y = 540 - ### 主菜单按钮上的文字 - main_menu_text = font.render("主菜单", True, c.NAVYBLUE) - main_menu_text_rect = main_menu_text.get_rect() - main_menu_text_rect.x = 29 - self.next_button_image.blit(next_text, next_text_rect) - self.main_menu_button_image.blit(main_menu_text, main_menu_text_rect) - self.image.blit(self.next_button_image, self.next_button_image_rect) - self.image.blit(self.main_menu_button_image, self.main_menu_button_image_rect) - # 显示向日葵奖杯的情况 - if self.show_only_one_option: # 绘制向日葵奖杯 if (self.game_info[c.LEVEL_COMPLETIONS] and self.game_info[c.LITTLEGAME_COMPLETIONS]): frame_rect = (157, 0, 157, 269) @@ -186,7 +161,29 @@ class AwardScreen(tool.State): intro_content_rect.x = 290 intro_content_rect.y = 370 self.image.blit(intro_content_img, intro_content_rect) - + else: + ## 继续按钮 + self.next_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.next_button_image_rect = self.next_button_image.get_rect() + self.next_button_image_rect.x = 70 + ### 继续按钮上的文字 + font = pg.font.Font(c.FONT_PATH, 18) + next_text = font.render("继续", True, c.NAVYBLUE) + next_text_rect = next_text.get_rect() + next_text_rect.x = 37 + ## 主菜单按钮 + self.main_menu_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.main_menu_button_image_rect = self.main_menu_button_image.get_rect() + self.main_menu_button_image_rect.x = 620 + self.next_button_image_rect.y = self.main_menu_button_image_rect.y = 540 + ### 主菜单按钮上的文字 + main_menu_text = font.render("主菜单", True, c.NAVYBLUE) + main_menu_text_rect = main_menu_text.get_rect() + main_menu_text_rect.x = 29 + self.next_button_image.blit(next_text, next_text_rect) + self.main_menu_button_image.blit(main_menu_text, main_menu_text_rect) + self.image.blit(self.next_button_image, self.next_button_image_rect) + self.image.blit(self.main_menu_button_image, self.main_menu_button_image_rect) def startup(self, current_time, persist): self.start_time = current_time @@ -214,3 +211,44 @@ class AwardScreen(tool.State): if self.inArea(self.next_button_image_rect, *mouse_pos): self.next = c.LEVEL self.done = True + +class HelpScreen(tool.State): + def __init__(self): + tool.State.__init__(self) + + def startup(self, current_time, persist): + self.start_time = current_time + self.persist = persist + self.game_info = persist + self.setupImage() + pg.mixer.music.stop() + + def setupImage(self): + # 主体 + frame_rect = (-100, -50, 800, 600) + self.image = tool.get_image(tool.GFX[c.HELP_SCREEN_IMAGE], *frame_rect, colorkey=None) + self.rect = self.image.get_rect() + self.rect.x = 0 + self.rect.y = 0 + + # 主菜单按钮 + frame_rect = (0, 0, 111, 26) + self.main_menu_button_image = tool.get_image_alpha(tool.GFX[c.UNIVERSAL_BUTTON], *frame_rect) + self.main_menu_button_image_rect = self.main_menu_button_image.get_rect() + self.main_menu_button_image_rect.x = 343 + self.main_menu_button_image_rect.y = 500 + ### 主菜单按钮上的文字 + font = pg.font.Font(c.FONT_PATH, 18) + main_menu_text = font.render("主菜单", True, c.NAVYBLUE) + main_menu_text_rect = main_menu_text.get_rect() + main_menu_text_rect.x = 29 + self.main_menu_button_image.blit(main_menu_text, main_menu_text_rect) + self.image.blit(self.main_menu_button_image, self.main_menu_button_image_rect) + + def update(self, surface, current_time, mouse_pos, mouse_click): + surface.blit(self.image, self.rect) + if mouse_pos: + # 检查主菜单点击 + if self.inArea(self.main_menu_button_image_rect, *mouse_pos): + self.next = c.MAIN_MENU + self.done = True From f939e1021524831cb1951fb21214a9c50aef8736 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 10:12:51 +0800 Subject: [PATCH 03/18] =?UTF-8?q?=E8=B7=9F=E8=BF=9B=E8=87=AA=E8=BF=B0?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9d3dde7..8ecfa22 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ * 任意一游戏模式全部完成显示银向日葵奖杯 * 所有模式全部完成显示金向日葵奖杯 * 光标移动到向日葵奖杯上是显示当前各个模式通关次数 +* 含有游戏帮助界面 QwQ ## 环境要求 From 02e77c081fadb16f03ddc63226593f9e28d6286d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 10:21:53 +0800 Subject: [PATCH 04/18] =?UTF-8?q?=E6=9B=B4=E6=94=B9colorkey?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resources/graphics/Screen/HelpScreen.png | Bin 78407 -> 34020 bytes source/state/screen.py | 3 ++- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/graphics/Screen/HelpScreen.png b/resources/graphics/Screen/HelpScreen.png index 8f5e535d6fb4ac22ef1078038bb7149e484fffee..05a8180a72bb50b9085fe2b541b49392d983bc32 100644 GIT binary patch literal 34020 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 z zOZ{65|dDk`O(TJ&0Pks%|notDmE_@4w z6v&>&#>B^ww z8!<_mo?i4plwtBbiC2oL{INE_EI3(ydB*x*LMO`Z_2-Q-_SrC_xGOwGR~{Wb>lNR_ zJCL!o7I+pp63t48{pTl_jG93K7|RHh9XNMc9=T;J-3G)BRBOfrF+>j7hN$co8dKO)92B{#qujX6NGASojTIDO#8=$Nmv7gT`d|WQ2vr zt89*cGLpeB_2pHpodh4Btm%XZ+UBNnI3U7y;y{K3K`kL}Ey4^TeTO80#BOmOn0A}T zMd5|S%GSyQEyg13J(?+E5#6Bbp#16xz>6Al2)Xr=*YZ1~!9KUZwSnV;_skR%4&oEW zXzEM^+cBE|0+ngEhS~Y3tS$msP?(LD|0$RS^9WG06&s5k!iXqvJ)*R;;H8Cl6xJ}) zTK`m(hDU9gT{n_)N{D#SQ_R|uvH?BgFuR6Xl#nUt5WR2FLQx7r9Z4IKKO7BCVjebO z6Ow>r2vq%;F}W0B9E_wCD5i$}YaW8V-xcLajmWa(M?+C%-2awAz}GtE3e4_rcZAC< zOR@%K-NExmCluyWC~K`~e#DmRaOgR1V8(=DhDB8I97w!TWOQNkA1Di85rA!j2`8{GDx7vvjZVRmeBfw7Jf1If zZQmdZF9?TTnvfj9lzw$-?zG5u-y0QilwwK+W~WfLuI}yaet)xf82*rD`F~qWpa1&! z8crh1N2M@q-TMIR+_E5`cix*(Q3Osb8IKrkje^9yv2*nF9dAaV4y1`JTtJj2l0b0z zjP3Q(-!q`;&XLX{>~_`_Jz@@+t&2!7&Qh=wteE0lMJgf+aE2On`pr-h?%=(mmqjCe zh!y5VGPQ{;LE}<{j^4RZl-0U`;E$_EK6xSfpO$n@maWlcX_n!YZ43e$EcR-g)f^L{ z?8I9$c$Ci1R@{029BiPQ+BEdg29&Wy4I$UZ3`o2=2nsRP>EFN`xl%huHk=&~M;4aI z;1yb~d!(f5vQ(@>nzr^(yQCA@gwNjOf^cz$dXU|qVbx9yUL0nao(LbSs!wW{LdP~T zi-W}rS%G7Lh%Ng=)_!9g&Z5wz3bT_a%P>P=A!Ccc#f~9<#PhhT4uvfH;&0<9bBQoj zA_I+V>Y>0PE}WGf!$+J3fF#`-_tA*WwkekYnjxx4yOBjsS*lJpaK#vBzmQj@z%5)0 zs5HaA25CoZ;p%|_vVyWj18`J-lqI>U?O67rtW_W0$cojQSq7f0&=f`JKk0rxscGNv zRhDZgqsQWcL>)+^QSbr644A6^0C}I!T-BB3U{PBMCr}J6jdwgCKLH+7eto4S!hn?pe?Yc7li3u^LG>zyxqN zK^Ylg#lb|R4*TRcVN=f$9UN*Gy7!8{621(p)rs-SH3V@tUrJ`=Ga~Sg;-96!>=eo{ z{6`~PfiT5SuLjNfb^Wr=FN;7}N?DTb7WR{POQ=O#;PGh*M??$K^p-p1KVjx?OTSpN zI?+rdW2K~cUs1pZmAlSiDy9axIr=-6_jjDlth7PSTP#e~Xr9FfDf@M32c z7VSv#EVUQ!^mU?7^X}+5=v)@sJdgw88o#$WDr6u6g!{4J>9TLqTPx_b9`Uc(kLAMLshN6c|MFH=86C zsxeUKNOoU+%^iie9D6lvz;kUIZREKO4+jq(BS=oQ#O zSrmnd2Bwwl|1MCB{u3$MVfTe4ElHV05lHnzP$hW$Y@TNwm`ocsp|I=_`U)%r@x2F8 zW+ipvxz4hSq)Bs&TLfflQvk}9be?O$a3`03(u`$|%LiEfHSYnn|JPCWAHRaCH}PLZ z8BX8WWtwN&1k^sZ93l-1mDxz7!a#W%igb)JjdWk$l+AGtkHL;Z=ye1c3myy2m!^#$ zR!wy@IpOth3ejBBdLOt5Ts_I*7LEi5j_dLR%@2EB;60E=LcNb^Lldh>W|UZzQJ^$` z5ujF7971Tv6bv zrtu;Wd|m2%1v0A0xTM+uz8JD-!l-4D4|BL}EX|6r;{;r=0Fahawc%dh#331Fm)w9i zvHvfk?7zj+yQ2ARg46q3J9J7=7Njua^HG*>%!0h26!}s73cZn1cWoL=2^({tQLtvO85TYT2k$}-J$ zwik*3^wJttB&QwcQ3z(+!Zarp23k}n&rTEkhHV6?J(lv~g6_~HD4;R7EjP!@zBi1& zS5QV`B#I=vzrDY|Z&6f38UxHeC5AS5Iu`M6D2tTD7^+pUr~m@W`cn{+zG+8%6u zUqzvt_);H&N6o>fmppn=0hreEG5m0Hs!Srp##_U0iadOa+yf;(wN>cwosu? zUjXk=o^D%YxH zPo-58IxDI4FAQy1Tn&wcsu_dwnG~X}rSD``v%s0fQoELBWet`Jz*Y|FYQo6+#zN=% zGV(`IgkfQCs|fY#P#_ncmdy|)gvq#WO==i9VVN2YNrqV)!rt9^3Y)0A=!ISb#Oj%WR_Y&lFlE zH(|VnkPsXp4}s#jAsTJfs*Va|SMPQzW-KLPInjh6C|a?}_5llGsv=3L2x?9w2eHml zK#Kt)d!EbZxT7NRWCtmNzXUTH$?_!1vRKggKk3UI)9bGFXH}McLqDF)oOgj8 zjQh=Sl?P9m zYBZYFfP>d&QCI3;??2Eyu=0 znd4YMS>nuVLz<*LrS-Q82xKg}sYV79SbMl;_wpGXx@K+)Nc zPuj!m#<4WUx4mo!E5Gxc9uJ#5Cv1Au8&2(G?mQu}p%opZ9lQB9Y$dU6B>>BYzXL$4 zo7aYmr3r?+v7-Q!{m5c^`I@e^Zq=G1IUj1};5$a zODN+a%Cu>yB%hnO*a#xh4+Unm=J7|D-KIU+@;^J{jN_A=0-LZ(Ky-c_sz}7cra%}M z<5H;_75^yExK7TMx;v^)%AbaA%wK2=oE*T)wqlgnGsCD}8VY_*vFjWETHCyqM!$Qi zBJdg=Ws(7Nk@8Z<>+HL|T|^lj}om@W9JIBzkk`wl?!zH|p8^{uhnwUIy^O=z52aZ9>6 zV7gSDYUE^le}qeaB085%8-EJ`eA`IMHM|I@Q0(>zK8@=rgG#t(&+?6HuG^#S8C;xh z3S#?Xt4~P){Ok&+ExE&0MyruQ6q+YkdX~jR)5L|g)X46FGPb%h$Q{qz!b~LXZ1>GL z7wO=GmjMkaCrYJiD0$1`e1}2Vl)gLjNXs3;?0y+Dcj6qgAUt z7wJZzB1RhRfimE$-}@PqapNzK%XkQwH+2fa9nuf|bARFlo6VvK+r@YK;c})_KM=|c z#u*7_Ggs!H2ke^cc_B~MFjks&h*g_?FK7!FcqehaAOj68+Q>S^#Z+H(m+)ZE2^Vj540 z{u!zcq6rVkdZlZ5Oq|0%CChr>a`)&%eOZ>sKV|%XiH`p4VE_Xw08RZ|rp2;arsjB# z!D^%qD=ktt)Z2?7s$wliW!r}5Qk#MzZ*j`2%V$&Di;T~oB(_dl!fBFhTSqQD|ohngT5>X~; zI1Q~X3recDJ)%{|a%WB}AxTeT>)9YV%o(Ihf$E@Ro!9mV+q=d1X_5U6-I~49({o;dllVyKCWCu zSvLG;4yuugBpVQMvN998rN=nEuA=Ne3I&H&W1f?1in3pkE&r{{s$xTX6%Uwa+)%fv z*7B4_aq>wqP(GG4flQH6uyLyyg&{g~50i~HC&v+aYzsA2Yn5X+i0{c*^i>~IXmXy` zc)z14mTR|?% zKk*;J&=2L7O^v{#FQt9IS5dYNW}IFe|9_cf^JRlfxg|GXt;NuQTrsAo(O^nM06sH8 zmrS6i)HlT~PAWO*?EklSC0LH5Ff?rj+c?1ek2`2#@eVji<;DD(uBjvr>qnBYkmm2q zUtuWmQsdv&uxw+?EFa^ydS!eOWFOtJo#{1&2+zUUaX%FRJPp^wz+4j;%3EgpTS;+} z8N2VE#V6%tmB#EgvbJS|jsv&-j6+BaqdWzxe`Wg~X8EL(&^?}r81vRIBud$4>>X2#n-|ITk@WrS&U2<)|EJOinx0-i>WR^V(S#}{MXk*#!P|dQ@ zoEN^2z_O+>?*PeprAt{xj{nv0=Kz{4y9qdZ`Da=7p74wfUkh0gCGR@RyeDIOnt2a! z_VQ1&tl?IuWSOmh@X_Sg{ZPlUWfYbQ_#6N)=tIM|!&Jn`29{kuyF)B%cK|;R3av4~ zp@cG)4gGa?kp16Sb`MnSWI%WYbCDj>v#inV_aX6g2^(g)QSva@;6;ron;5$ZkSIol zLrnRx7<+S#WDxYHiLo2OSPV4U<+JRmFI)dA#Att2HyXYe62q|+u?);O2={rVTE{XY zRfx~t@Wa4!xQ0_?mat4;*e?s;G!zS{ZPNZcK<`<|6(xXX1uVO?g-@2h`Qmul4KIbH zta79>3p8dm%P=Swu*^7NHugbyx!|>U#(?4rPQ%bx_BU8sWS`QYQc)1Ie3sSG18RY&yAX&H)1J4dn12H) zje}eFkN@1i&)o=ohGkA-Vo+VoE~J@cjcK0+5{w_ipgvI#BR@ek2w|*ssm8>his!A9 zbSXsR9&|{4pdr$p`IcwoxFNuoGx|WjGvH;`ei} z@9WO%+1s(ay6Tr-S84?N;eDQVq#xaku?T}iCzyM}(+o@)_aXJyk0Q-3?s1NzLiOtV zezun@AF0a@|Lwj)F^qF%nT9+}lqmXOm4yh+5-mSE#iCh`kv!|i(q{-8m%mCJ%Gv*3 zQzXm=9K?}(r*UBVafRz1X7OR|ssX#=VHE*ehF{5h27MDKU>p#PQi5q6SG(>s=4=Xj zNwNfUQwB1R((G{7d239#DyenZ>9l=h7mb&f+ZBghdz)K1$Hu3 z98@4D=G%dvfh69EiaVPUtjfHPR7|7Va3t>loWt6E8r1@#~c#_l+fs3W4?I^Z^;CNbpq}LN%_zg z3;($v8-I1eX|#&!5LjAZU|zjF>IO6xb`&Co%O24>;uwfW|~MQUFQ!Tx_iPAyj1j9;huT zLtEms&v@lY70e)=ywz!z5BO3%yZ8ao%_9~VU+Q4JFXlf%m()xSgz@HUOFwb{QJ{?z z%P+`B*ZJQw!gj1d`?VyE48Zw7({sQ(4j^nU%LK_+$NDXz$tA#M3@3}1olC})|L7M3 z97lRe7U@906N4e`Z;3KjoP#o*eWDsEhGoADA6TBttmW*!9mn--w&PH8@YhHuPD!q@ z?unm@b$PfZ^=wJZrD~KBLu7bCRtc&D)Ho;?P%&(mIQ_?F!>IZ(5#Fwo8{J$ERx&za z+5~K~Y5p0u2heLFqA3w>1bJ>~X@Od%r6uFtB&;(#lG~Hkf%dejaR4WBg>#)t>~-bo z6}6t$dNm7Yqqn?z`~5uV4HEdO{v9=Dqivd0D{Ixn#+mi2qq~NUxriGi381uRSvTv95x-Yk;|>HL137Q;-W>7JB$Fm$c?B%PL818>wg6n# zepx_khQhVIz)^ozm$DH=)`MSG!HOWlIdcrRgS6KTTP+gQ^toEZZgbzZP%?q-lO5a;aj`!g`HW{Z=9yHyxCcxAM6CxKj^dzov4nI9C4+mZ gTR(tYq9r5zKis2Y*@&?(iU0rr07*qoM6N<$f_^Wb0{{R3 literal 78407 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 diff --git a/source/state/screen.py b/source/state/screen.py index 657c06d..1f99174 100644 --- a/source/state/screen.py +++ b/source/state/screen.py @@ -226,7 +226,7 @@ class HelpScreen(tool.State): def setupImage(self): # 主体 frame_rect = (-100, -50, 800, 600) - self.image = tool.get_image(tool.GFX[c.HELP_SCREEN_IMAGE], *frame_rect, colorkey=None) + self.image = tool.get_image(tool.GFX[c.HELP_SCREEN_IMAGE], *frame_rect, colorkey=(0, 255, 255)) self.rect = self.image.get_rect() self.rect.x = 0 self.rect.y = 0 @@ -246,6 +246,7 @@ class HelpScreen(tool.State): self.image.blit(self.main_menu_button_image, self.main_menu_button_image_rect) def update(self, surface, current_time, mouse_pos, mouse_click): + surface.fill(c.BLACK) surface.blit(self.image, self.rect) if mouse_pos: # 检查主菜单点击 From 8aea3e7c3646a5ed1788dd7459d5055a1b1803cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 10:28:53 +0800 Subject: [PATCH 05/18] =?UTF-8?q?=E5=B9=B3=E8=A1=A1=E9=9A=BE=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pypvz.py | 2 +- source/state/level.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pypvz.py b/pypvz.py index 8e4a2bf..89e0b5a 100755 --- a/pypvz.py +++ b/pypvz.py @@ -32,7 +32,7 @@ if __name__=="__main__": c.GAME_LOSE: screen.GameLoseScreen(), c.LEVEL: level.Level(), c.AWARD_SCREEN: screen.AwardScreen(), - c.HELP_SCREEN: screen.HelpScreen(), + c.HELP_SCREEN: screen.HelpScreen(), } game.setup_states(state_dict, c.MAIN_MENU) game.run() diff --git a/source/state/level.py b/source/state/level.py index cc6872e..5f91919 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -218,8 +218,8 @@ class Level(tool.State): if current_time - self.waveTime > 1500: for item in self.graveSet: itemX, itemY = self.map.getMapGridPos(*item) - # 目前设定:2/3概率普通僵尸,1/3概率路障僵尸 - if random.randint(0, 2): + # 目前设定:1/2概率普通僵尸,1/2概率路障僵尸 + if random.randint(0, 1): self.zombie_groups[item[1]].add(zombie.NormalZombie(itemX, itemY, self.head_group)) else: self.zombie_groups[item[1]].add(zombie.ConeHeadZombie(itemX, itemY, self.head_group)) @@ -232,11 +232,11 @@ class Level(tool.State): mapX, mapY = random.randint(5, 8), random.randint(2, 3) itemX, itemY = self.map.getMapGridPos(mapX, mapY) # 用随机数指定产生的僵尸类型 - # 带有权重 - zombieType = random.randint(1, 6) + # 暂时设定为生成概率相同 + zombieType = random.randint(1, 3) if zombieType == 1: self.zombie_groups[mapY].add(zombie.BucketHeadDuckyTubeZombie(itemX, itemY, self.head_group)) - elif zombieType <= 3: + elif zombieType == 2: self.zombie_groups[mapY].add(zombie.ConeHeadDuckyTubeZombie(itemX, itemY, self.head_group)) else: self.zombie_groups[mapY].add(zombie.DuckyTubeZombie(itemX, itemY, self.head_group)) From e00a640d768d1a608650e0f59d8e25e0f46737e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 10:34:51 +0800 Subject: [PATCH 06/18] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=88=AA=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 ++ demo/demo22.webp | Bin 0 -> 64396 bytes demo/demo23.webp | Bin 0 -> 47310 bytes 3 files changed, 2 insertions(+) create mode 100644 demo/demo22.webp create mode 100644 demo/demo23.webp diff --git a/README.md b/README.md index 8ecfa22..79d8a7a 100644 --- a/README.md +++ b/README.md @@ -313,6 +313,8 @@ pyinstaller -F pypvz.py ` ![截屏19](/demo/demo19.webp) ![截屏20](/demo/demo20.webp) ![截屏21](/demo/demo21.webp) +![截屏22](/demo/demo22.webp) +![截屏23](/demo/demo23.webp) ## 关于日志与反馈 diff --git a/demo/demo22.webp b/demo/demo22.webp new file mode 100644 index 0000000000000000000000000000000000000000..04f94e302f8b9a975661aff4d267dfea80baf4a4 GIT binary patch literal 64396 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 GzyJWH8Fa${ literal 0 HcmV?d00001 From 3117a85c881bb27ead95d2594c05d4ab53a908e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 10:39:59 +0800 Subject: [PATCH 07/18] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=B8=AE=E5=8A=A9?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/state/screen.py | 1 + 1 file changed, 1 insertion(+) diff --git a/source/state/screen.py b/source/state/screen.py index 1f99174..4a6e873 100644 --- a/source/state/screen.py +++ b/source/state/screen.py @@ -221,6 +221,7 @@ class HelpScreen(tool.State): self.persist = persist self.game_info = persist self.setupImage() + pg.display.set_caption("pypvz: 帮助") pg.mixer.music.stop() def setupImage(self): From a87233c920a47905a9d69cc26bdf80db7f2736c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sat, 30 Jul 2022 13:51:12 +0800 Subject: [PATCH 08/18] =?UTF-8?q?=E5=BF=BD=E7=95=A5=E6=9B=B4=E5=A4=9A?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index a4712bc..fe3b0fc 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,4 @@ release/ __pycache__/ */__pycache__/ # 忽略测试文件 -test.py +test*.py From 428b4df8e7f6ff8d79f3464aa6097fd453b3eae9 Mon Sep 17 00:00:00 2001 From: wszqkzqk Date: Sat, 30 Jul 2022 19:52:45 +0800 Subject: [PATCH 09/18] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=98=B3=E5=85=89?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/component/map.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/component/map.py b/source/component/map.py index 19dfc40..8b5db6e 100755 --- a/source/component/map.py +++ b/source/component/map.py @@ -212,7 +212,7 @@ LEVEL_MAP_DATA = ( # 第2关:三行草皮 { c.BACKGROUND_TYPE: 8, - c.INIT_SUN_NAME: 150, + c.INIT_SUN_NAME: 50, c.SHOVEL: 1, c.SPAWN_ZOMBIES:c.SPAWN_ZOMBIES_AUTO, c.INCLUDED_ZOMBIES:(c.NORMAL_ZOMBIE,), From 6c65b27df640a1b7439141c130a138498e402204 Mon Sep 17 00:00:00 2001 From: wszqkzqk Date: Sat, 30 Jul 2022 20:04:30 +0800 Subject: [PATCH 10/18] =?UTF-8?q?=E6=98=BE=E7=A4=BA=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/state/level.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/state/level.py b/source/state/level.py index 5f91919..e925bd7 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -35,6 +35,7 @@ class Level(tool.State): if self.game_info[c.GAME_MODE] == c.MODE_ADVENTURE: if 0 <= self.game_info[c.LEVEL_NUM] < map.TOTAL_LEVEL: self.map_data = map.LEVEL_MAP_DATA[self.game_info[c.LEVEL_NUM]] + pg.display.set_caption(f"pypvz: 冒险模式 第{self.game_info[c.LEVEL_NUM]}关") else: self.game_info[c.LEVEL_NUM] = 1 self.saveUserData() @@ -44,6 +45,7 @@ class Level(tool.State): elif self.game_info[c.GAME_MODE] == c.MODE_LITTLEGAME: if 0 <= self.game_info[c.LITTLEGAME_NUM] < map.TOTAL_LITTLE_GAME: self.map_data = map.LITTLE_GAME_MAP_DATA[self.game_info[c.LITTLEGAME_NUM]] + pg.display.set_caption(f"pypvz: 玩玩小游戏 第{self.game_info[c.LITTLEGAME_NUM]}关") else: self.game_info[c.LITTLEGAME_NUM] = 1 self.saveUserData() From 76533796a32fa5c4f9a52181422b20bd55b4e6d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sun, 31 Jul 2022 08:12:44 +0800 Subject: [PATCH 11/18] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E6=AF=81=E7=81=AD?= =?UTF-8?q?=E8=8F=87=E9=98=B3=E5=85=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/constants.py b/source/constants.py index 486b8ae..dc38fc5 100755 --- a/source/constants.py +++ b/source/constants.py @@ -305,7 +305,7 @@ PLANT_CARD_INFO = (# 元组 (植物名称, 卡片名称, 阳光, 冷却时间) 50000), (DOOMSHROOM := "DoomShroom", CARD_DOOMSHROOM := "card_doomshroom", - 75, + 125, 50000), (LILYPAD := "LilyPad", CARD_LILYPAD := "card_lilypad", From afda2a02c8adfaa9b473a9867a5b35427ec475d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=98=9F=E5=A4=96=E4=B9=8B=E7=A5=9E?= Date: Sun, 31 Jul 2022 10:46:02 +0800 Subject: [PATCH 12/18] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=AD=90=E5=BC=B9?= =?UTF-8?q?=E7=94=9F=E5=AD=98=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/component/plant.py | 6 +++--- source/component/zombie.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/component/plant.py b/source/component/plant.py index 7275331..d0f4ebc 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -104,7 +104,7 @@ class Bullet(pg.sprite.Sprite): if self.y_vel * (self.dest_y - self.rect.y) < 0: self.rect.y = self.dest_y self.rect.x += self.x_vel - if self.rect.x >= c.SCREEN_WIDTH + 60: + if self.rect.x >= c.SCREEN_WIDTH + 20: self.kill() elif self.state == c.EXPLODE: if (self.current_time - self.explode_timer) > 250: @@ -206,7 +206,7 @@ class StarBullet(Bullet): else: self.rect.x -= 10 self.handleMapYPosition() - if ((self.rect.x > c.SCREEN_WIDTH + 60) or (self.rect.x < -60) + if ((self.rect.x > c.SCREEN_WIDTH + 20) or (self.rect.right < -20) or (self.rect.y > c.SCREEN_HEIGHT) or (self.rect.y < 0)): self.kill() elif self.state == c.EXPLODE: @@ -322,7 +322,7 @@ class Plant(pg.sprite.Sprite): if (zombie.name == c.SNORKELZOMBIE) and (zombie.frames == zombie.swim_frames): return False if (self.state != c.SLEEP and zombie.state != c.DIE and - self.rect.x <= zombie.rect.right and zombie.rect.left <= c.SCREEN_WIDTH): + self.rect.x <= zombie.rect.right and zombie.rect.x <= c.SCREEN_WIDTH): return True return False diff --git a/source/component/zombie.py b/source/component/zombie.py index fc0ecaa..848f975 100755 --- a/source/component/zombie.py +++ b/source/component/zombie.py @@ -15,8 +15,8 @@ class Zombie(pg.sprite.Sprite): self.frame_num = len(self.frames) self.image = self.frames[self.frame_index] - self.mask = pg.mask.from_surface(self.image) self.rect = self.image.get_rect() + self.mask = pg.mask.from_surface(self.image) self.rect.x = x self.rect.bottom = y # 大蒜换行移动像素值,< 0时向上,= 0时不变,> 0时向上 From cb94f49cf962387e48a326ec6b4dd69dce4a7410 Mon Sep 17 00:00:00 2001 From: wszqkzqk Date: Sun, 31 Jul 2022 21:33:58 +0800 Subject: [PATCH 13/18] =?UTF-8?q?=E8=A1=A5=E5=85=A8=E5=90=8E=E7=BC=80?= =?UTF-8?q?=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/tool.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/tool.py b/source/tool.py index d21617a..29014a6 100755 --- a/source/tool.py +++ b/source/tool.py @@ -197,7 +197,7 @@ def load_image_frames(directory, image_name, colorkey, accept): return frame_list # colorkeys 是设置图像中的某个颜色值为透明,这里用来消除白边 -def load_all_gfx(directory, colorkey=c.WHITE, accept=(".png", ".jpg", ".bmp", ".gif", "webp")): +def load_all_gfx(directory, colorkey=c.WHITE, accept=(".png", ".jpg", ".bmp", ".gif", ".webp")): graphics = {} for name1 in os.listdir(directory): # subfolders under the folder resources\graphics From a1b7c389a0333a0e778abeff2c92d6062f570925 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, 1 Aug 2022 11:34:56 +0800 Subject: [PATCH 14/18] =?UTF-8?q?=E5=B9=B3=E8=A1=A1=E9=9A=BE=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/component/map.py | 2 +- source/component/plant.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/component/map.py b/source/component/map.py index 8b5db6e..89bbdee 100755 --- a/source/component/map.py +++ b/source/component/map.py @@ -412,7 +412,7 @@ LITTLE_GAME_MAP_DATA = ( c.SPIKEWEED: 100, c.SQUASH: 100, c.JALAPENO: 50, - c.THREEPEASHOOTER: 400,} + c.THREEPEASHOOTER: 300,} }, ) diff --git a/source/component/plant.py b/source/component/plant.py index d0f4ebc..ae3cb6b 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -322,7 +322,7 @@ class Plant(pg.sprite.Sprite): if (zombie.name == c.SNORKELZOMBIE) and (zombie.frames == zombie.swim_frames): return False if (self.state != c.SLEEP and zombie.state != c.DIE and - self.rect.x <= zombie.rect.right and zombie.rect.x <= c.SCREEN_WIDTH): + self.rect.x <= zombie.rect.right and zombie.rect.x <= c.SCREEN_WIDTH - 24): return True return False From 93259a23805d8d481b350774662956beb80de4b3 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, 1 Aug 2022 11:38:51 +0800 Subject: [PATCH 15/18] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=88=90=E5=B0=B1?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/state/mainmenu.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/state/mainmenu.py b/source/state/mainmenu.py index a65e11d..5fc70ef 100644 --- a/source/state/mainmenu.py +++ b/source/state/mainmenu.py @@ -218,8 +218,8 @@ class Menu(tool.State): infoText = f"目前您一共完成了:玩玩小游戏{self.game_info[c.LITTLEGAME_COMPLETIONS]}轮;完成其他所有游戏模式以获得金向日葵奖杯!" infoImg = font.render(infoText , True, c.BLACK, c.LIGHTYELLOW) infoImg_rect = infoImg.get_rect() - infoImg_rect.x = x - infoImg_rect.y = y + infoImg_rect.x = self.sunflower_trophy_rect.x + infoImg_rect.y = self.sunflower_trophy_rect.bottom - 14 surface.blit(infoImg, infoImg_rect) def respondOptionButtonClick(self): From 7c2b72152de51521865195742197dd0ec7501069 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, 1 Aug 2022 14:37:39 +0800 Subject: [PATCH 16/18] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=91=BD=E5=90=8D?= =?UTF-8?q?=E8=A7=84=E5=88=99=EF=BC=9Afunction=E3=80=81method=E7=94=A8?= =?UTF-8?q?=E9=A9=BC=E5=B3=B0=E5=91=BD=E5=90=8D=E6=B3=95=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E7=94=A8=E4=B8=8B=E5=88=92=E7=BA=BF=E5=91=BD=E5=90=8D=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/component/plant.py | 106 +++---- source/component/zombie.py | 297 +++++++++---------- source/state/level.py | 578 ++++++++++++++++++------------------- 3 files changed, 493 insertions(+), 488 deletions(-) diff --git a/source/component/plant.py b/source/component/plant.py index ae3cb6b..9481718 100755 --- a/source/component/plant.py +++ b/source/component/plant.py @@ -37,7 +37,9 @@ class Car(pg.sprite.Sprite): # 豌豆及孢子类普通子弹 class Bullet(pg.sprite.Sprite): - def __init__(self, x, start_y, dest_y, name, damage, effect=None, passedTorchWood=None, damageType=c.ZOMBIE_DEAFULT_DAMAGE): + def __init__( self, x, start_y, dest_y, name, damage, + effect=None, passed_torchwood_x=None, + damageType=c.ZOMBIE_DEAFULT_DAMAGE): pg.sprite.Sprite.__init__(self) self.name = name @@ -60,7 +62,7 @@ class Bullet(pg.sprite.Sprite): self.current_time = 0 self.animate_timer = 0 self.animate_interval = 70 - self.passedTorchWood = passedTorchWood # 记录最近通过的火炬树横坐标,如果没有缺省为None + self.passed_torchwood_x = passed_torchwood_x # 记录最近通过的火炬树横坐标,如果没有缺省为None def loadFrames(self, frames, name): frame_list = tool.GFX[name] @@ -248,7 +250,7 @@ class Plant(pg.sprite.Sprite): self.animate_interval = 70 # 帧播放间隔 self.hit_timer = 0 # 被铲子指向时间 - self.highlightTime = 0 + self.highlight_time = 0 def loadFrames(self, frames, name, scale=1, color=c.BLACK): frame_list = tool.GFX[name] @@ -267,7 +269,7 @@ class Plant(pg.sprite.Sprite): self.loadFrames(self.frames, name, scale) def changeFrames(self, frames): - """change image frames and modify rect position""" + # change image frames and modify rect position self.frames = frames self.frame_num = len(self.frames) self.frame_index = 0 @@ -311,7 +313,7 @@ class Plant(pg.sprite.Sprite): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -338,7 +340,7 @@ class Plant(pg.sprite.Sprite): self.changeFrames(self.sleep_frames) def setDamage(self, damage, zombie): - if not zombie.lostHead: + if not zombie.losthead: self.health -= damage self.hit_timer = self.current_time if ((self.name == c.HYPNOSHROOM) and @@ -429,20 +431,20 @@ class RepeaterPea(Plant): self.shoot_timer = 0 # 是否发射第一颗 - self.firstShot = False + self.first_shot = False def attacking(self): if self.shoot_timer == 0: self.shoot_timer = self.current_time - 700 elif (self.current_time - self.shoot_timer >= 1400): - self.firstShot = True + self.first_shot = True self.bullet_group.add(Bullet(self.rect.right - 15, self.rect.y, self.rect.y, c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, effect=None)) self.shoot_timer = self.current_time # 播放发射音效 c.SOUND_SHOOT.play() - elif self.firstShot and (self.current_time - self.shoot_timer) > 100: - self.firstShot = False + elif self.first_shot and (self.current_time - self.shoot_timer) > 100: + self.first_shot = False self.bullet_group.add(Bullet(self.rect.right - 15, self.rect.y, self.rect.y, c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, effect=None)) # 播放发射音效 @@ -580,7 +582,7 @@ class CherryBomb(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -596,7 +598,7 @@ class Chomper(Plant): self.digest_interval = 15000 self.attack_zombie = None self.zombie_group = None - self.shouldDiggest = False + self.should_diggest = False def loadImages(self, name, scale): self.idle_frames = [] @@ -624,7 +626,7 @@ class Chomper(Plant): if (zombie.name == c.SNORKELZOMBIE) and (zombie.frames == zombie.swim_frames): return False elif (self.state == c.IDLE and zombie.state != c.DIGEST and - self.rect.x <= zombie.rect.centerx and (not zombie.lostHead) and + self.rect.x <= zombie.rect.centerx and (not zombie.losthead) and (self.rect.x + c.GRID_X_SIZE*2.7 >= zombie.rect.centerx)): return True return False @@ -648,12 +650,12 @@ class Chomper(Plant): # 播放吞的音效 c.SOUND_BIGCHOMP.play() if self.attack_zombie.alive(): - self.shouldDiggest = True + self.should_diggest = True self.attack_zombie.kill() if (self.frame_index + 1) == self.frame_num: - if self.shouldDiggest: + if self.should_diggest: self.setDigest() - self.shouldDiggest = False + self.should_diggest = False else: self.setIdle() @@ -751,7 +753,7 @@ class PotatoMine(Plant): return False # 这里碰撞应当比碰撞一般更容易,就设置成圆形或矩形模式,不宜采用mask elif (pg.sprite.collide_circle_ratio(0.7)(zombie, self) and - (not self.is_init) and (not zombie.lostHead)): + (not self.is_init) and (not zombie.losthead)): return True return False @@ -767,12 +769,12 @@ class PotatoMine(Plant): class Squash(Plant): - def __init__(self, x, y, mapPlantsSet): + def __init__(self, x, y, map_plant_set): Plant.__init__(self, x, y, c.SQUASH, c.PLANT_HEALTH, None) self.orig_pos = (x, y) self.aim_timer = 0 self.start_boom = False # 和灰烬等植物统一变量名,在这里表示倭瓜是否跳起 - self.mapPlantsSet = mapPlantsSet + self.map_plant_set = map_plant_set def loadImages(self, name, scale): self.idle_frames = [] @@ -816,7 +818,7 @@ class Squash(Plant): if self.canAttack(zombie): zombie.setDamage(1800, damageType=c.ZOMBIE_RANGE_DAMAGE) self.health = 0 # 避免僵尸在原位啃食 - self.mapPlantsSet.remove(c.SQUASH) + self.map_plant_set.remove(c.SQUASH) self.kill() # 播放碾压音效 c.SOUND_SQUASHING.play() @@ -870,7 +872,7 @@ class Spikeweed(Plant): if self.canAttack(zombie): # 有车的僵尸 if zombie.name in {c.ZOMBONI}: - zombie.health = zombie.lostHeadHealth + zombie.health = zombie.losthead_health killSelf = True else: zombie.setDamage(20, damageType=c.ZOMBIE_COMMON_DAMAGE) @@ -924,7 +926,7 @@ class Jalapeno(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -1091,7 +1093,7 @@ class IceShroom(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -1288,16 +1290,16 @@ class TorchWood(Plant): def idling(self): for i in self.bullet_group: if i.name == c.BULLET_PEA: - if i.passedTorchWood != self.rect.centerx: + if i.passed_torchwood_x != self.rect.centerx: if abs(i.rect.centerx - self.rect.centerx) <= 20: self.bullet_group.add(Bullet(i.rect.x, i.rect.y, i.dest_y, - c.BULLET_FIREBALL, c.BULLET_DAMAGE_FIREBALL_BODY, effect=c.BULLET_EFFECT_UNICE, passedTorchWood=self.rect.centerx)) + c.BULLET_FIREBALL, c.BULLET_DAMAGE_FIREBALL_BODY, effect=c.BULLET_EFFECT_UNICE, passed_torchwood_x=self.rect.centerx)) i.kill() elif i.name == c.BULLET_PEA_ICE: - if i.passedTorchWood != self.rect.centerx: + if i.passed_torchwood_x != self.rect.centerx: if abs(i.rect.centerx - self.rect.centerx) <= 20: self.bullet_group.add(Bullet(i.rect.x, i.rect.y, i.dest_y, - c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, effect=None, passedTorchWood=self.rect.centerx)) + c.BULLET_PEA, c.BULLET_DAMAGE_NORMAL, effect=None, passed_torchwood_x=self.rect.centerx)) i.kill() class StarFruit(Plant): @@ -1311,8 +1313,8 @@ class StarFruit(Plant): if (zombie.name == c.SNORKELZOMBIE) and (zombie.frames == zombie.swim_frames): return False if zombie.state != c.DIE: - zombieMapY = self.level.map.getMapIndex(zombie.rect.centerx, zombie.rect.bottom)[1] - if (self.rect.x >= zombie.rect.x) and (self.map_y == zombieMapY): # 对于同行且在杨桃后的僵尸 + zombie_map_y = self.level.map.getMapIndex(zombie.rect.centerx, zombie.rect.bottom)[1] + if (self.rect.x >= zombie.rect.x) and (self.map_y == zombie_map_y): # 对于同行且在杨桃后的僵尸 return True # 斜向上,理想直线方程为:f(zombie.rect.x) = -0.75*(zombie.rect.x - (self.rect.right - 5)) + self.rect.y - 10 # 注意实际上为射线 @@ -1348,10 +1350,10 @@ class StarFruit(Plant): class CoffeeBean(Plant): - def __init__(self, x, y, plant_group, mapContent, map, map_x): + def __init__(self, x, y, plant_group, map_content, map, map_x): Plant.__init__(self, x, y, c.COFFEEBEAN, c.PLANT_HEALTH, None) self.plant_group = plant_group - self.mapContent = mapContent + self.map_content = map_content self.map = map self.map_x = map_x @@ -1360,7 +1362,7 @@ class CoffeeBean(Plant): self.frame_index += 1 if self.frame_index >= self.frame_num: - self.mapContent[c.MAP_SLEEP] = False + self.map_content[c.MAP_SLEEP] = False for plant in self.plant_group: if plant.can_sleep: if plant.state == c.SLEEP: @@ -1371,7 +1373,7 @@ class CoffeeBean(Plant): plant.changeFrames(plant.idle_frames) # 播放唤醒音效 c.SOUND_MUSHROOM_WAKEUP.play() - self.mapContent[c.MAP_PLANT].remove(self.name) + self.map_content[c.MAP_PLANT].remove(self.name) self.kill() self.frame_index = self.frame_num - 1 @@ -1379,7 +1381,7 @@ class CoffeeBean(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -1480,7 +1482,7 @@ class TangleKlep(Plant): self.frames = self.idle_frames def canAttack(self, zombie): - if zombie.state != c.DIE and (not zombie.lostHead): + if zombie.state != c.DIE and (not zombie.losthead): # 这里碰撞应当比碰撞一般更容易,就设置成圆形或矩形模式,不宜采用mask if pg.sprite.collide_circle_ratio(0.7)(zombie, self): return True @@ -1510,17 +1512,17 @@ class TangleKlep(Plant): # 坑形态的毁灭菇同地刺一样不可以被啃食 # 爆炸时杀死同一格的所有植物 class DoomShroom(Plant): - def __init__(self, x, y, mapPlantsSet, explode_y_range): + def __init__(self, x, y, map_plant_set, explode_y_range): Plant.__init__(self, x, y, c.DOOMSHROOM, c.PLANT_HEALTH, None) self.can_sleep = True - self.mapPlantSet = mapPlantsSet + self.map_plant_set = map_plant_set self.bomb_timer = 0 self.explode_y_range = explode_y_range self.explode_x_range = 250 self.start_boom = False self.boomed = False - self.originalX = x - self.originalY = y + self.original_x = x + self.original_y = y def loadImages(self, name, scale): self.idle_frames = [] @@ -1556,7 +1558,7 @@ class DoomShroom(Plant): if self.frame_index >= self.frame_num: self.health = 0 self.frame_index = self.frame_num - 1 - self.mapPlantSet.add(c.HOLE) + self.map_plant_set.add(c.HOLE) # 睡觉状态 elif self.state == c.SLEEP: if (self.current_time - self.animate_timer) > self.animate_interval: @@ -1576,7 +1578,7 @@ class DoomShroom(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -1668,8 +1670,8 @@ class GraveBuster(Plant): self.frame_index = self.frame_num - 1 for item in self.plant_group: if item.name == c.GRAVE: - itemMapX, _ = self.map.getMapIndex(item.rect.centerx, item.rect.bottom) - if itemMapX == self.map_x: + item_map_x, _ = self.map.getMapIndex(item.rect.centerx, item.rect.bottom) + if item_map_x == self.map_x: item.health = 0 self.health = 0 self.animate_timer = self.current_time @@ -1677,7 +1679,7 @@ class GraveBuster(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) @@ -1689,7 +1691,7 @@ class FumeShroom(Plant): Plant.__init__(self, x, y, c.FUMESHROOM, c.PLANT_HEALTH, bullet_group) self.can_sleep = True self.shoot_timer = 0 - self.showAttackFrames = True + self.show_attack_frames = True self.zombie_group = zombie_group def loadImages(self, name, scale): @@ -1726,18 +1728,18 @@ class FumeShroom(Plant): if self.shoot_timer == 0: self.shoot_timer = self.current_time - 700 elif self.current_time - self.shoot_timer >= 1100: - if self.showAttackFrames: - self.showAttackFrames = False + if self.show_attack_frames: + self.show_attack_frames = False self.changeFrames(self.attack_frames) if self.current_time - self.shoot_timer >= 1400: self.bullet_group.add(Fume(self.rect.right - 35, self.rect.y)) # 烟雾只是个动画,实际伤害由本身完成 - for targetZombie in self.zombie_group: - if self.canAttack(targetZombie): - targetZombie.setDamage(c.BULLET_DAMAGE_NORMAL, damageType=c.ZOMBIE_RANGE_DAMAGE) + for target_zombie in self.zombie_group: + if self.canAttack(target_zombie): + target_zombie.setDamage(c.BULLET_DAMAGE_NORMAL, damageType=c.ZOMBIE_RANGE_DAMAGE) self.shoot_timer = self.current_time - self.showAttackFrames = True + self.show_attack_frames = True # 播放发射音效 c.SOUND_FUME.play() @@ -1754,7 +1756,7 @@ class FumeShroom(Plant): self.image = self.frames[self.frame_index] self.mask = pg.mask.from_surface(self.image) - if (self.current_time - self.highlightTime < 100): + if (self.current_time - self.highlight_time < 100): self.image.set_alpha(150) elif ((self.current_time - self.hit_timer) < 200): self.image.set_alpha(192) diff --git a/source/component/zombie.py b/source/component/zombie.py index 848f975..07c816e 100755 --- a/source/component/zombie.py +++ b/source/component/zombie.py @@ -5,7 +5,10 @@ from .. import constants as c class Zombie(pg.sprite.Sprite): - def __init__(self, x, y, name, head_group=None, helmetHealth=0, helmetType2Health=0, bodyHealth=c.NORMAL_HEALTH, lostHeadHealth=c.LOSTHEAD_HEALTH, damage=c.ZOMBIE_ATTACK_DAMAGE, canSwim=False): + def __init__( self, x, y, name, head_group=None, + helmet_health=0, helmet_type2_health=0, + body_health=c.NORMAL_HEALTH, losthead_health=c.LOSTHEAD_HEALTH, + damage=c.ZOMBIE_ATTACK_DAMAGE, can_swim=False): pg.sprite.Sprite.__init__(self) self.name = name @@ -20,21 +23,21 @@ class Zombie(pg.sprite.Sprite): self.rect.x = x self.rect.bottom = y # 大蒜换行移动像素值,< 0时向上,= 0时不变,> 0时向上 - self.targetYChange = 0 - self.originalY = y - self.toChangeGroup = False + self.target_y_change = 0 + self.original_y = y + self.to_change_group = False - self.helmetHealth = helmetHealth - self.helmetType2Health = helmetType2Health - self.health = bodyHealth + lostHeadHealth - self.lostHeadHealth = lostHeadHealth + self.helmet_health = helmet_health + self.helmet_type2_health = helmet_type2_health + self.health = body_health + losthead_health + self.losthead_health = losthead_health self.damage = damage self.dead = False - self.lostHead = False - self.canSwim = canSwim + self.losthead = False + self.can_swim = can_swim self.swimming = False - self.helmet = (self.helmetHealth > 0) - self.helmetType2 = (self.helmetType2Health > 0) + self.helmet = (self.helmet_health > 0) + self.helmet_type2 = (self.helmet_type2_health > 0) self.head_group = head_group self.walk_timer = 0 @@ -44,7 +47,7 @@ class Zombie(pg.sprite.Sprite): self.animate_interval = 150 self.walk_animate_interval = 180 self.attack_animate_interval = 100 - self.lostHead_animate_interval = 180 + self.losthead_animate_interval = 180 self.die_animate_interval = 50 self.boomDie_animate_interval = 100 self.ice_slow_ratio = 1 @@ -88,8 +91,8 @@ class Zombie(pg.sprite.Sprite): if self.health <= 0: self.setDie() return True - elif self.health <= self.lostHeadHealth: - if not self.lostHead: + elif self.health <= self.losthead_health: + if not self.losthead: self.changeFrames(framesKind) self.setLostHead() return True @@ -105,7 +108,7 @@ class Zombie(pg.sprite.Sprite): return # 能游泳的僵尸 - if self.canSwim: + if self.can_swim: # 在水池范围内 # 在右侧岸左 if self.rect.right <= c.MAP_POOL_FRONT_X: @@ -119,25 +122,25 @@ class Zombie(pg.sprite.Sprite): c.SOUND_ZOMBIE_ENTERING_WATER.play() # 同样没有兼容双防具 if self.helmet: - if self.helmetHealth <= 0: + if self.helmet_health <= 0: self.helmet = False else: self.changeFrames(self.helmet_swim_frames) - if self.helmetType2: - if self.helmetType2Health <= 0: - self.helmetType2 = False + if self.helmet_type2: + if self.helmet_type2_health <= 0: + self.helmet_type2 = False else: self.changeFrames(self.helmet_swim_frames) # 已经进入游泳状态 else: if self.helmet: - if self.helmetHealth <= 0: + if self.helmet_health <= 0: self.changeFrames(self.swim_frames) self.helmet = False - if self.helmetType2: - if self.helmetType2Health <= 0: + if self.helmet_type2: + if self.helmet_type2_health <= 0: self.changeFrames(self.swim_frames) - self.helmetType2 = False + self.helmet_type2 = False # 水生僵尸已经接近家门口并且上岸 else: if self.swimming: @@ -145,55 +148,55 @@ class Zombie(pg.sprite.Sprite): self.swimming = False # 同样没有兼容双防具 if self.helmet: - if self.helmetHealth <= 0: + if self.helmet_health <= 0: self.helmet = False else: self.changeFrames(self.helmet_walk_frames) - if self.helmetType2: - if self.helmetType2Health <= 0: - self.helmetType2 = False + if self.helmet_type2: + if self.helmet_type2_health <= 0: + self.helmet_type2 = False else: self.changeFrames(self.helmet_walk_frames) if self.helmet: - if self.helmetHealth <= 0: + if self.helmet_health <= 0: self.helmet = False self.changeFrames(self.walk_frames) - if self.helmetType2: - if self.helmetType2Health <= 0: - self.helmetType2 = False + if self.helmet_type2: + if self.helmet_type2_health <= 0: + self.helmet_type2 = False self.changeFrames(self.walk_frames) elif self.is_hypno and self.rect.right > c.MAP_POOL_FRONT_X + 55: # 常数拟合暂时缺乏检验 if self.swimming: self.changeFrames(self.walk_frames) if self.helmet: - if self.helmetHealth <= 0: + if self.helmet_health <= 0: self.changeFrames(self.walk_frames) self.helmet = False elif self.swimming: # 游泳状态需要改为步行 self.changeFrames(self.helmet_walk_frames) - if self.helmetType2: - if self.helmetType2Health <= 0: + if self.helmet_type2: + if self.helmet_type2_health <= 0: self.changeFrames(self.walk_frames) - self.helmetType2 = False + self.helmet_type2 = False elif self.swimming: # 游泳状态需要改为步行 self.changeFrames(self.helmet_walk_frames) self.swimming = False # 尚未进入水池 else: - if self.helmetHealth <= 0 and self.helmet: + if self.helmet_health <= 0 and self.helmet: self.changeFrames(self.walk_frames) self.helmet = False - if self.helmetType2Health <= 0 and self.helmetType2: + if self.helmet_type2_health <= 0 and self.helmet_type2: self.changeFrames(self.walk_frames) - self.helmetType2 = False + self.helmet_type2 = False # 不能游泳的一般僵尸 else: - if self.helmetHealth <= 0 and self.helmet: + if self.helmet_health <= 0 and self.helmet: self.changeFrames(self.walk_frames) self.helmet = False - if self.helmetType2Health <= 0 and self.helmetType2: + if self.helmet_type2_health <= 0 and self.helmet_type2: self.changeFrames(self.walk_frames) - self.helmetType2 = False + self.helmet_type2 = False if (self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.getTimeRatio()): self.handleGarlicYChange() @@ -204,48 +207,48 @@ class Zombie(pg.sprite.Sprite): self.rect.x -= 1 def handleGarlicYChange(self): - if self.targetYChange < 0: - if self.rect.bottom > self.originalY + self.targetYChange: # 注意这里加的是负数 + if self.target_y_change < 0: + if self.rect.bottom > self.original_y + self.target_y_change: # 注意这里加的是负数 self.rect.bottom -= 3 # 过半时换行 - if ((self.toChangeGroup) and - (self.rect.bottom >= self.originalY + 0.5*self.targetYChange)): - self.level.zombie_groups[self.mapY].remove(self) - self.level.zombie_groups[self.targetMapY].add(self) - self.toChangeGroup = False + if ((self.to_change_group) and + (self.rect.bottom >= self.original_y + 0.5*self.target_y_change)): + self.level.zombie_groups[self.map_y].remove(self) + self.level.zombie_groups[self.target_map_y].add(self) + self.to_change_group = False else: - self.rect.bottom = self.originalY + self.targetYChange - self.originalY = self.rect.bottom - self.targetYChange = 0 - elif self.targetYChange > 0: - if self.rect.bottom < self.originalY + self.targetYChange: # 注意这里加的是负数 + self.rect.bottom = self.original_y + self.target_y_change + self.original_y = self.rect.bottom + self.target_y_change = 0 + elif self.target_y_change > 0: + if self.rect.bottom < self.original_y + self.target_y_change: # 注意这里加的是负数 self.rect.bottom += 3 # 过半时换行 - if ((self.toChangeGroup) and - (self.rect.bottom <= self.originalY + 0.5*self.targetYChange)): - self.level.zombie_groups[self.mapY].remove(self) - self.level.zombie_groups[self.targetMapY].add(self) - self.toChangeGroup = False + if ((self.to_change_group) and + (self.rect.bottom <= self.original_y + 0.5*self.target_y_change)): + self.level.zombie_groups[self.map_y].remove(self) + self.level.zombie_groups[self.target_map_y].add(self) + self.to_change_group = False else: - self.rect.bottom = self.originalY + self.targetYChange - self.originalY = self.rect.bottom - self.targetYChange = 0 + self.rect.bottom = self.original_y + self.target_y_change + self.original_y = self.rect.bottom + self.target_y_change = 0 def attacking(self): if self.checkToDie(self.losthead_attack_frames): return - if self.helmetHealth <= 0 and self.helmet: + if self.helmet_health <= 0 and self.helmet: self.changeFrames(self.attack_frames) self.helmet = False - if self.helmetType2Health <= 0 and self.helmetType2: + if self.helmet_type2_health <= 0 and self.helmet_type2: self.changeFrames(self.attack_frames) - self.helmetType2 = False + self.helmet_type2 = False if self.name == c.NEWSPAPER_ZOMBIE: self.speed = 2.65 self.walk_animate_interval = 300 if (((self.current_time - self.attack_timer) > (c.ATTACK_INTERVAL * self.getAttackTimeRatio())) - and (not self.lostHead)): + and (not self.losthead)): if self.prey.health > 0: if self.prey_is_plant: self.prey.setDamage(self.damage, self) @@ -281,8 +284,8 @@ class Zombie(pg.sprite.Sprite): def setLostHead(self): self.losthead_timer = self.current_time - self.lostHead = True - self.animate_interval = self.lostHead_animate_interval + self.losthead = True + self.animate_interval = self.losthead_animate_interval if self.head_group is not None: self.head_group.add(ZombieHead(self.rect.centerx, self.rect.bottom)) @@ -347,87 +350,87 @@ class Zombie(pg.sprite.Sprite): # 冰冻减速效果 if effect == c.BULLET_EFFECT_ICE: if damageType == c.ZOMBIE_DEAFULT_DAMAGE: # 寒冰射手不能穿透二类防具进行减速 - if not self.helmetType2: + if not self.helmet_type2: self.setIceSlow() else: self.setIceSlow() # 解冻 elif effect == c.BULLET_EFFECT_UNICE: if damageType == c.ZOMBIE_DEAFULT_DAMAGE: # 寒冰射手不能穿透二类防具进行减速 - if not self.helmetType2: + if not self.helmet_type2: self.ice_slow_ratio = 1 else: self.ice_slow_ratio = 1 if damageType == c.ZOMBIE_DEAFULT_DAMAGE: # 不穿透二类防具的攻击 # 从第二类防具开始逐级传递 - if self.helmetType2: - self.helmetType2Health -= damage - if self.helmetType2Health <= 0: + if self.helmet_type2: + self.helmet_type2_health -= damage + if self.helmet_type2_health <= 0: if self.helmet: - self.helmetHealth += self.helmetType2Health # 注意self.helmetType2Health已经带有正负 - self.helmetType2Health = 0 # 注意合并后清零 - if self.helmetHealth <= 0: - self.health += self.helmetHealth - self.helmetHealth = 0 # 注意合并后清零 + self.helmet_health += self.helmet_type2_health # 注意self.helmet_type2_health已经带有正负 + self.helmet_type2_health = 0 # 注意合并后清零 + if self.helmet_health <= 0: + self.health += self.helmet_health + self.helmet_health = 0 # 注意合并后清零 else: - self.health += self.helmetType2Health - self.helmetType2Health = 0 + self.health += self.helmet_type2_health + self.helmet_type2_health = 0 elif self.helmet: # 不存在二类防具,但是存在一类防具 - self.helmetHealth -= damage - if self.helmetHealth <= 0: - self.health += self.helmetHealth - self.helmetHealth = 0 # 注意合并后清零 + self.helmet_health -= damage + if self.helmet_health <= 0: + self.health += self.helmet_health + self.helmet_health = 0 # 注意合并后清零 else: # 没有防具 self.health -= damage elif damageType == c.ZOMBIE_COMMON_DAMAGE: # 无视二类防具,将攻击一类防具与本体视为整体的攻击 if self.helmet: # 存在一类防具 - self.helmetHealth -= damage - if self.helmetHealth <= 0: - self.health += self.helmetHealth - self.helmetHealth = 0 # 注意合并后清零 + self.helmet_health -= damage + if self.helmet_health <= 0: + self.health += self.helmet_health + self.helmet_health = 0 # 注意合并后清零 else: # 没有一类防具 self.health -= damage elif damageType == c.ZOMBIE_RANGE_DAMAGE: # 从第二类防具开始逐级传递 - if self.helmetType2: - self.helmetType2Health -= damage - if self.helmetType2Health <= 0: + if self.helmet_type2: + self.helmet_type2_health -= damage + if self.helmet_type2_health <= 0: if self.helmet: - self.helmetHealth -= damage # 注意范围伤害中这里还有一个攻击 - self.helmetHealth += self.helmetType2Health # 注意self.helmetType2Health已经带有正负 - self.helmetType2Health = 0 # 注意合并后清零 - if self.helmetHealth <= 0: - self.health += self.helmetHealth - self.helmetHealth = 0 # 注意合并后清零 + self.helmet_health -= damage # 注意范围伤害中这里还有一个攻击 + self.helmet_health += self.helmet_type2_health # 注意self.helmet_type2_health已经带有正负 + self.helmet_type2_health = 0 # 注意合并后清零 + if self.helmet_health <= 0: + self.health += self.helmet_health + self.helmet_health = 0 # 注意合并后清零 else: self.health -= damage # 注意范围伤害中这里还有一个攻击 - self.health += self.helmetType2Health - self.helmetType2Health = 0 + self.health += self.helmet_type2_health + self.helmet_type2_health = 0 else: if self.helmet: - self.helmetHealth -= damage - if self.helmetHealth <= 0: - self.health += self.helmetHealth - self.helmetHealth = 0 # 注意合并后清零 + self.helmet_health -= damage + if self.helmet_health <= 0: + self.health += self.helmet_health + self.helmet_health = 0 # 注意合并后清零 else: self.health -= damage elif self.helmet: # 不存在二类防具,但是存在一类防具 - self.helmetHealth -= damage - if self.helmetHealth <= 0: - self.health += self.helmetHealth - self.helmetHealth = 0 # 注意合并后清零 + self.helmet_health -= damage + if self.helmet_health <= 0: + self.health += self.helmet_health + self.helmet_health = 0 # 注意合并后清零 else: # 没有防具 self.health -= damage elif damageType == c.ZOMBIE_ASH_DAMAGE: self.health -= damage # 无视任何防具 elif damageType == c.ZOMBIE_WALLNUT_BOWLING_DANMAGE: # 逻辑:对防具的多余伤害不传递 - if self.helmetType2: + if self.helmet_type2: # 对二类防具伤害较一般情况低,拟合铁门需要砸3次的设定 - self.helmetType2Health -= int(damage * 0.8) + self.helmet_type2_health -= int(damage * 0.8) elif self.helmet: # 不存在二类防具,但是存在一类防具 - self.helmetHealth -= damage + self.helmet_health -= damage else: # 没有防具 self.health -= damage else: @@ -441,28 +444,28 @@ class Zombie(pg.sprite.Sprite): self.state = c.WALK self.animate_interval = self.walk_animate_interval - if self.helmet or self.helmetType2: # 这里暂时没有考虑同时有两种防具的僵尸 + if self.helmet or self.helmet_type2: # 这里暂时没有考虑同时有两种防具的僵尸 self.changeFrames(self.helmet_walk_frames) - elif self.lostHead: + elif self.losthead: self.changeFrames(self.losthead_walk_frames) else: self.changeFrames(self.walk_frames) - if self.canSwim: + if self.can_swim: if self.rect.right <= c.MAP_POOL_FRONT_X: self.swimming = True self.changeFrames(self.swim_frames) # 同样没有兼容双防具 if self.helmet: - if self.helmetHealth <= 0: + if self.helmet_health <= 0: self.changeFrames(self.swim_frames) self.helmet = False else: self.changeFrames(self.helmet_swim_frames) - if self.helmetType2: - if self.helmetType2Health <= 0: + if self.helmet_type2: + if self.helmet_type2_health <= 0: self.changeFrames(self.swim_frames) - self.helmetType2 = False + self.helmet_type2 = False else: self.changeFrames(self.helmet_swim_frames) @@ -473,9 +476,9 @@ class Zombie(pg.sprite.Sprite): self.attack_timer = self.current_time self.animate_interval = self.attack_animate_interval - if self.helmet or self.helmetType2: # 这里暂时没有考虑同时有两种防具的僵尸 + if self.helmet or self.helmet_type2: # 这里暂时没有考虑同时有两种防具的僵尸 self.changeFrames(self.helmet_attack_frames) - elif self.lostHead: + elif self.losthead: self.changeFrames(self.losthead_attack_frames) else: self.changeFrames(self.attack_frames) @@ -558,7 +561,7 @@ class NormalZombie(Zombie): # 路障僵尸 class ConeHeadZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.CONEHEAD_ZOMBIE, head_group, helmetHealth=c.CONEHEAD_HEALTH) + Zombie.__init__(self, x, y, c.CONEHEAD_ZOMBIE, head_group, helmet_health=c.CONEHEAD_HEALTH) def loadImages(self): self.helmet_walk_frames = [] @@ -594,7 +597,7 @@ class ConeHeadZombie(Zombie): class BucketHeadZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.BUCKETHEAD_ZOMBIE, head_group, helmetHealth=c.BUCKETHEAD_HEALTH) + Zombie.__init__(self, x, y, c.BUCKETHEAD_ZOMBIE, head_group, helmet_health=c.BUCKETHEAD_HEALTH) def loadImages(self): self.helmet_walk_frames = [] @@ -661,8 +664,8 @@ class FlagZombie(Zombie): class NewspaperZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.NEWSPAPER_ZOMBIE, head_group, helmetType2Health=c.NEWSPAPER_HEALTH) - self.speedUp = False + Zombie.__init__(self, x, y, c.NEWSPAPER_ZOMBIE, head_group, helmet_type2_health=c.NEWSPAPER_HEALTH) + self.speed_up = False def loadImages(self): self.helmet_walk_frames = [] @@ -707,9 +710,9 @@ class NewspaperZombie(Zombie): if self.checkToDie(self.losthead_walk_frames): return - if self.helmetType2Health <= 0 and self.helmetType2: + if self.helmet_type2_health <= 0 and self.helmet_type2: self.changeFrames(self.lostnewspaper_frames) - self.helmetType2 = False + self.helmet_type2 = False # 触发报纸撕裂音效 c.SOUND_NEWSPAPER_RIP.play() if ((self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.getTimeRatio())): @@ -733,9 +736,9 @@ class NewspaperZombie(Zombie): if self.state == c.DIE: self.kill() return - elif self.frames == self.lostnewspaper_frames and (not self.speedUp): + elif self.frames == self.lostnewspaper_frames and (not self.speed_up): self.changeFrames(self.walk_frames) - self.speedUp = True + self.speed_up = True self.speed = 2.65 self.walk_animate_interval = 300 # 触发报纸僵尸暴走音效 @@ -755,12 +758,12 @@ class NewspaperZombie(Zombie): class FootballZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.FOOTBALL_ZOMBIE, head_group, helmetHealth=c.FOOTBALL_HELMET_HEALTH) + Zombie.__init__(self, x, y, c.FOOTBALL_ZOMBIE, head_group, helmet_health=c.FOOTBALL_HELMET_HEALTH) self.speed = 1.88 self.animate_interval = 50 self.walk_animate_interval = 50 self.attack_animate_interval = 60 - self.lostHead_animate_interval = 180 + self.losthead_animate_interval = 180 self.die_animate_interval = 150 def loadImages(self): @@ -796,7 +799,7 @@ class FootballZombie(Zombie): class DuckyTubeZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.DUCKY_TUBE_ZOMBIE, head_group, canSwim=True) + Zombie.__init__(self, x, y, c.DUCKY_TUBE_ZOMBIE, head_group, can_swim=True) def loadImages(self): self.walk_frames = [] @@ -827,7 +830,7 @@ class DuckyTubeZombie(Zombie): class ConeHeadDuckyTubeZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.CONEHEAD_DUCKY_TUBE_ZOMBIE, head_group, helmetHealth=c.CONEHEAD_HEALTH ,canSwim=True) + Zombie.__init__(self, x, y, c.CONEHEAD_DUCKY_TUBE_ZOMBIE, head_group, helmet_health=c.CONEHEAD_HEALTH ,can_swim=True) def loadImages(self): self.helmet_walk_frames = [] @@ -865,7 +868,7 @@ class ConeHeadDuckyTubeZombie(Zombie): class BucketHeadDuckyTubeZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.BUCKETHEAD_DUCKY_TUBE_ZOMBIE, head_group, helmetHealth=c.BUCKETHEAD_HEALTH ,canSwim=True) + Zombie.__init__(self, x, y, c.BUCKETHEAD_DUCKY_TUBE_ZOMBIE, head_group, helmet_health=c.BUCKETHEAD_HEALTH ,can_swim=True) def loadImages(self): self.helmet_walk_frames = [] @@ -903,7 +906,7 @@ class BucketHeadDuckyTubeZombie(Zombie): class ScreenDoorZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.SCREEN_DOOR_ZOMBIE, head_group, helmetType2Health=c.SCREEN_DOOR_HEALTH) + Zombie.__init__(self, x, y, c.SCREEN_DOOR_ZOMBIE, head_group, helmet_type2_health=c.SCREEN_DOOR_HEALTH) def loadImages(self): self.helmet_walk_frames = [] @@ -939,7 +942,7 @@ class ScreenDoorZombie(Zombie): class PoleVaultingZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.POLE_VAULTING_ZOMBIE, head_group=head_group, bodyHealth=c.POLE_VAULTING_HEALTH, lostHeadHealth=c.POLE_VAULTING_LOSTHEAD_HEALTH) + Zombie.__init__(self, x, y, c.POLE_VAULTING_ZOMBIE, head_group=head_group, body_health=c.POLE_VAULTING_HEALTH, losthead_health=c.POLE_VAULTING_LOSTHEAD_HEALTH) self.speed = 1.88 self.jumped = False self.jumping = False @@ -975,12 +978,12 @@ class PoleVaultingZombie(Zombie): self.frames = self.walk_before_jump_frames - def setJump(self, successfullyJumped, jumpX): + def setJump(self, successfullyJumped, jump_x): if not self.jumping: self.jumping = True self.changeFrames(self.jump_frames) self.successfullyJumped = successfullyJumped - self.jumpX = jumpX + self.jump_x = jump_x # 播放跳跃音效 c.SOUND_POLEVAULT_JUMP.play() @@ -1005,7 +1008,7 @@ class PoleVaultingZombie(Zombie): if self.jumping and (not self.jumped): self.changeFrames(self.walk_frames) if self.successfullyJumped: - self.rect.centerx = self.jumpX + self.rect.centerx = self.jump_x self.jumped = True self.speed = 1.04 self.animate_timer = self.current_time @@ -1043,7 +1046,7 @@ class PoleVaultingZombie(Zombie): # 注意:冰车僵尸移动变速 class Zomboni(Zombie): def __init__(self, x, y, plant_group, map, IceFrozenPlot): - Zombie.__init__(self, x, y, c.ZOMBONI, bodyHealth=c.ZOMBONI_HEALTH) + Zombie.__init__(self, x, y, c.ZOMBONI, body_health=c.ZOMBONI_HEALTH) self.plant_group = plant_group self.map = map self.IceFrozenPlot = IceFrozenPlot @@ -1095,7 +1098,7 @@ class Zomboni(Zombie): elif self.health <= c.ZOMBONI_DAMAGED1_HEALTH: self.changeFrames(self.walk_damaged1_frames) - if (self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.getTimeRatio()) and (not self.lostHead): + if (self.current_time - self.walk_timer) > (c.ZOMBIE_WALK_INTERVAL * self.getTimeRatio()) and (not self.losthead): self.walk_timer = self.current_time if self.is_hypno: self.rect.x += 1 @@ -1111,14 +1114,14 @@ class Zomboni(Zombie): plant.health -= 8000 # 造冰 - mapX, mapY = self.map.getMapIndex(self.rect.right - 40, self.rect.bottom) - if 0 <= mapX < c.GRID_X_LEN: - if c.ICEFROZENPLOT not in self.map.map[mapY][mapX]: - x, y = self.map.getMapGridPos(mapX, mapY) + map_x, map_y = self.map.getMapIndex(self.rect.right - 40, self.rect.bottom) + if 0 <= map_x < c.GRID_X_LEN: + if c.ICEFROZENPLOT not in self.map.map[map_y][map_x]: + x, y = self.map.getMapGridPos(map_x, map_y) self.plant_group.add(self.IceFrozenPlot(x, y)) - self.map.map[mapY][mapX][c.MAP_PLANT].add(c.ICEFROZENPLOT) + self.map.map[map_y][map_x][c.MAP_PLANT].add(c.ICEFROZENPLOT) - self.speed = max(0.6, 1.5 - (c.GRID_X_LEN + 1 - mapX)*0.225) + self.speed = max(0.6, 1.5 - (c.GRID_X_LEN + 1 - map_x)*0.225) def setDie(self): self.state = c.DIE @@ -1130,7 +1133,7 @@ class Zomboni(Zombie): class SnorkelZombie(Zombie): def __init__(self, x, y, head_group): - Zombie.__init__(self, x, y, c.SNORKELZOMBIE, canSwim=True) + Zombie.__init__(self, x, y, c.SNORKELZOMBIE, can_swim=True) self.speed = 1.175 self.walk_animate_interval = 60 self.canSetAttack = True @@ -1250,7 +1253,7 @@ class SnorkelZombie(Zombie): self.prey_is_plant = is_plant self.animate_interval = self.attack_animate_interval - if self.lostHead: + if self.losthead: self.changeFrames(self.losthead_attack_frames) elif self.canSetAttack: self.changeFrames(self.float_frames) diff --git a/source/state/level.py b/source/state/level.py index e925bd7..55a2c52 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -18,10 +18,10 @@ class Level(tool.State): # 暂停状态 self.pause = False - self.pauseTime = 0 + self.pause_time = 0 # 默认显然不用显示菜单 - self.showLittleMenu = False + self.show_little_menu = False # 导入地图参数 self.loadMap() @@ -173,128 +173,128 @@ class Level(tool.State): # 最后一波或者大于最后一波 # 如果在夜晚按需从墓碑生成僵尸 # 否则直接return - if self.waveNum >= self.map_data[c.NUM_FLAGS] * 10: + if self.wave_num >= self.map_data[c.NUM_FLAGS] * 10: if self.map_data[c.BACKGROUND_TYPE] == c.BACKGROUND_NIGHT: # 生长墓碑 - if not self.graveInLevelAdded: - if current_time - self.waveTime > 100: + if not self.new_grave_added: + if current_time - self.wave_time > 100: # 墓碑最多有12个 - if len(self.graveSet) < 12: + if len(self.grave_set) < 12: unoccupied = [] occupied = [] # 毁灭菇坑与冰道应当特殊化 exceptionObjects = {c.HOLE, c.ICEFROZENPLOT} # 遍历能生成墓碑的区域 - for mapY in range(0, 4): - for mapX in range(4, 8): + for map_y in range(0, 4): + for map_x in range(4, 8): # 为空、为毁灭菇坑、为冰道时看作未被植物占据 - if ((not self.map.map[mapY][mapX][c.MAP_PLANT]) or - (all((i in exceptionObjects) for i in self.map.map[mapY][mapX][c.MAP_PLANT]))): - unoccupied.append((mapX, mapY)) + if ((not self.map.map[map_y][map_x][c.MAP_PLANT]) or + (all((i in exceptionObjects) for i in self.map.map[map_y][map_x][c.MAP_PLANT]))): + unoccupied.append((map_x, map_y)) # 已有墓碑的格子不应该放到任何列表中 - elif c.GRAVE not in self.map.map[mapY][mapX][c.MAP_PLANT]: - occupied.append((mapX, mapY)) + elif c.GRAVE not in self.map.map[map_y][map_x][c.MAP_PLANT]: + occupied.append((map_x, map_y)) if unoccupied: target = unoccupied[random.randint(0, len(unoccupied) - 1)] - mapX, mapY = target - posX, posY = self.map.getMapGridPos(mapX, mapY) - self.plant_groups[mapY].add(plant.Grave(posX, posY)) - self.map.map[mapY][mapX][c.MAP_PLANT].add(c.GRAVE) - self.graveSet.add((mapX, mapY)) + map_x, map_y = target + posX, posY = self.map.getMapGridPos(map_x, map_y) + self.plant_groups[map_y].add(plant.Grave(posX, posY)) + self.map.map[map_y][map_x][c.MAP_PLANT].add(c.GRAVE) + self.grave_set.add((map_x, map_y)) elif occupied: target = occupied[random.randint(0, len(occupied) - 1)] - mapX, mapY = target - posX, posY = self.map.getMapGridPos(mapX, mapY) - for i in self.plant_groups[mapY]: + map_x, map_y = target + posX, posY = self.map.getMapGridPos(map_x, map_y) + for i in self.plant_groups[map_y]: checkMapX, _ = self.map.getMapIndex(i.rect.centerx, i.rect.bottom) - if mapX == checkMapX: + if map_x == checkMapX: # 不杀死毁灭菇坑和冰道 if i.name not in exceptionObjects: i.health = 0 - self.plant_groups[mapY].add(plant.Grave(posX, posY)) - self.map.map[mapY][mapX][c.MAP_PLANT].add(c.GRAVE) - self.graveSet.add((mapX, mapY)) - self.graveInLevelAdded = True + self.plant_groups[map_y].add(plant.Grave(posX, posY)) + self.map.map[map_y][map_x][c.MAP_PLANT].add(c.GRAVE) + self.grave_set.add((map_x, map_y)) + self.new_grave_added = True # 从墓碑中生成僵尸 - if not self.graveZombieCreated: - if current_time - self.waveTime > 1500: - for item in self.graveSet: - itemX, itemY = self.map.getMapGridPos(*item) + if not self.grave_zombie_created: + if current_time - self.wave_time > 1500: + for item in self.grave_set: + item_x, item_y = self.map.getMapGridPos(*item) # 目前设定:1/2概率普通僵尸,1/2概率路障僵尸 if random.randint(0, 1): - self.zombie_groups[item[1]].add(zombie.NormalZombie(itemX, itemY, self.head_group)) + self.zombie_groups[item[1]].add(zombie.NormalZombie(item_x, item_y, self.head_group)) else: - self.zombie_groups[item[1]].add(zombie.ConeHeadZombie(itemX, itemY, self.head_group)) - self.graveZombieCreated = True + self.zombie_groups[item[1]].add(zombie.ConeHeadZombie(item_x, item_y, self.head_group)) + self.grave_zombie_created = True elif self.map_data[c.BACKGROUND_TYPE] in c.POOL_EQUIPPED_BACKGROUNDS: if not self.createdZombieFromPool: - if current_time - self.waveTime > 1500: + if current_time - self.wave_time > 1500: for i in range(3): # 水中倒数四列内可以在此时产生僵尸。共产生3个 - mapX, mapY = random.randint(5, 8), random.randint(2, 3) - itemX, itemY = self.map.getMapGridPos(mapX, mapY) + map_x, map_y = random.randint(5, 8), random.randint(2, 3) + item_x, item_y = self.map.getMapGridPos(map_x, map_y) # 用随机数指定产生的僵尸类型 # 暂时设定为生成概率相同 zombieType = random.randint(1, 3) if zombieType == 1: - self.zombie_groups[mapY].add(zombie.BucketHeadDuckyTubeZombie(itemX, itemY, self.head_group)) + self.zombie_groups[map_y].add(zombie.BucketHeadDuckyTubeZombie(item_x, item_y, self.head_group)) elif zombieType == 2: - self.zombie_groups[mapY].add(zombie.ConeHeadDuckyTubeZombie(itemX, itemY, self.head_group)) + self.zombie_groups[map_y].add(zombie.ConeHeadDuckyTubeZombie(item_x, item_y, self.head_group)) else: - self.zombie_groups[mapY].add(zombie.DuckyTubeZombie(itemX, itemY, self.head_group)) + self.zombie_groups[map_y].add(zombie.DuckyTubeZombie(item_x, item_y, self.head_group)) self.createdZombieFromPool = True return # 还未开始出现僵尸 - if (self.waveNum == 0): - if (self.waveTime == 0): # 表明刚刚开始游戏 - self.waveTime = current_time + if (self.wave_num == 0): + if (self.wave_time == 0): # 表明刚刚开始游戏 + self.wave_time = current_time else: if (survivalRounds == 0) and (self.bar_type == c.CHOOSEBAR_STATIC): # 首次选卡等待时间较长 - if current_time - self.waveTime >= 18000: - self.waveNum += 1 - self.waveTime = current_time - self.waveZombies = self.waves[self.waveNum - 1] - self.numZombie = len(self.waveZombies) + if current_time - self.wave_time >= 18000: + self.wave_num += 1 + self.wave_time = current_time + self.wave_zombies = self.waves[self.wave_num - 1] + self.zombie_num = len(self.wave_zombies) c.SOUND_ZOMBIE_COMING.play() else: - if (current_time - self.waveTime >= 6000): - self.waveNum += 1 - self.waveTime = current_time - self.waveZombies = self.waves[self.waveNum - 1] - self.numZombie = len(self.waveZombies) + if (current_time - self.wave_time >= 6000): + self.wave_num += 1 + self.wave_time = current_time + self.wave_zombies = self.waves[self.wave_num - 1] + self.zombie_num = len(self.wave_zombies) c.SOUND_ZOMBIE_COMING.play() return - if (self.waveNum % 10 != 9): - if ((current_time - self.waveTime >= 25000 + random.randint(0, 6000)) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.waveTime >= 12500 + random.randint(0, 3000))): - self.waveNum += 1 - self.waveTime = current_time - self.waveZombies = self.waves[self.waveNum - 1] - self.numZombie = len(self.waveZombies) + if (self.wave_num % 10 != 9): + if ((current_time - self.wave_time >= 25000 + random.randint(0, 6000)) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.wave_time >= 12500 + random.randint(0, 3000))): + self.wave_num += 1 + self.wave_time = current_time + self.wave_zombies = self.waves[self.wave_num - 1] + self.zombie_num = len(self.wave_zombies) c.SOUND_ZOMBIE_VOICE.play() else: - if ((current_time - self.waveTime >= 45000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.waveTime >= 25000)): - self.waveNum += 1 - self.waveTime = current_time - self.waveZombies = self.waves[self.waveNum - 1] - self.numZombie = len(self.waveZombies) + if ((current_time - self.wave_time >= 45000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.wave_time >= 25000)): + self.wave_num += 1 + self.wave_time = current_time + self.wave_zombies = self.waves[self.wave_num - 1] + self.zombie_num = len(self.wave_zombies) # 一大波时播放音效 c.SOUND_HUGE_WAVE_APPROCHING.play() return - elif ((current_time - self.waveTime >= 43000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.waveTime >= 23000)): - self.showHugeWaveApprochingTime = current_time + elif ((current_time - self.wave_time >= 43000) or (self.bar_type != c.CHOOSEBAR_STATIC and current_time - self.wave_time >= 23000)): + self.show_hugewave_approching_time = current_time - numZombies = 0 + zombie_nums = 0 for i in range(self.map_y_len): - numZombies += len(self.zombie_groups[i]) - if (numZombies / self.numZombie < random.uniform(0.15, 0.25)) and (current_time - self.waveTime > 4000): + zombie_nums += len(self.zombie_groups[i]) + if (zombie_nums / self.zombie_num < random.uniform(0.15, 0.25)) and (current_time - self.wave_time > 4000): # 当僵尸所剩无几并且时间过了4000 ms以上时,改变时间记录,使得2000 ms后刷新僵尸(所以需要判断剩余时间是否大于2000 ms) if self.bar_type == c.CHOOSEBAR_STATIC: - if current_time - 43000 < self.waveTime: # 判断剩余时间是否有2000 ms - self.waveTime = current_time - 43000 # 即倒计时2000 ms + if current_time - 43000 < self.wave_time: # 判断剩余时间是否有2000 ms + self.wave_time = current_time - 43000 # 即倒计时2000 ms else: - if current_time - 23000 < self.waveTime: # 判断剩余时间是否有2000 ms - self.waveTime = current_time - 23000 # 即倒计时2000 ms + if current_time - 23000 < self.wave_time: # 判断剩余时间是否有2000 ms + self.wave_time = current_time - 23000 # 即倒计时2000 ms # 旧机制,目前仅用于调试 @@ -316,7 +316,7 @@ class Level(tool.State): # 更新函数每帧被调用,将鼠标事件传入给状态处理函数 def update(self, surface, current_time, mouse_pos, mouse_click): - self.current_time = self.game_info[c.CURRENT_TIME] = self.pvzTime(current_time) + self.current_time = self.game_info[c.CURRENT_TIME] = self.gameTime(current_time) if self.state == c.CHOOSE: self.choose(mouse_pos, mouse_click) elif self.state == c.PLAY: @@ -324,13 +324,13 @@ class Level(tool.State): self.draw(surface) - def pvzTime(self, current_time): + def gameTime(self, current_time): # 扣除暂停时间 if not self.pause: - self.beforePauseTime = current_time - self.pauseTime + self.before_pause_time = current_time - self.pause_time else: - self.pauseTime = current_time - self.beforePauseTime - return self.beforePauseTime + self.pause_time = current_time - self.before_pause_time + return self.before_pause_time def initBowlingMap(self): for x in range(3, self.map.width): @@ -365,7 +365,7 @@ class Level(tool.State): def choose(self, mouse_pos, mouse_click): # 如果暂停 - if self.showLittleMenu: + if self.show_little_menu: self.pauseAndCheckLittleMenuOptions(mouse_pos, mouse_click) return @@ -374,7 +374,7 @@ class Level(tool.State): if self.panel.checkStartButtonClick(mouse_pos): self.initPlay(self.panel.getSelectedCards()) elif self.inArea(self.little_menu_rect, *mouse_pos): - self.showLittleMenu = True + self.show_little_menu = True c.SOUND_BUTTON_CLICK.play() def initPlay(self, card_list): @@ -400,7 +400,7 @@ class Level(tool.State): # 用种下植物的名称与位置元组判断是否需要刷新僵尸的攻击对象 # 种植植物后应当刷新僵尸的攻击对象,当然,默认初始时不用刷新 - self.newPlantAndPositon = None + self.new_plant_and_positon = None if self.background_type in c.DAYTIME_BACKGROUNDS and self.bar_type == c.CHOOSEBAR_STATIC: self.produce_sun = True @@ -414,10 +414,10 @@ class Level(tool.State): self.setupZombies() else: # 僵尸波数数据及僵尸生成数据 - self.waveNum = 0 # 还未出现僵尸时定义为0 - self.waveTime = 0 - self.waveZombies = [] - self.numZombie = 0 + self.wave_num = 0 # 还未出现僵尸时定义为0 + self.wave_time = 0 + self.wave_zombies = [] + self.zombie_num = 0 # 暂时没有生存模式,所以 survivalRounds = 0 if c.INEVITABLE_ZOMBIE_DICT in self.map_data: @@ -447,31 +447,31 @@ class Level(tool.State): self.setupLevelProgressBarImage() self.setupHugeWaveApprochingImage() - self.showHugeWaveApprochingTime = -2000 # 防止设置为0时刚刚打开游戏就已经启动红字 + self.show_hugewave_approching_time = -2000 # 防止设置为0时刚刚打开游戏就已经启动红字 if self.map_data[c.BACKGROUND_TYPE] == c.BACKGROUND_NIGHT: # 判断墓碑数量等级 # 0为无墓碑,1为少量墓碑,2为中等量墓碑,3为大量墓碑 if c.GRADE_GRAVES in self.map_data: - gradeGraves = self.map_data[c.GRADE_GRAVES] + grade_graves = self.map_data[c.GRADE_GRAVES] # 缺省为少量墓碑 else: - gradeGraves = 1 + grade_graves = 1 - graveVolume = c.GRAVES_GRADE_INFO[gradeGraves] - self.graveSet = set() - while len(self.graveSet) < graveVolume: - mapX = random.randint(4, 8) # 注意是从0开始编号 - mapY = random.randint(0, 4) - self.graveSet.add((mapX, mapY)) - if self.graveSet: - for i in self.graveSet: - mapX, mapY = i - posX, posY = self.map.getMapGridPos(mapX, mapY) - self.plant_groups[mapY].add(plant.Grave(posX, posY)) - self.map.map[mapY][mapX][c.MAP_PLANT].add(c.GRAVE) - self.graveZombieCreated = False - self.graveInLevelAdded = False + graveVolume = c.GRAVES_GRADE_INFO[grade_graves] + self.grave_set = set() + while len(self.grave_set) < graveVolume: + map_x = random.randint(4, 8) # 注意是从0开始编号 + map_y = random.randint(0, 4) + self.grave_set.add((map_x, map_y)) + if self.grave_set: + for i in self.grave_set: + map_x, map_y = i + posX, posY = self.map.getMapGridPos(map_x, map_y) + self.plant_groups[map_y].add(plant.Grave(posX, posY)) + self.map.map[map_y][map_x][c.MAP_PLANT].add(c.GRAVE) + self.grave_zombie_created = False + self.new_grave_added = False # 小菜单 @@ -554,7 +554,7 @@ class Level(tool.State): if self.inArea(self.return_button_rect, *mouse_pos): # 终止暂停,停止显示菜单 self.pause = False - self.showLittleMenu = False + self.show_little_menu = False # 继续播放音乐 pg.mixer.music.unpause() # 播放点击音效 @@ -656,10 +656,10 @@ class Level(tool.State): def play(self, mouse_pos, mouse_click): # 原版阳光掉落机制需要 # 已掉落的阳光 - self.fallenSun = 0 + self.fallen_sun = 0 # 如果暂停 - if self.showLittleMenu: + if self.show_little_menu: self.pauseAndCheckLittleMenuOptions(mouse_pos, mouse_click) return @@ -676,10 +676,10 @@ class Level(tool.State): else: # 新僵尸生成方式 self.refreshWaves(self.current_time) - for i in self.waveZombies: + for i in self.wave_zombies: self.createZombie(i) else: - self.waveZombies = [] + self.wave_zombies = [] for i in range(self.map_y_len): @@ -697,42 +697,42 @@ class Level(tool.State): if self.produce_sun: # 原版阳光掉落机制:(已掉落阳光数*100 ms + 4250 ms) 与 9500 ms的最小值,再加 0 ~ 2750 ms 之间的一个数 - if (self.current_time - self.sun_timer) > min(c.PRODUCE_SUN_INTERVAL + 100*self.fallenSun, 9500) + random.randint(0, 2750): + if (self.current_time - self.sun_timer) > min(c.PRODUCE_SUN_INTERVAL + 100*self.fallen_sun, 9500) + random.randint(0, 2750): self.sun_timer = self.current_time map_x, map_y = self.map.getRandomMapIndex() x, y = self.map.getMapGridPos(map_x, map_y) self.sun_group.add(plant.Sun(x, 0, x, y)) - self.fallenSun += 1 + self.fallen_sun += 1 # wcb 添加 # 检查有没有捡到阳光 - clickedSun = False - clickedCardsOrMap = False + clicked_sun = False + clicked_cards_or_map = False if not self.drag_plant and not self.drag_shovel and mouse_pos and mouse_click[0]: for sun in self.sun_group: if sun.checkCollision(mouse_pos[0], mouse_pos[1]): self.menubar.increaseSunValue(sun.sun_value) - clickedSun = True + clicked_sun = True # 播放收集阳光的音效 c.SOUND_COLLECT_SUN.play() # 拖动植物或者铲子 - if not self.drag_plant and mouse_pos and mouse_click[0] and not clickedSun: - self.clickResult = self.menubar.checkCardClick(mouse_pos) - if self.clickResult: - self.setupMouseImage(self.clickResult[0], self.clickResult[1]) - self.clickResult[1].clicked = True - clickedCardsOrMap = True + if not self.drag_plant and mouse_pos and mouse_click[0] and not clicked_sun: + self.click_result = self.menubar.checkCardClick(mouse_pos) + if self.click_result: + self.setupMouseImage(self.click_result[0], self.click_result[1]) + self.click_result[1].clicked = True + clicked_cards_or_map = True # 播放音效 c.SOUND_CLICK_CARD.play() elif self.drag_plant: if mouse_click[1]: self.removeMouseImage() - clickedCardsOrMap = True - self.clickResult[1].clicked = False + clicked_cards_or_map = True + self.click_result[1].clicked = False elif mouse_click[0]: if self.menubar.checkMenuBarClick(mouse_pos): - self.clickResult[1].clicked = False + self.click_result[1].clicked = False self.removeMouseImage() else: self.addPlant() @@ -743,10 +743,10 @@ class Level(tool.State): self.removeMouseImagePlus() # 检查是否点击菜单 - if mouse_click[0] and (not clickedSun) and (not clickedCardsOrMap): + if mouse_click[0] and (not clicked_sun) and (not clicked_cards_or_map): if self.inArea(self.little_menu_rect, *mouse_pos): # 暂停 显示菜单 - self.showLittleMenu = True + self.show_little_menu = True # 播放点击音效 c.SOUND_BUTTON_CLICK.play() elif self.hasShovel: @@ -799,44 +799,44 @@ class Level(tool.State): if self.map_data[c.SPAWN_ZOMBIES] == c.SPAWN_ZOMBIES_AUTO: # 旗帜波出生点右移 - if self.waveNum % 10: - hugeWaveMove = 0 + if self.wave_num % 10: + huge_wave_move = 0 else: - hugeWaveMove = 40 + huge_wave_move = 40 else: - hugeWaveMove = 0 + huge_wave_move = 0 x, y = self.map.getMapGridPos(0, map_y) # 新增的僵尸也需要在这里声明 if name == c.NORMAL_ZOMBIE: - self.zombie_groups[map_y].add(zombie.NormalZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.NormalZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.CONEHEAD_ZOMBIE: - self.zombie_groups[map_y].add(zombie.ConeHeadZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.ConeHeadZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.BUCKETHEAD_ZOMBIE: - self.zombie_groups[map_y].add(zombie.BucketHeadZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.BucketHeadZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.FLAG_ZOMBIE: self.zombie_groups[map_y].add(zombie.FlagZombie(c.ZOMBIE_START_X, y, self.head_group)) elif name == c.NEWSPAPER_ZOMBIE: - self.zombie_groups[map_y].add(zombie.NewspaperZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.NewspaperZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.FOOTBALL_ZOMBIE: - self.zombie_groups[map_y].add(zombie.FootballZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.FootballZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.DUCKY_TUBE_ZOMBIE: - self.zombie_groups[map_y].add(zombie.DuckyTubeZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.DuckyTubeZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.CONEHEAD_DUCKY_TUBE_ZOMBIE: - self.zombie_groups[map_y].add(zombie.ConeHeadDuckyTubeZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.ConeHeadDuckyTubeZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.BUCKETHEAD_DUCKY_TUBE_ZOMBIE: - self.zombie_groups[map_y].add(zombie.BucketHeadDuckyTubeZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.BucketHeadDuckyTubeZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.SCREEN_DOOR_ZOMBIE: - self.zombie_groups[map_y].add(zombie.ScreenDoorZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.ScreenDoorZombie(c.ZOMBIE_START_X + random.randint(-20, 20) + huge_wave_move, y, self.head_group)) elif name == c.POLE_VAULTING_ZOMBIE: # 本来撑杆跳生成位置不同,对齐左端可认为修正了一部分(看作移动了70),只需要相对修改即可 - self.zombie_groups[map_y].add(zombie.PoleVaultingZombie(c.ZOMBIE_START_X + random.randint(0, 10) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.PoleVaultingZombie(c.ZOMBIE_START_X + random.randint(0, 10) + huge_wave_move, y, self.head_group)) elif name == c.ZOMBONI: # 冰车僵尸生成位置不同 - self.zombie_groups[map_y].add(zombie.Zomboni(c.ZOMBIE_START_X + random.randint(0, 10) + hugeWaveMove, y, self.plant_groups[map_y], self.map, plant.IceFrozenPlot)) + self.zombie_groups[map_y].add(zombie.Zomboni(c.ZOMBIE_START_X + random.randint(0, 10) + huge_wave_move, y, self.plant_groups[map_y], self.map, plant.IceFrozenPlot)) elif name == c.SNORKELZOMBIE: # 潜水僵尸生成位置不同 - self.zombie_groups[map_y].add(zombie.SnorkelZombie(c.ZOMBIE_START_X + random.randint(0, 10) + hugeWaveMove, y, self.head_group)) + self.zombie_groups[map_y].add(zombie.SnorkelZombie(c.ZOMBIE_START_X + random.randint(0, 10) + huge_wave_move, y, self.head_group)) # 能否种植物的判断: # 先判断位置是否合法 isValid(map_x, map_y) @@ -852,7 +852,7 @@ class Level(tool.State): return # 恢复植物卡片样式 - self.clickResult[1].clicked = False + self.click_result[1].clicked = False if self.hint_image is None: self.setupHintImage() @@ -929,13 +929,13 @@ class Level(tool.State): if new_plant.can_sleep and self.background_type in c.DAYTIME_BACKGROUNDS: new_plant.setSleep() - mushroomSleep = True + mushroom_sleep = True else: - mushroomSleep = False + mushroom_sleep = False self.plant_groups[map_y].add(new_plant) # 种植植物后应当刷新僵尸的攻击对象 # 用元组表示植物的名称和格子坐标 - self.newPlantAndPositon = (new_plant.name, (map_x, map_y)) + self.new_plant_and_positon = (new_plant.name, (map_x, map_y)) if self.bar_type == c.CHOOSEBAR_STATIC: self.menubar.decreaseSunValue(self.select_plant.sun_cost) self.menubar.setCardFrozenTime(self.plant_name) @@ -943,10 +943,10 @@ class Level(tool.State): self.menubar.deleateCard(self.select_plant) if self.bar_type != c.CHOOSEBAR_BOWLING: # 坚果保龄球关卡无需考虑格子被占用的情况 - self.map.addMapPlant(map_x, map_y, self.plant_name, sleep=mushroomSleep) + self.map.addMapPlant(map_x, map_y, self.plant_name, sleep=mushroom_sleep) self.removeMouseImage() - # print(self.newPlantAndPositon) + # print(self.new_plant_and_positon) # 播放种植音效 c.SOUND_PLANT.play() @@ -1028,7 +1028,6 @@ class Level(tool.State): def checkZombieCollisions(self): for i in range(self.map_y_len): - hypo_zombies = [] for zombie in self.zombie_groups[i]: if zombie.name == c.ZOMBONI: continue @@ -1041,107 +1040,107 @@ class Level(tool.State): if zombie.state != c.ATTACK: continue # 没有新的植物种下时不用刷新 - if not self.newPlantAndPositon: + if not self.new_plant_and_positon: continue # 被攻击对象是植物时才可能刷新 if zombie.prey_is_plant: # 新植物种在被攻击植物同一格时才可能刷新 - if (zombie.preyMapX, zombie.preyMapY) == self.newPlantAndPositon[1]: + if (zombie.prey_map_x, zombie.prey_map_y) == self.new_plant_and_positon[1]: # 如果被攻击植物是睡莲和花盆,同一格种了植物必然刷新 # 如果被攻击植物不是睡莲和花盆,同一格种了南瓜头才刷新 if ((zombie.prey.name not in {c.LILYPAD, "花盆(未实现)"}) - and (self.newPlantAndPositon[0] != c.PUMPKINHEAD)): + and (self.new_plant_and_positon[0] != c.PUMPKINHEAD)): continue else: continue else: continue - if zombie.canSwim and (not zombie.swimming): + if zombie.can_swim and (not zombie.swimming): continue # 以下代码为了实现各个功能,较为凌乱 - attackableCommonPlants = [] - attackableBackupPlant = [] + attackable_common_plants = [] + attackable_backup_plants = [] # 利用更加精细的循环判断啃咬优先顺序 for plant in self.plant_groups[i]: if collided_func(plant, zombie): # 优先攻击南瓜头 if plant.name == c.PUMPKINHEAD: - targetPlant = plant + target_plant = plant break # 衬底植物情形 elif plant.name in {c.LILYPAD, "花盆(未实现)"}: - attackableBackupPlant.append(plant) + attackable_backup_plants.append(plant) # 一般植物情形 # 同时也忽略了不可啃食对象 elif plant.name not in c.CAN_SKIP_ZOMBIE_COLLISION_CHECK: - attackableCommonPlants.append(plant) + attackable_common_plants.append(plant) # 在生效状态下忽略啃食碰撞但其他状况下不能忽略的情形 elif plant.name in c.SKIP_ZOMBIE_COLLISION_CHECK_WHEN_WORKING: if not plant.start_boom: - attackableCommonPlants.append(plant) + attackable_common_plants.append(plant) else: - if attackableCommonPlants: + if attackable_common_plants: # 默认为最右侧的一个植物 - targetPlant = max(attackableCommonPlants, key=lambda i: i.rect.x) - elif attackableBackupPlant: - targetPlant = max(attackableBackupPlant, key=lambda i: i.rect.x) - map_x, map_y = self.map.getMapIndex(targetPlant.rect.centerx, targetPlant.rect.centery) + target_plant = max(attackable_common_plants, key=lambda i: i.rect.x) + elif attackable_backup_plants: + target_plant = max(attackable_backup_plants, key=lambda i: i.rect.x) + map_x, map_y = self.map.getMapIndex(target_plant.rect.centerx, target_plant.rect.centery) if len(self.map.map[map_y][map_x][c.MAP_PLANT]) >= 2: - for actualTargetPlant in self.plant_groups[i]: + for actual_target_plant in self.plant_groups[i]: # 检测同一格的其他植物 - if self.map.getMapIndex(actualTargetPlant.rect.centerx, actualTargetPlant.rect.bottom) == (map_x, map_y): - if actualTargetPlant.name == c.PUMPKINHEAD: - targetPlant = actualTargetPlant + if self.map.getMapIndex(actual_target_plant.rect.centerx, actual_target_plant.rect.bottom) == (map_x, map_y): + if actual_target_plant.name == c.PUMPKINHEAD: + target_plant = actual_target_plant break - elif actualTargetPlant.name not in {c.LILYPAD, "花盆(未实现)"}: - attackableCommonPlants.append(actualTargetPlant) + elif actual_target_plant.name not in {c.LILYPAD, "花盆(未实现)"}: + attackable_common_plants.append(actual_target_plant) else: - if attackableCommonPlants: - targetPlant = attackableCommonPlants[-1] + if attackable_common_plants: + target_plant = attackable_common_plants[-1] else: - targetPlant = None + target_plant = None - if targetPlant: - zombie.preyMapX, zombie.preyMapY = self.map.getMapIndex(targetPlant.rect.centerx, targetPlant.rect.centery) + if target_plant: + zombie.prey_map_x, zombie.prey_map_y = self.map.getMapIndex(target_plant.rect.centerx, target_plant.rect.centery) # 撑杆跳的特殊情况 if zombie.name in {c.POLE_VAULTING_ZOMBIE} and (not zombie.jumped): if not zombie.jumping: - zombie.jumpMap_x, zombie.jumpMap_y = min(c.GRID_X_LEN - 1, zombie.preyMapX), min(self.map_y_len - 1, zombie.preyMapY) - jumpX = targetPlant.rect.x - c.GRID_X_SIZE * 0.6 - if c.TALLNUT in self.map.map[zombie.jumpMap_y][zombie.jumpMap_x][c.MAP_PLANT]: - zombie.setJump(False, jumpX) + zombie.jump_map_x, zombie.jump_map_y = min(c.GRID_X_LEN - 1, zombie.prey_map_x), min(self.map_y_len - 1, zombie.prey_map_y) + jump_x = target_plant.rect.x - c.GRID_X_SIZE * 0.6 + if c.TALLNUT in self.map.map[zombie.jump_map_y][zombie.jump_map_x][c.MAP_PLANT]: + zombie.setJump(False, jump_x) else: - zombie.setJump(True, jumpX) + zombie.setJump(True, jump_x) else: - if c.TALLNUT in self.map.map[zombie.jumpMap_y][zombie.jumpMap_x][c.MAP_PLANT]: - zombie.setJump(False, zombie.jumpX) + if c.TALLNUT in self.map.map[zombie.jump_map_y][zombie.jump_map_x][c.MAP_PLANT]: + zombie.setJump(False, zombie.jump_x) else: - zombie.setJump(True, zombie.jumpX) + zombie.setJump(True, zombie.jump_x) continue - if targetPlant.name == c.WALLNUTBOWLING: - if targetPlant.canHit(i): - # targetPlant.vel_y不为0,有纵向速度,表明已经发生过碰撞,对铁门秒杀(这里实现为忽略二类防具攻击) - if targetPlant.vel_y and zombie.name == c.SCREEN_DOOR_ZOMBIE: + if target_plant.name == c.WALLNUTBOWLING: + if target_plant.canHit(i): + # target_plant.vel_y不为0,有纵向速度,表明已经发生过碰撞,对铁门秒杀(这里实现为忽略二类防具攻击) + if target_plant.vel_y and zombie.name == c.SCREEN_DOOR_ZOMBIE: zombie.setDamage(c.WALLNUT_BOWLING_DAMAGE, damageType=c.ZOMBIE_COMMON_DAMAGE) else: zombie.setDamage(c.WALLNUT_BOWLING_DAMAGE, damageType=c.ZOMBIE_WALLNUT_BOWLING_DANMAGE) - targetPlant.changeDirection(i) + target_plant.changeDirection(i) # 播放撞击音效 c.SOUND_BOWLING_IMPACT.play() - elif targetPlant.name == c.REDWALLNUTBOWLING: - if targetPlant.state == c.IDLE: - targetPlant.setAttack() - elif zombie.targetYChange: + elif target_plant.name == c.REDWALLNUTBOWLING: + if target_plant.state == c.IDLE: + target_plant.setAttack() + elif zombie.target_y_change: # 大蒜作用正在生效的僵尸不进行传递 continue - elif targetPlant.name == c.GARLIC: - zombie.setAttack(targetPlant) + elif target_plant.name == c.GARLIC: + zombie.setAttack(target_plant) # 向吃过大蒜的僵尸传入level zombie.level = self - zombie.toChangeGroup = True - zombie.mapY = i + zombie.to_change_group = True + zombie.map_y = i if i == 0: _move = 1 elif i == self.map_y_len - 1: @@ -1150,10 +1149,10 @@ class Level(tool.State): _move = random.randint(0, 1)*2 - 1 if self.map.map[i][0][c.MAP_PLOT_TYPE] != self.map.map[i + _move][0][c.MAP_PLOT_TYPE]: _move = -(_move) - zombie.targetMapY = i + _move - zombie.targetYChange = _move * self.map.gridHeightSize + zombie.target_map_y = i + _move + zombie.target_y_change = _move * self.map.gridHeightSize else: - zombie.setAttack(targetPlant) + zombie.setAttack(target_plant) for hypno_zombie in self.hypno_zombie_groups[i]: if hypno_zombie.health <= 0: @@ -1164,23 +1163,24 @@ class Level(tool.State): for zombie in zombie_list: if zombie.state == c.DIE: continue + # 正常僵尸攻击被魅惑的僵尸 if zombie.state == c.WALK: zombie.setAttack(hypno_zombie, False) + # 被魅惑的僵尸攻击正常僵尸 if hypno_zombie.state == c.WALK: hypno_zombie.setAttack(zombie, False) else: - self.newPlantAndPositon = None # 生效后需要解除刷新设置 + self.new_plant_and_positon = None # 生效后需要解除刷新设置 def checkCarCollisions(self): for i in range(len(self.cars)): if self.cars[i]: for zombie in self.zombie_groups[i]: - if zombie and zombie.state != c.DIE and (not zombie.lostHead) and (zombie.rect.centerx <= 0): + if zombie and zombie.state != c.DIE and (not zombie.losthead) and (zombie.rect.centerx <= 0): self.cars[i].setWalk() if zombie.rect.centerx <= self.cars[i].rect.x: zombie.health = 0 - # zombie.kill() if self.cars[i].dead: self.cars[i] = None @@ -1206,29 +1206,29 @@ class Level(tool.State): zombie.setFreeze(plant.trap_frames[0]) zombie.setDamage(20, damageType=c.ZOMBIE_RANGE_DAMAGE) # 寒冰菇还有全场20的伤害 - def killPlant(self, targetPlant, shovel=False): - x, y = targetPlant.getPosition() + def killPlant(self, target_plant, shovel=False): + x, y = target_plant.getPosition() map_x, map_y = self.map.getMapIndex(x, y) # 用铲子铲不用触发植物功能 if not shovel: - if targetPlant.name == c.HYPNOSHROOM and targetPlant.state != c.SLEEP: - if targetPlant.zombie_to_hypno: - zombie = targetPlant.zombie_to_hypno + if target_plant.name == c.HYPNOSHROOM and target_plant.state != c.SLEEP: + if target_plant.zombie_to_hypno: + zombie = target_plant.zombie_to_hypno zombie.setHypno() self.zombie_groups[map_y].remove(zombie) self.hypno_zombie_groups[map_y].add(zombie) # 对于墓碑:移除存储在墓碑集合中的坐标 # 注意这里是在描述墓碑而非墓碑吞噬者 - elif targetPlant.name == c.GRAVE: - self.graveSet.remove((map_x, map_y)) - elif ((targetPlant.name in { c.DOOMSHROOM, c.ICESHROOM, + elif target_plant.name == c.GRAVE: + self.grave_set.remove((map_x, map_y)) + elif ((target_plant.name in { c.DOOMSHROOM, c.ICESHROOM, c.POTATOMINE, }) - and (targetPlant.boomed)): + and (target_plant.boomed)): # 毁灭菇的情况:爆炸时为了防止蘑菇云被坑掩盖没有加入坑,这里毁灭菇死亡(即爆炸动画结束)后再加入 - if targetPlant.name == c.DOOMSHROOM: - self.plant_groups[map_y].add(plant.Hole(targetPlant.originalX, targetPlant.originalY, self.map.map[map_y][map_x][c.MAP_PLOT_TYPE])) - elif targetPlant.name not in c.PLANT_DIE_SOUND_EXCEPTIONS: + if target_plant.name == c.DOOMSHROOM: + self.plant_groups[map_y].add(plant.Hole(target_plant.original_x, target_plant.original_y, self.map.map[map_y][map_x][c.MAP_PLOT_TYPE])) + elif target_plant.name not in c.PLANT_DIE_SOUND_EXCEPTIONS: # 触发植物死亡音效 c.SOUND_PLANT_DIE.play() else: @@ -1237,29 +1237,29 @@ class Level(tool.State): # 整理地图信息 if self.bar_type != c.CHOOSEBAR_BOWLING: - self.map.removeMapPlant(map_x, map_y, targetPlant.name) + self.map.removeMapPlant(map_x, map_y, target_plant.name) # 将睡眠植物移除后更新睡眠状态 - if targetPlant.state == c.SLEEP: + if target_plant.state == c.SLEEP: self.map.map[map_y][map_x][c.MAP_SLEEP] = False # 避免僵尸在用铲子移除植物后还在原位啃食 - targetPlant.health = 0 - targetPlant.kill() + target_plant.health = 0 + target_plant.kill() - def checkPlant(self, targetPlant, i): + def checkPlant(self, target_plant, i): zombie_len = len(self.zombie_groups[i]) # 不用检查攻击状况的情况 - if targetPlant.name in c.PLANT_NON_CHECK_ATTACK_STATE: + if target_plant.name in c.PLANT_NON_CHECK_ATTACK_STATE: pass - elif targetPlant.name == c.THREEPEASHOOTER: - if targetPlant.state == c.IDLE: + elif target_plant.name == c.THREEPEASHOOTER: + if target_plant.state == c.IDLE: if zombie_len > 0: - targetPlant.setAttack() + target_plant.setAttack() elif (i-1) >= 0 and len(self.zombie_groups[i-1]) > 0: - targetPlant.setAttack() + target_plant.setAttack() elif (i+1) < self.map_y_len and len(self.zombie_groups[i+1]) > 0: - targetPlant.setAttack() - elif targetPlant.state == c.ATTACK: + target_plant.setAttack() + elif target_plant.state == c.ATTACK: if zombie_len > 0: pass elif (i-1) >= 0 and len(self.zombie_groups[i-1]) > 0: @@ -1267,111 +1267,111 @@ class Level(tool.State): elif (i+1) < self.map_y_len and len(self.zombie_groups[i+1]) > 0: pass else: - targetPlant.setIdle() - elif targetPlant.name == c.CHOMPER: + target_plant.setIdle() + elif target_plant.name == c.CHOMPER: for zombie in self.zombie_groups[i]: - if targetPlant.canAttack(zombie): - targetPlant.setAttack(zombie, self.zombie_groups[i]) + if target_plant.canAttack(zombie): + target_plant.setAttack(zombie, self.zombie_groups[i]) break - elif targetPlant.name == c.POTATOMINE: + elif target_plant.name == c.POTATOMINE: for zombie in self.zombie_groups[i]: - if targetPlant.canAttack(zombie): - targetPlant.setAttack() + if target_plant.canAttack(zombie): + target_plant.setAttack() break - if targetPlant.start_boom and (not targetPlant.boomed): + if target_plant.start_boom and (not target_plant.boomed): for zombie in self.zombie_groups[i]: # 双判断:发生碰撞或在攻击范围内 - if ((pg.sprite.collide_mask(zombie, targetPlant)) or - (abs(zombie.rect.centerx - targetPlant.rect.centerx) <= targetPlant.explode_x_range)): + if ((pg.sprite.collide_mask(zombie, target_plant)) or + (abs(zombie.rect.centerx - target_plant.rect.centerx) <= target_plant.explode_x_range)): zombie.setDamage(1800, damageType=c.ZOMBIE_RANGE_DAMAGE) - targetPlant.boomed = True - elif targetPlant.name == c.SQUASH: + target_plant.boomed = True + elif target_plant.name == c.SQUASH: for zombie in self.zombie_groups[i]: - if targetPlant.canAttack(zombie): - targetPlant.setAttack(zombie, self.zombie_groups[i]) + if target_plant.canAttack(zombie): + target_plant.setAttack(zombie, self.zombie_groups[i]) break - elif targetPlant.name == c.SPIKEWEED: + elif target_plant.name == c.SPIKEWEED: can_attack = False for zombie in self.zombie_groups[i]: - if targetPlant.canAttack(zombie): + if target_plant.canAttack(zombie): can_attack = True break - if targetPlant.state == c.IDLE and can_attack: - targetPlant.setAttack(self.zombie_groups[i]) - elif targetPlant.state == c.ATTACK and not can_attack: - targetPlant.setIdle() - elif targetPlant.name == c.SCAREDYSHROOM: + if target_plant.state == c.IDLE and can_attack: + target_plant.setAttack(self.zombie_groups[i]) + elif target_plant.state == c.ATTACK and not can_attack: + target_plant.setIdle() + elif target_plant.name == c.SCAREDYSHROOM: need_cry = False can_attack = False for zombie in self.zombie_groups[i]: - if targetPlant.needCry(zombie): + if target_plant.needCry(zombie): need_cry = True break - elif targetPlant.canAttack(zombie): + elif target_plant.canAttack(zombie): can_attack = True if need_cry: - if targetPlant.state != c.CRY: - targetPlant.setCry() + if target_plant.state != c.CRY: + target_plant.setCry() elif can_attack: - if targetPlant.state != c.ATTACK: - targetPlant.setAttack() - elif targetPlant.state != c.IDLE: - targetPlant.setIdle() - elif targetPlant.name == c.STARFRUIT: + if target_plant.state != c.ATTACK: + target_plant.setAttack() + elif target_plant.state != c.IDLE: + target_plant.setIdle() + elif target_plant.name == c.STARFRUIT: can_attack = False for zombie_group in self.zombie_groups: # 遍历循环所有僵尸 for zombie in zombie_group: - if targetPlant.canAttack(zombie): + if target_plant.canAttack(zombie): can_attack = True break - if targetPlant.state == c.IDLE and can_attack: - targetPlant.setAttack() - elif (targetPlant.state == c.ATTACK and not can_attack): - targetPlant.setIdle() - elif targetPlant.name == c.TANGLEKLEP: + if target_plant.state == c.IDLE and can_attack: + target_plant.setAttack() + elif (target_plant.state == c.ATTACK and not can_attack): + target_plant.setIdle() + elif target_plant.name == c.TANGLEKLEP: for zombie in self.zombie_groups[i]: - if targetPlant.canAttack(zombie): - targetPlant.setAttack(zombie, self.zombie_groups[i]) + if target_plant.canAttack(zombie): + target_plant.setAttack(zombie, self.zombie_groups[i]) break # 灰烬植物与寒冰菇 - elif targetPlant.name in c.ASH_PLANTS_AND_ICESHROOM: - if targetPlant.start_boom and (not targetPlant.boomed): + elif target_plant.name in c.ASH_PLANTS_AND_ICESHROOM: + if target_plant.start_boom and (not target_plant.boomed): # 这样分成两层是因为场上灰烬植物肯定少,一个一个判断代价高,先笼统判断灰烬即可 - if targetPlant.name in {c.REDWALLNUTBOWLING, c.CHERRYBOMB}: - self.boomZombies(targetPlant.rect.centerx, i, targetPlant.explode_y_range, - targetPlant.explode_x_range) - elif (targetPlant.name == c.DOOMSHROOM): - x, y = targetPlant.originalX, targetPlant.originalY + if target_plant.name in {c.REDWALLNUTBOWLING, c.CHERRYBOMB}: + self.boomZombies(target_plant.rect.centerx, i, target_plant.explode_y_range, + target_plant.explode_x_range) + elif (target_plant.name == c.DOOMSHROOM): + x, y = target_plant.original_x, target_plant.original_y map_x, map_y = self.map.getMapIndex(x, y) - self.boomZombies(targetPlant.rect.centerx, i, targetPlant.explode_y_range, - targetPlant.explode_x_range) + self.boomZombies(target_plant.rect.centerx, i, target_plant.explode_y_range, + target_plant.explode_x_range) for item in self.plant_groups[map_y]: checkMapX, _ = self.map.getMapIndex(item.rect.centerx, item.rect.bottom) if map_x == checkMapX: item.health = 0 # 为了防止坑显示在蘑菇云前面,这里先不生成坑,仅填位置 self.map.map[map_y][map_x][c.MAP_PLANT].add(c.HOLE) - elif targetPlant.name == c.JALAPENO: - self.boomZombies(targetPlant.rect.centerx, i, targetPlant.explode_y_range, - targetPlant.explode_x_range, effect=c.BULLET_EFFECT_UNICE) + elif target_plant.name == c.JALAPENO: + self.boomZombies(target_plant.rect.centerx, i, target_plant.explode_y_range, + target_plant.explode_x_range, effect=c.BULLET_EFFECT_UNICE) # 消除冰道 for item in self.plant_groups[i]: if item.name == c.ICEFROZENPLOT: item.health = 0 - elif targetPlant.name == c.ICESHROOM: - self.freezeZombies(targetPlant) - targetPlant.boomed = True + elif target_plant.name == c.ICESHROOM: + self.freezeZombies(target_plant) + target_plant.boomed = True else: can_attack = False if (zombie_len > 0): for zombie in self.zombie_groups[i]: - if targetPlant.canAttack(zombie): + if target_plant.canAttack(zombie): can_attack = True break - if targetPlant.state == c.IDLE and can_attack: - targetPlant.setAttack() - elif (targetPlant.state == c.ATTACK and (not can_attack)): - targetPlant.setIdle() + if target_plant.state == c.IDLE and can_attack: + target_plant.setAttack() + elif (target_plant.state == c.ATTACK and (not can_attack)): + target_plant.setIdle() def checkPlants(self): for i in range(self.map_y_len): @@ -1389,7 +1389,7 @@ class Level(tool.State): if len(self.zombie_groups[i]) > 0: return False else: - if self.waveNum < self.map_data[c.NUM_FLAGS] * 10: + if self.wave_num < self.map_data[c.NUM_FLAGS] * 10: return False for i in range(self.map_y_len): if len(self.zombie_groups[i]) > 0: @@ -1399,8 +1399,8 @@ class Level(tool.State): def checkLose(self): for i in range(self.map_y_len): for zombie in self.zombie_groups[i]: - if zombie.rect.right < -20 and (not zombie.lostHead) and (zombie.state != c.DIE): - print(zombie.rect.right, zombie.lostHead, zombie.state,zombie.name) + if zombie.rect.right < -20 and (not zombie.losthead) and (zombie.state != c.DIE): + print(zombie.rect.right, zombie.losthead, zombie.state,zombie.name) return True return False @@ -1470,7 +1470,7 @@ class Level(tool.State): elif "花盆(未实现)" in self.map.map[map_y][map_x][c.MAP_PLANT]: if i.name == "花盆(未实现)": continue - i.highlightTime = self.current_time + i.highlight_time = self.current_time return def drawZombieFreezeTrap(self, i, surface): @@ -1483,12 +1483,12 @@ class Level(tool.State): surface.blit(self.level_progress_bar_image, self.level_progress_bar_image_rect) # 按照当前波数生成僵尸头位置 - self.level_progress_zombie_head_image_rect.x = self.level_progress_bar_image_rect.x - int((150 * self.waveNum) / (self.map_data[c.NUM_FLAGS] * 10)) + 145 # 常数为拟合值 + self.level_progress_zombie_head_image_rect.x = self.level_progress_bar_image_rect.x - int((150 * self.wave_num) / (self.map_data[c.NUM_FLAGS] * 10)) + 145 # 常数为拟合值 self.level_progress_zombie_head_image_rect.y = self.level_progress_bar_image_rect.y - 3 # 常数为拟合值 # 填充的进度条信息 # 常数为拟合值 - filledBarRect = (self.level_progress_zombie_head_image_rect.x + 3, self.level_progress_bar_image_rect.y + 6, int((150 * self.waveNum) / (self.map_data[c.NUM_FLAGS] * 10)) + 5, 9) + filledBarRect = (self.level_progress_zombie_head_image_rect.x + 3, self.level_progress_bar_image_rect.y + 6, int((150 * self.wave_num) / (self.map_data[c.NUM_FLAGS] * 10)) + 5, 9) # 画填充的进度条 pg.draw.rect(surface, c.YELLOWGREEN, filledBarRect) @@ -1530,7 +1530,7 @@ class Level(tool.State): self.panel.draw(surface) # 画小菜单 surface.blit(self.little_menu, self.little_menu_rect) - if self.showLittleMenu: + if self.show_little_menu: self.showAllContentOfMenu(surface) # 以后可能需要插入一个预备的状态(预览显示僵尸、返回战场) elif self.state == c.PLAY: @@ -1559,10 +1559,10 @@ class Level(tool.State): if self.hasShovel and self.drag_shovel: self.drawMouseShowPlus(surface) - if self.showLittleMenu: + if self.show_little_menu: self.showAllContentOfMenu(surface) if self.map_data[c.SPAWN_ZOMBIES] == c.SPAWN_ZOMBIES_AUTO: self.showLevelProgress(surface) - if self.current_time - self.showHugeWaveApprochingTime <= 2000: + if self.current_time - self.show_hugewave_approching_time <= 2000: surface.blit(self.huge_wave_approching_image, self.huge_wave_approching_image_rect) From 172b736e2f46f4f1464752d808cdc7980bb9ce09 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, 1 Aug 2022 14:39:25 +0800 Subject: [PATCH 17/18] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/state/level.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/source/state/level.py b/source/state/level.py index 55a2c52..0863e35 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -21,7 +21,7 @@ class Level(tool.State): self.pause_time = 0 # 默认显然不用显示菜单 - self.show_little_menu = False + self.show_game_menu = False # 导入地图参数 self.loadMap() @@ -52,7 +52,7 @@ class Level(tool.State): self.map_data = map.LITTLE_GAME_MAP_DATA[self.game_info[c.LITTLEGAME_NUM]] logger.warning("关卡数设定错误!进入默认的第一关!") # 是否有铲子的信息:无铲子时为0,有铲子时为1,故直接赋值即可 - self.hasShovel = self.map_data[c.SHOVEL] + self.has_shovel = self.map_data[c.SHOVEL] # 同时指定音乐 # 缺省音乐为进入的音乐,方便发现错误 @@ -365,7 +365,7 @@ class Level(tool.State): def choose(self, mouse_pos, mouse_click): # 如果暂停 - if self.show_little_menu: + if self.show_game_menu: self.pauseAndCheckLittleMenuOptions(mouse_pos, mouse_click) return @@ -374,7 +374,7 @@ class Level(tool.State): if self.panel.checkStartButtonClick(mouse_pos): self.initPlay(self.panel.getSelectedCards()) elif self.inArea(self.little_menu_rect, *mouse_pos): - self.show_little_menu = True + self.show_game_menu = True c.SOUND_BUTTON_CLICK.play() def initPlay(self, card_list): @@ -432,7 +432,7 @@ class Level(tool.State): self.setupCars() # 地图有铲子才添加铲子 - if self.hasShovel: + if self.has_shovel: # 导入小铲子 frame_rect = [0, 0, 71, 67] self.shovel = tool.get_image_alpha(tool.GFX[c.SHOVEL], *frame_rect, c.BLACK, 1.1) @@ -554,7 +554,7 @@ class Level(tool.State): if self.inArea(self.return_button_rect, *mouse_pos): # 终止暂停,停止显示菜单 self.pause = False - self.show_little_menu = False + self.show_game_menu = False # 继续播放音乐 pg.mixer.music.unpause() # 播放点击音效 @@ -659,7 +659,7 @@ class Level(tool.State): self.fallen_sun = 0 # 如果暂停 - if self.show_little_menu: + if self.show_game_menu: self.pauseAndCheckLittleMenuOptions(mouse_pos, mouse_click) return @@ -746,10 +746,10 @@ class Level(tool.State): if mouse_click[0] and (not clicked_sun) and (not clicked_cards_or_map): if self.inArea(self.little_menu_rect, *mouse_pos): # 暂停 显示菜单 - self.show_little_menu = True + self.show_game_menu = True # 播放点击音效 c.SOUND_BUTTON_CLICK.play() - elif self.hasShovel: + elif self.has_shovel: if self.inArea(self.shovel_box_rect, *mouse_pos): self.drag_shovel = not self.drag_shovel if not self.drag_shovel: @@ -1530,11 +1530,11 @@ class Level(tool.State): self.panel.draw(surface) # 画小菜单 surface.blit(self.little_menu, self.little_menu_rect) - if self.show_little_menu: + if self.show_game_menu: self.showAllContentOfMenu(surface) # 以后可能需要插入一个预备的状态(预览显示僵尸、返回战场) elif self.state == c.PLAY: - if self.hasShovel: + if self.has_shovel: # 画铲子 surface.blit(self.shovel_box, self.shovel_box_rect) surface.blit(self.shovel, self.shovel_rect) @@ -1556,10 +1556,10 @@ class Level(tool.State): if self.drag_plant: self.drawMouseShow(surface) - if self.hasShovel and self.drag_shovel: + if self.has_shovel and self.drag_shovel: self.drawMouseShowPlus(surface) - if self.show_little_menu: + if self.show_game_menu: self.showAllContentOfMenu(surface) if self.map_data[c.SPAWN_ZOMBIES] == c.SPAWN_ZOMBIES_AUTO: From ac3f7f56d70ae21f7cd5631a9d4fc645fbf8787a 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, 1 Aug 2022 14:44:29 +0800 Subject: [PATCH 18/18] =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/component/map.py | 54 ++++++++++++++++++++--------------------- source/state/level.py | 8 +++--- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/source/component/map.py b/source/component/map.py index 89bbdee..cfcdc88 100755 --- a/source/component/map.py +++ b/source/component/map.py @@ -9,27 +9,27 @@ class Map(): if self.background_type in c.POOL_EQUIPPED_BACKGROUNDS: self.width = c.GRID_POOL_X_LEN self.height = c.GRID_POOL_Y_LEN - self.gridHeightSize = c.GRID_POOL_Y_SIZE + self.grid_height_size = c.GRID_POOL_Y_SIZE self.map = [[(self.initMapGrid(c.MAP_GRASS), self.initMapGrid(c.MAP_WATER))[y in {2, 3}] for x in range(self.width)] for y in range(self.height)] elif self.background_type in c.ON_ROOF_BACKGROUNDS: self.width = c.GRID_ROOF_X_LEN self.height = c.GRID_ROOF_Y_LEN - self.gridHeightSize = c.GRID_ROOF_Y_SIZE + self.grid_height_size = c.GRID_ROOF_Y_SIZE self.map = [[self.initMapGrid(c.MAP_TILE) for x in range(self.width)] for y in range(self.height)] elif self.background_type == c.BACKGROUND_SINGLE: self.width = c.GRID_X_LEN self.height = c.GRID_Y_LEN - self.gridHeightSize = c.GRID_Y_SIZE + self.grid_height_size = c.GRID_Y_SIZE self.map = [[(self.initMapGrid(c.MAP_UNAVAILABLE), self.initMapGrid(c.MAP_GRASS))[y == 2] for x in range(self.width)] for y in range(self.height)] elif self.background_type == c.BACKGROUND_TRIPLE: self.width = c.GRID_X_LEN self.height = c.GRID_Y_LEN - self.gridHeightSize = c.GRID_Y_SIZE + self.grid_height_size = c.GRID_Y_SIZE self.map = [[(self.initMapGrid(c.MAP_UNAVAILABLE), self.initMapGrid(c.MAP_GRASS))[y in {1, 2, 3}] for x in range(self.width)] for y in range(self.height)] else: self.width = c.GRID_X_LEN self.height = c.GRID_Y_LEN - self.gridHeightSize = c.GRID_Y_SIZE + self.grid_height_size = c.GRID_Y_SIZE self.map = [[self.initMapGrid(c.MAP_GRASS) for x in range(self.width)] for y in range(self.height)] def isValid(self, map_x, map_y): @@ -47,14 +47,14 @@ class Map(): # 判断位置是否可用 # 暂时没有写紫卡植物的判断方法 # 由于紫卡植物需要移除以前的植物,所以可用另外定义一个函数 - def isAvailable(self, map_x, map_y, plantName): + def isAvailable(self, map_x, map_y, plant_name): # 咖啡豆和墓碑吞噬者的判别最为特殊 - if plantName == c.COFFEEBEAN: - if self.map[map_y][map_x][c.MAP_SLEEP] and (plantName not in self.map[map_y][map_x][c.MAP_PLANT]): + if plant_name == c.COFFEEBEAN: + if self.map[map_y][map_x][c.MAP_SLEEP] and (plant_name not in self.map[map_y][map_x][c.MAP_PLANT]): return True else: return False - if plantName == c.GRAVEBUSTER: + if plant_name == c.GRAVEBUSTER: if (c.GRAVE in self.map[map_y][map_x][c.MAP_PLANT]): return True else: @@ -64,13 +64,13 @@ class Map(): return False if self.map[map_y][map_x][c.MAP_PLOT_TYPE] == c.MAP_GRASS: # 草地 # 首先需要判断植物是否是水生植物,水生植物不能种植在陆地上 - if plantName not in c.WATER_PLANTS: + if plant_name not in c.WATER_PLANTS: if not self.map[map_y][map_x][c.MAP_PLANT]: # 没有植物肯定可以种植 return True elif (all((i in {"花盆(未实现)", c.PUMPKINHEAD}) for i in self.map[map_y][map_x][c.MAP_PLANT]) - and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植 + and (plant_name not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植 return True - elif (plantName == c.PUMPKINHEAD) and (c.PUMPKINHEAD not in self.map[map_y][map_x][c.MAP_PLANT]): # 没有南瓜头就能种南瓜头 + elif (plant_name == c.PUMPKINHEAD) and (c.PUMPKINHEAD not in self.map[map_y][map_x][c.MAP_PLANT]): # 没有南瓜头就能种南瓜头 return True else: return False @@ -78,26 +78,26 @@ class Map(): return False elif self.map[map_y][map_x][c.MAP_PLOT_TYPE] == c.MAP_TILE: # 屋顶 # 首先需要判断植物是否是水生植物,水生植物不能种植在陆地上 - if plantName not in c.WATER_PLANTS: + if plant_name not in c.WATER_PLANTS: if "花盆(未实现)" in self.map[map_y][map_x][c.MAP_PLANT]: if (all((i in {"花盆(未实现)", c.PUMPKINHEAD}) for i in self.map[map_y][map_x][c.MAP_PLANT]) - and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植 - if plantName in {c.SPIKEWEED}: # 不能在花盆上种植的植物 + and (plant_name not in self.map[map_y][map_x][c.MAP_PLANT])): # 例外植物:集合中填花盆和南瓜头,只要这里没有这种植物就能种植 + if plant_name in {c.SPIKEWEED}: # 不能在花盆上种植的植物 return False else: return True - elif (plantName == c.PUMPKINHEAD) and (c.PUMPKINHEAD not in self.map[map_y][map_x][c.MAP_PLANT]): # 有花盆且没有南瓜头就能种南瓜头 + elif (plant_name == c.PUMPKINHEAD) and (c.PUMPKINHEAD not in self.map[map_y][map_x][c.MAP_PLANT]): # 有花盆且没有南瓜头就能种南瓜头 return True else: return False - elif plantName == "花盆(未实现)": # 这一格本来没有花盆而且新来的植物是花盆,可以种 + elif plant_name == "花盆(未实现)": # 这一格本来没有花盆而且新来的植物是花盆,可以种 return True else: return False else: return False elif self.map[map_y][map_x][c.MAP_PLOT_TYPE] == c.MAP_WATER: # 水里 - if plantName in c.WATER_PLANTS: # 是水生植物 + if plant_name in c.WATER_PLANTS: # 是水生植物 if not self.map[map_y][map_x][c.MAP_PLANT]: # 只有无植物时才能在水里种植水生植物 return True else: @@ -105,12 +105,12 @@ class Map(): else: # 非水生植物,依赖睡莲 if c.LILYPAD in self.map[map_y][map_x][c.MAP_PLANT]: if (all((i in {c.LILYPAD, c.PUMPKINHEAD}) for i in self.map[map_y][map_x][c.MAP_PLANT]) - and (plantName not in self.map[map_y][map_x][c.MAP_PLANT])): - if plantName in {c.SPIKEWEED, c.POTATOMINE, "花盆(未实现)"}: # 不能在睡莲上种植的植物 + and (plant_name not in self.map[map_y][map_x][c.MAP_PLANT])): + if plant_name in {c.SPIKEWEED, c.POTATOMINE, "花盆(未实现)"}: # 不能在睡莲上种植的植物 return False else: return True - elif (plantName == c.PUMPKINHEAD) and (c.PUMPKINHEAD not in self.map[map_y][map_x][c.MAP_PLANT]): # 在睡莲上且没有南瓜头就能种南瓜头 + elif (plant_name == c.PUMPKINHEAD) and (c.PUMPKINHEAD not in self.map[map_y][map_x][c.MAP_PLANT]): # 在睡莲上且没有南瓜头就能种南瓜头 return True else: return False @@ -152,22 +152,22 @@ class Map(): def setMapGridType(self, map_x, map_y, plot_type): self.map[map_y][map_x][c.MAP_PLOT_TYPE] = plot_type - def addMapPlant(self, map_x, map_y, plantName, sleep=False): - self.map[map_y][map_x][c.MAP_PLANT].add(plantName) + def addMapPlant(self, map_x, map_y, plant_name, sleep=False): + self.map[map_y][map_x][c.MAP_PLANT].add(plant_name) self.map[map_y][map_x][c.MAP_SLEEP] = sleep - def removeMapPlant(self, map_x, map_y, plantName): - self.map[map_y][map_x][c.MAP_PLANT].discard(plantName) + def removeMapPlant(self, map_x, map_y, plant_name): + self.map[map_y][map_x][c.MAP_PLANT].discard(plant_name) def getRandomMapIndex(self): map_x = random.randint(0, self.width-1) map_y = random.randint(0, self.height-1) return (map_x, map_y) - def checkPlantToSeed(self, x, y, plantName): + def checkPlantToSeed(self, x, y, plant_name): pos = None map_x, map_y = self.getMapIndex(x, y) - if self.isValid(map_x, map_y) and self.isAvailable(map_x, map_y, plantName): + if self.isValid(map_x, map_y) and self.isAvailable(map_x, map_y, plant_name): pos = self.getMapGridPos(map_x, map_y) return pos diff --git a/source/state/level.py b/source/state/level.py index 0863e35..d383241 100644 --- a/source/state/level.py +++ b/source/state/level.py @@ -841,9 +841,9 @@ class Level(tool.State): # 能否种植物的判断: # 先判断位置是否合法 isValid(map_x, map_y) # 再判断位置是否可用 isMovable(map_x, map_y) - def canSeedPlant(self, plantName): + def canSeedPlant(self, plant_name): x, y = pg.mouse.get_pos() - return self.map.checkPlantToSeed(x, y, plantName) + return self.map.checkPlantToSeed(x, y, plant_name) # 种植物 def addPlant(self): @@ -913,7 +913,7 @@ class Level(tool.State): elif self.plant_name == c.TANGLEKLEP: new_plant = plant.TangleKlep(x, y) elif self.plant_name == c.DOOMSHROOM: - if self.map.gridHeightSize == c.GRID_Y_SIZE: + if self.map.grid_height_size == c.GRID_Y_SIZE: new_plant = plant.DoomShroom(x, y, self.map.map[map_y][map_x][c.MAP_PLANT], explode_y_range=2) else: new_plant = plant.DoomShroom(x, y, self.map.map[map_y][map_x][c.MAP_PLANT], explode_y_range=3) @@ -1150,7 +1150,7 @@ class Level(tool.State): if self.map.map[i][0][c.MAP_PLOT_TYPE] != self.map.map[i + _move][0][c.MAP_PLOT_TYPE]: _move = -(_move) zombie.target_map_y = i + _move - zombie.target_y_change = _move * self.map.gridHeightSize + zombie.target_y_change = _move * self.map.grid_height_size else: zombie.setAttack(target_plant)