From 291addb895469da3f5d9f5e003331de712900f9e Mon Sep 17 00:00:00 2001 From: wcb_dell <497649129@qq.com> Date: Wed, 25 Nov 2020 10:20:02 +0800 Subject: [PATCH] add exit button --- main.py | 16 +++++++++++----- resources/graphics/Screen/exit.png | Bin 0 -> 23304 bytes source/constants.py | 6 ++++++ source/main.py | 16 ---------------- source/state/mainmenu.py | 25 ++++++++++++++++++++++--- source/tool.py | 6 +++++- 6 files changed, 44 insertions(+), 25 deletions(-) create mode 100644 resources/graphics/Screen/exit.png delete mode 100644 source/main.py diff --git a/main.py b/main.py index a75e9ba..f4fb648 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,14 @@ import pygame as pg -from source.main import main +from source import tool +from source import constants as c +from source.state import mainmenu, screen, level if __name__=='__main__': - # do everything in this main function - main() - # don't forget quit for release all resource - pg.quit() \ No newline at end of file + # 控制状态机运行 + game = tool.Control() + state_dict = {c.MAIN_MENU: mainmenu.Menu(), + c.GAME_VICTORY: screen.GameVictoryScreen(), + c.GAME_LOSE: screen.GameLoseScreen(), + c.LEVEL: level.Level()} + game.setup_states(state_dict, c.MAIN_MENU) + game.run() \ No newline at end of file diff --git a/resources/graphics/Screen/exit.png b/resources/graphics/Screen/exit.png new file mode 100644 index 0000000000000000000000000000000000000000..2a9e21857eac84506c1cb7048aec30f431bb802a GIT binary patch literal 23304 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

MgneIPGAQ{s)@M>~b}e73cBG+M2kN2XR# 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 HDdGPB7s;M# literal 0 HcmV?d00001 diff --git a/source/constants.py b/source/constants.py index 09bfc9c..76fccba 100644 --- a/source/constants.py +++ b/source/constants.py @@ -24,6 +24,12 @@ GREEN = ( 0, 255, 0) SIZE_MULTIPLIER = 1.3 +# 退出游戏按钮 +EXIT = 'exit' +# 当想要一个特殊值时用 +NULL = 'null' + + #GAME INFO DICTIONARY KEYS CURRENT_TIME = 'current time' LEVEL_NUM = 'level num' diff --git a/source/main.py b/source/main.py deleted file mode 100644 index b1badeb..0000000 --- a/source/main.py +++ /dev/null @@ -1,16 +0,0 @@ -__author__ = 'wcb' - -from . import tool -from . import constants as c -from .state import mainmenu, screen, level - -# create a standard game -def main(): - # 控制状态机运行 - game = tool.Control() - state_dict = {c.MAIN_MENU: mainmenu.Menu(), - c.GAME_VICTORY: screen.GameVictoryScreen(), - c.GAME_LOSE: screen.GameLoseScreen(), - c.LEVEL: level.Level()} - game.setup_states(state_dict, c.MAIN_MENU) - game.run() \ No newline at end of file diff --git a/source/state/mainmenu.py b/source/state/mainmenu.py index 168af18..4f17dc8 100644 --- a/source/state/mainmenu.py +++ b/source/state/mainmenu.py @@ -1,8 +1,10 @@ import pygame as pg from .. import tool from .. import constants as c +from . import level class Menu(tool.State): + def __init__(self): tool.State.__init__(self) @@ -10,7 +12,6 @@ class Menu(tool.State): self.next = c.LEVEL self.persist = persist self.game_info = persist - self.setupBackground() self.setupOption() @@ -38,6 +39,13 @@ class Menu(tool.State): self.option_rect.x = 435 self.option_rect.y = 75 + # 退出按钮 + frame_rect = [0, 0, 500, 500] + self.option_exit = tool.get_image_menu(tool.GFX[c.EXIT], *frame_rect, c.BLACK, 1.1) + self.exit_rect = self.option_exit.get_rect() + self.exit_rect.x = 690 + self.exit_rect.y = 400 + self.option_start = 0 self.option_timer = 0 self.option_clicked = False @@ -49,7 +57,15 @@ class Menu(tool.State): self.option_clicked = True self.option_timer = self.option_start = self.current_time return False - + + # 点击到按钮,修改转态的done属性 + def checkExitClick(self, mouse_pos): + x, y = mouse_pos + if(x >= self.exit_rect.x and x <= self.exit_rect.right and + y >= self.exit_rect.y and y <= self.exit_rect.bottom): + self.done = True + self.next = c.EXIT + def update(self, surface, current_time, mouse_pos, mouse_click): self.current_time = self.game_info[c.CURRENT_TIME] = current_time @@ -57,6 +73,7 @@ class Menu(tool.State): if not self.option_clicked: if mouse_pos: self.checkOptionClick(mouse_pos) + self.checkExitClick(mouse_pos) else: # 点到后播放动画 if(self.current_time - self.option_timer) > 200: @@ -67,6 +84,8 @@ class Menu(tool.State): self.option_image = self.option_frames[self.option_frame_index] if(self.current_time - self.option_start) > 1300: self.done = True + surface.blit(self.bg_image, self.bg_rect) - surface.blit(self.option_image, self.option_rect) \ No newline at end of file + surface.blit(self.option_image, self.option_rect) + surface.blit(self.option_exit, self.exit_rect) \ No newline at end of file diff --git a/source/tool.py b/source/tool.py index ed5aa53..b34ec32 100644 --- a/source/tool.py +++ b/source/tool.py @@ -64,6 +64,9 @@ class Control(): # 状态转移 def flip_state(self): + if self.state.next == c.EXIT: + pg.quit() + os._exit(0) previous, self.state_name = self.state_name, self.state.next persist = self.state.cleanup() self.state = self.state_dict[self.state_name] @@ -98,7 +101,8 @@ def get_image(sheet, x, y, width, height, colorkey=c.BLACK, scale=1): rect = image.get_rect() image.blit(sheet, (0, 0), (x, y, width, height)) - image.set_colorkey(colorkey) + if colorkey != c.NULL: + image.set_colorkey(colorkey) image = pg.transform.scale(image, (int(rect.width*scale), int(rect.height*scale)))