前言
本次设计为了使飞机大战游戏具有更加丰富的功能,基于面向对象和面向过程的方法,使用Python编程语言提供资源结构,以Pygame模块对游戏进行研发,提出了飞机大战游戏开发方案。通过各种优化调整,实现了飞机的飞行移动、击落,计分等功能,实现了飞机大战的开发,增加游戏体验。
代码实现
引入模块
import random
import sys
import pygame
1.游戏框架
import random
import sys
import pygame
class Sprite(pygame.sprite.Sprite):
"""
精灵父类
"""
def __init__(self, name):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
class EnemySprite(Sprite):
def __init__(self, name):
super().__init__(name)
def update(self):
pass
class EnemyManage:
def __init__(self):
pass
def generate(self):
pass
def clear(self):
pass
def update(self):
pass
class PlayerSprite(Sprite):
""""""
# 玩家精灵类
def __init__(self, name):
super().__init__(name)
def update(self):
pass
class PlayerManage:
"""
玩家管理类
"""
def __init__(self):
pass
def born(self):
# 出生
pass
def die(self):
# 死亡
pass
def update(self):
# 更新
pass
class UiSprite(Sprite):
"""
ui管理精灵类
"""
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
pass
class UiManage:
"""
ui管理类
"""
def __init__(self):
pass
def update(self):
pass
class BGSprite(Sprite):
"""
背景精灵类
"""
def __init__(self, name, top_left):
super().__init__(name)
self.rect.topleft = top_left
def update(self):
pass
class BGManage:
"""
背景管理类
"""
def __init__(self):
pass
def update(self):
pass
class GameManage:
"""
游戏管理类
"""
def __init__(self):
pass
def check_event(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
def run(self):
while True:
self.check_event()
pygame.display.flip()
gm = GameManage()
gm.run()
基本套路,一个管理类一个精灵类
2.创建一个游戏管理类
class GameManage:
def __init__(self):
pygame.init() # 初始化
self.screen = pygame.display.set_mode((480, 700)) # 添加一个屏幕
pygame.display.set_caption("飞机大战") # 修改标题
def check_event(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
def run(self):
# 循环屏幕一直执行
while True:
self.check_event()
pygame.display.flip()
3.创建一个背景类实现背景的滚动
class BGSprite(Sprite):
def __init__(self, name, top_left):
super().__init__(name)
self.rect.topleft = top_left
def update(self):
self.rect.top += 5 # 速度
if self.rect.top == 700:
self.rect.bottom = 0
class BGManage:
def __init__(self, gm):
self.gm = gm
self.bg_group = pygame.sprite.Group()
BGSprite("images/background.png", (0, 0)).add(self.bg_group)
BGSprite("images/background.png", (0, -700)).add(self.bg_group)
def update(self):
self.bg_group.update()
self.bg_group.draw(self.gm.screen)
4.创建一个UI类来管理游戏状态
class UiSprite(Sprite):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
pass
class UiManage:
def __init__(self, gm):
self.gm = gm
# 计分字体
self.fond = pygame.font.Font("font/font.ttf", 24)
self.fond_surface = self.fond.render(f"score{0}", True, (0, 127, 0))
# 开始按钮
self.begin_group = pygame.sprite.Group()
self.begin_btn = UiSprite("images/begin_btn.png", (240, 250))
self.begin_btn.add(self.begin_group)
# 重新开始按钮
self.again_group = pygame.sprite.Group()
self.again = UiSprite("images/again.png", (240, 250))
self.again.add(self.again_group)
# 结束按钮
self.over_group = pygame.sprite.Group()
self.game_over = UiSprite("images/gameover.png", (240, 450))
self.game_over.add(self.over_group)
def update(self):
# 游戏开始
if self.gm.state == "ready":
self.begin_group.draw(self.gm.screen)
self.over_group.draw(self.gm.screen)
# 点击事件
if Util.check_click(self.game_over):
Audio.check_sound("sound/click.mp3")
pygame.quit()
sys.exit()
if Util.check_click(self.begin_btn):
self.gm.state = "gaming" # 游戏状态
elif self.gm.state == "gaming":
self.fond_surface = self.fond.render(f"score{self.gm.player_manage.score}", True, (0, 127, 0))
self.gm.screen.blit(self.fond_surface, (380, 20))
elif self.gm.state == "end":
self.again_group.draw(self.gm.screen)
self.over_group.draw(self.gm.screen)
if Util.check_click(self.game_over):
pygame.quit()
sys.exit()
if Util.check_click(self.again):
self.gm.state = "gaming"
1需要一个点击事件类,实现进入游戏退出游戏
class Util:
"""
工具类(点击事件)
"""
@staticmethod
def check_click(sprite):
if pygame.mouse.get_pressed()[0]:
if sprite.rect.collidepoint(pygame.mouse.get_pos()):
return True
return False
5.创建一个玩家类实现玩家移动
class PlayerSprite(Sprite):
def __init__(self, name, center, gm):
super().__init__(name)
self.gm = gm
self.rect.center = center
def update(self):
# 实现玩家移动
pressed = pygame.key.get_pressed()
if pressed[pygame.K_LEFT] and self.rect.centerx >= 50:
self.rect.centerx -= 15
if pressed[pygame.K_RIGHT] and self.rect.centerx < 420:
self.rect.centerx += 15
if pressed[pygame.K_UP] and self.rect.centery > 50:
self.rect.centery -= 15
if pressed[pygame.K_DOWN] and self.rect.centery < 620:
self.rect.centery += 15
class PlayerManage:
def __init__(self, gm):
self.gm = gm
# 创建精灵组
self.player_group = pygame.sprite.Group()
def born(self):
# 出生
self.player = PlayerSprite("images/me1.png", (240, 600), 10)
self.player.add(self.player_group)
def die(self):
# 死亡清除精灵组
self.player_group.empty()
def update(self):
# 更新玩家精灵组
self.player_group.update()
self.player_group.draw(self.gm.screen)
1.创建子弹精灵来实现玩家攻击
class BulletSprite(Sprite):
def __init__(self, name, center, speed):
super().__init__(name)
self.rect.center = center
self.speed = speed
def update(self):
self.rect.centery -= self.speed
if self.rect.centery <= 0 or self.rect.centery > 600:
self.kill()
加入玩家精灵组实现玩家发射子弹
class PlayerSprite(Sprite):
def __init__(self, name, center, hp, gm):
super().__init__(name)
self.gm = gm
self.rect.center = center
self.super_bullet = 0
self.time_count = 2
self.bullet_group = pygame.sprite.Group()
def shoot(self):
BulletSprite("images/bullet1.png", (self.rect.centerx, self.rect.centery - 50), 10).add(self.bullet_group)
def shoot2(self):
for i in range(1, 6):
BulletSprite("images/img.png", (self.rect.centerx - 60 + i * 20, self.rect.centery - 50), 10).add(
self.bullet_group)
def update(self):
self.time_count -= 0.3
if self.time_count < 0:
self.time_count = 2
if self.super_bullet > 0:
self.super_bullet -= 1
self.shoot2()
else:
self.shoot()
6.创建敌人类实现敌人攻击,移动
class EnemySprite(Sprite):
def __init__(self, name, speed, hp, gm):
super().__init__(name)
self.gm = gm
self.hp = hp
self.max_hp = hp
self.rect.left = random.randint(0, 480 - self.rect.width) # 随机位置出现
self.rect.bottom = 0 # 速度
self.speed = speed
self.time_count = 2
self.bullet_group = pygame.sprite.Group()
def shoot(self):
# 子弹
BulletSprite("images/bullet2.png", (self.rect.centerx, self.rect.centery + 20), -16).add(self.bullet_group)
def update(self):
self.rect.centery += self.speed
self.time_count -= 0.1
if self.time_count <= 0:
self.time_count = 2
self.shoot()
self.bullet_group.update()
self.bullet_group.draw(self.gm.screen)
class EnemyManage:
def __init__(self, gm):
self.gm = gm
self.enemy_group = pygame.sprite.Group()
self.time_count = 2
self.die_group = pygame.sprite.Group()
def generate(self):
# 随机生成敌人
value = random.random()
if value > 0.9:
EnemySprite("images/enemy3_n2.png", 4, 5, self.gm).add(self.enemy_group)
elif value > 0.6:
EnemySprite("images/enemy2.png", 6, 3, self.gm).add(self.enemy_group)
else:
EnemySprite("images/enemy1.png", 8, 1, self.gm).add(self.enemy_group)
def clear(self):
self.enemy_group.empty()
def update(self):
# 生成敌人
if self.gm.state == "gaming":
self.time_count -= 0.1
if self.time_count <= 0:
self.time_count = 2
self.generate()
self.enemy_group.update()
self.enemy_group.draw(self.gm.screen)
7.创建道具类,给玩家提供补给
class PropSprite(Sprite):
def __init__(self, name, speed, prop):
super().__init__(name)
self.prop = prop
self.speed = speed
self.rect.left = random.randint(0, 400)
self.rect.bottom = 0
def update(self):
self.rect.top += self.speed
class PropManage:
def __init__(self, gm):
self.gm = gm
self.time_count = 8
self.bomb_count = 0
self.prop_group = pygame.sprite.Group()
def generate(self):
value = random.random()
if value > 0.8:
PropSprite("images/life.png", 4, 1).add(self.prop_group)
elif value > 0.6:
PropSprite("images/bomb_supply.png", 8, 2).add(self.prop_group)
else:
PropSprite("images/bullet_supply.png", 9, 3).add(self.prop_group)
def clear(self):
self.prop_group.empty()
def update(self):
if self.gm.state == "gaming":
self.time_count -= 0.1
if self.time_count <= 0:
self.time_count = 8
self.generate()
self.prop_group.update()
self.prop_group.draw(self.gm.screen)
8.创建一个动画混合类和一个死亡动画混合类,实现玩家动画 和敌人死亡画面
class AnimationMixin:
normal_images = []
def __init__(self):
self.images2 = [pygame.image.load(name) for name in self.normal_images]
self.current = 0
def normal_update(self):
self.current += 1
if self.current == len(self.images2) * 5:
self.current = 0
self.image = self.images2[self.current // 5]
class DieAnimationMixin:
die_images = []
def __init__(self):
self.images1 = [pygame.image.load(name) for name in self.die_images]
self.current = 0
if not self.die_images:
raise Exception("die_images 为空")
def die_update(self):
self.current += 1
if self.current < len(self.images1) * 3:
self.image = self.images1[self.current // 3]
else:
self.kill()
总体代码
import random
import sys
import pygame
class Util:
@staticmethod
def check_click(sprite):
if pygame.mouse.get_pressed()[0]:
if sprite.rect.collidepoint(pygame.mouse.get_pos()):
return True
return False
class Audio:
@staticmethod
def check_sound(sprite):
sound = pygame.mixer.Sound(sprite)
sound.play()
@staticmethod
def check_mics():
pygame.mixer.music.load("sound/game_music.ogg")
pygame.mixer.music.play()
class Sprite(pygame.sprite.Sprite):
def __init__(self, name):
super().__init__()
self.image = pygame.image.load(name)
self.rect = self.image.get_rect()
class AnimationMixin:
normal_images = []
def __init__(self):
self.images2 = [pygame.image.load(name) for name in self.normal_images]
self.current = 0
def normal_update(self):
self.current += 1
if self.current == len(self.images2) * 5:
self.current = 0
self.image = self.images2[self.current // 5]
class DieAnimationMixin:
die_images = []
def __init__(self):
self.images1 = [pygame.image.load(name) for name in self.die_images]
self.current = 0
if not self.die_images:
raise Exception("die_images 为空")
def die_update(self):
self.current += 1
if self.current < len(self.images1) * 3:
self.image = self.images1[self.current // 3]
else:
self.kill()
class PropSprite(Sprite):
def __init__(self, name, speed, prop):
super().__init__(name)
self.prop = prop
self.speed = speed
self.rect.left = random.randint(0, 400)
self.rect.bottom = 0
def update(self):
self.rect.top += self.speed
class PropManage:
def __init__(self, gm):
self.gm = gm
self.time_count = 8
self.bomb_count = 0
self.prop_group = pygame.sprite.Group()
def generate(self):
value = random.random()
if value > 0.8:
PropSprite("images/life.png", 4, 1).add(self.prop_group)
elif value > 0.6:
PropSprite("images/bomb_supply.png", 8, 2).add(self.prop_group)
else:
PropSprite("images/bullet_supply.png", 9, 3).add(self.prop_group)
def clear(self):
self.prop_group.empty()
def update(self):
if self.gm.state == "gaming":
self.time_count -= 0.1
if self.time_count <= 0:
self.time_count = 8
self.generate()
self.prop_group.update()
self.prop_group.draw(self.gm.screen)
class EnemySprite(Sprite, DieAnimationMixin):
die_images = [f"images/enemy1_down{i}.png" for i in range(1, 5)]
def __init__(self, name, speed, hp, gm):
super().__init__(name)
DieAnimationMixin.__init__(self)
self.gm = gm
self.hp = hp
self.max_hp = hp
self.rect.left = random.randint(0, 480 - self.rect.width)
self.rect.bottom = 0
self.speed = speed
self.time_count = 2
self.bullet_group = pygame.sprite.Group()
self.enemy_alive = True
def shoot(self):
BulletSprite("images/bullet2.png", (self.rect.centerx, self.rect.centery + 20), -16).add(self.bullet_group)
def draw_hp(self):
pygame.draw.rect(self.gm.screen, (127, 127, 127), (self.rect.centerx - 25, self.rect.top, 50, 8))
pygame.draw.rect(self.gm.screen, (0, 127, 0),
(self.rect.centerx - 25, self.rect.top, self.hp / self.max_hp * 50, 8))
def is_alive(self):
if self.enemy_alive:
pass
else:
self.die_update()
Audio.check_sound("sound/enemy1_down.wav")
def update(self):
self.is_alive()
self.draw_hp()
self.rect.centery += self.speed
self.time_count -= 0.1
if self.time_count <= 0:
self.time_count = 2
self.shoot()
self.bullet_group.update()
self.bullet_group.draw(self.gm.screen)
class MidSizeEnemySprite(EnemySprite):
die_images = [f"images/enemy2_down{i}.png" for i in range(1, 5)]
class BossEnemySpriter(EnemySprite, AnimationMixin, DieAnimationMixin):
normal_images = ["images/enemy3_n1.png", "images/enemy3_n2.png"]
die_images = [f"images/enemy3_down{i}.png" for i in range(1, 7)]
def __init__(self, name, speed, hp, gm):
super().__init__(name, speed, hp, gm)
AnimationMixin.__init__(self)
DieAnimationMixin.__init__(self)
def is_die_alive(self):
if self.enemy_alive:
self.normal_update()
else:
self.die_update()
Audio.check_sound("sound/enemy2_down.wav")
def update(self):
EnemySprite.update(self)
self.is_die_alive()
class EnemyManage:
def __init__(self, gm):
self.gm = gm
self.enemy_group = pygame.sprite.Group()
self.time_count = 2
self.die_group = pygame.sprite.Group()
def generate(self):
value = random.random()
if value > 0.9:
BossEnemySpriter("images/enemy3_n2.png", 4, 5, self.gm).add(self.enemy_group)
elif value > 0.6:
MidSizeEnemySprite("images/enemy2.png", 6, 3, self.gm).add(self.enemy_group)
else:
EnemySprite("images/enemy1.png", 8, 1, self.gm).add(self.enemy_group)
def clear(self):
self.enemy_group.empty()
def update(self):
if self.gm.state == "gaming":
self.time_count -= 0.1
if self.time_count <= 0:
self.time_count = 2
self.generate()
self.enemy_group.update()
self.enemy_group.draw(self.gm.screen)
class BulletSprite(Sprite):
def __init__(self, name, center, speed):
super().__init__(name)
self.rect.center = center
self.speed = speed
def update(self):
self.rect.centery -= self.speed
if self.rect.centery <= 0 or self.rect.centery > 600:
self.kill()
class PlayerSprite(Sprite, AnimationMixin):
normal_images = ["images/me1.png", "images/me2.png"]
def __init__(self, name, center, hp, gm):
super().__init__(name)
AnimationMixin.__init__(self)
self.gm = gm
self.hp = hp
self.max_hp = 10
self.rect.center = center
self.super_bullet = 0
self.time_count = 2
self.bullet_group = pygame.sprite.Group()
def shoot(self):
BulletSprite("images/bullet1.png", (self.rect.centerx, self.rect.centery - 50), 10).add(self.bullet_group)
Audio.check_sound("sound/bullet.wav")
def shoot2(self):
for i in range(1, 6):
BulletSprite("images/img.png", (self.rect.centerx - 60 + i * 20, self.rect.centery - 50), 10).add(
self.bullet_group)
Audio.check_sound("sound/bullet.wav")
def draw_hp(self):
pygame.draw.rect(self.gm.screen, (127, 127, 127), (self.rect.centerx - 25, self.rect.bottom, 50, 8))
pygame.draw.rect(self.gm.screen, (0, 127, 0),
(self.rect.centerx - 25, self.rect.bottom, self.hp / self.max_hp * 50, 8))
def update(self):
super().update()
self.normal_update()
self.draw_hp()
self.time_count -= 0.3
if self.time_count < 0:
self.time_count = 2
if self.super_bullet > 0:
self.super_bullet -= 1
self.shoot2()
else:
self.shoot()
pressed = pygame.key.get_pressed()
if pressed[pygame.K_LEFT] and self.rect.centerx >= 50:
self.rect.centerx -= 15
if pressed[pygame.K_RIGHT] and self.rect.centerx < 420:
self.rect.centerx += 15
if pressed[pygame.K_UP] and self.rect.centery > 50:
self.rect.centery -= 15
if pressed[pygame.K_DOWN] and self.rect.centery < 620:
self.rect.centery += 15
self.bullet_group.update()
self.bullet_group.draw(self.gm.screen)
class PlayerManage:
def __init__(self, gm):
self.gm = gm
self.score = 0
self.player_group = pygame.sprite.Group()
def born(self):
self.score = 0
self.player = PlayerSprite("images/me1.png", (240, 600), 10, self.gm, )
self.player.add(self.player_group)
def die(self):
self.player_group.empty()
def update(self):
self.player_group.update()
self.player_group.draw(self.gm.screen)
class UiSprite(Sprite):
def __init__(self, name, center):
super().__init__(name)
self.rect.center = center
def update(self):
pass
class UiManage:
def __init__(self, gm):
self.gm = gm
self.fond = pygame.font.Font("font/font.ttf", 24)
self.fond_surface = self.fond.render(f"score{0}", True, (0, 127, 0))
# 开始按钮
self.begin_group = pygame.sprite.Group()
self.begin_btn = UiSprite("images/begin_btn.png", (240, 250))
self.begin_btn.add(self.begin_group)
# 重新开始按钮
self.again_group = pygame.sprite.Group()
self.again = UiSprite("images/again.png", (240, 250))
self.again.add(self.again_group)
# 借宿按钮
self.over_group = pygame.sprite.Group()
self.game_over = UiSprite("images/gameover.png", (240, 450))
self.game_over.add(self.over_group)
Audio.check_mics()
self.bomb_surface = self.fond.render(f":{0}", True, (0, 127, 0))
self.bomb_image = pygame.image.load("images/bomb.png")
def update(self):
# 游戏开始
if self.gm.state == "ready":
self.begin_group.draw(self.gm.screen)
self.over_group.draw(self.gm.screen)
# 点击事件
if Util.check_click(self.game_over):
Audio.check_sound("sound/click.mp3")
pygame.quit()
sys.exit()
if Util.check_click(self.begin_btn):
self.gm.state = "gaming" # 游戏状态
self.gm.player_manage.born()
self.gm.enemy_manage.generate()
self.gm.prop_manage.generate()
Audio.check_sound("sound/click.mp3")
elif self.gm.state == "gaming":
self.fond_surface = self.fond.render(f"score{self.gm.player_manage.score}", True, (0, 127, 0))
self.gm.screen.blit(self.fond_surface, (380, 20))
self.bomb_surface = self.fond.render(f":{self.gm.prop_manage.bomb_count}", True, (0, 127, 0))
self.gm.screen.blit(self.bomb_image,(10, 620))
self.gm.screen.blit(self.bomb_surface, (80, 635))
elif self.gm.state == "end":
self.again_group.draw(self.gm.screen)
self.gm.player_manage.die()
self.gm.enemy_manage.clear()
self.gm.prop_manage.clear()
self.over_group.draw(self.gm.screen)
if Util.check_click(self.game_over):
pygame.quit()
sys.exit()
if Util.check_click(self.again):
self.gm.state = "gaming"
self.gm.player_manage.born()
self.gm.enemy_manage.generate()
self.gm.prop_manage.generate()
Audio.check_sound("sound/click.mp3")
class BGSprite(Sprite):
def __init__(self, name, top_left):
super().__init__(name)
self.rect.topleft = top_left
def update(self):
self.rect.top += 5
if self.rect.top == 700:
self.rect.bottom = 0
class BGManage:
def __init__(self, gm):
self.gm = gm
self.bg_group = pygame.sprite.Group()
BGSprite("images/background.png", (0, 0)).add(self.bg_group)
BGSprite("images/background.png", (0, -700)).add(self.bg_group)
def update(self):
self.bg_group.update()
self.bg_group.draw(self.gm.screen)
class GameManage:
def __init__(self):
pygame.init()
self.state = "ready"
self.screen = pygame.display.set_mode((480, 700))
pygame.display.set_caption("飞机大战")
self.clock = pygame.time.Clock()
self.bg_manage = BGManage(self)
self.ui_manage = UiManage(self)
self.player_manage = PlayerManage(self)
self.enemy_manage = EnemyManage(self)
self.prop_manage = PropManage(self)
def check_event(self):
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYUP:
if event.key == pygame.K_SPACE:
if self.prop_manage.bomb_count >= 1:
self.prop_manage.bomb_count -= 1
for enemys in self.enemy_manage.enemy_group.sprites():
enemys.kill()
Audio.check_sound("sound/use_bomb.wav")
def collide_event(self):
for player in self.player_manage.player_group.sprites():
player_bullet_enemy_collide = pygame.sprite.groupcollide(player.bullet_group,
self.enemy_manage.enemy_group, True, False)
if player_bullet_enemy_collide:
for enemys in player_bullet_enemy_collide.values():
for enemy in enemys:
if enemy.max_hp <= 1:
enemy.hp -= 1
if enemy.hp <= 0:
if enemy.enemy_alive:
self.player_manage.score += 1
enemy.enemy_alive = False
elif enemy.max_hp <= 3:
enemy.hp -= 1
if enemy.hp <= 0:
if enemy.enemy_alive:
self.player_manage.score += 2
enemy.enemy_alive = False
elif enemy.max_hp <= 5:
enemy.hp -= 1
if enemy.hp <= 0:
if enemy.enemy_alive:
self.player_manage.score += 3
enemy.enemy_alive = False
print("杀死一个")
player_prop_collide = pygame.sprite.groupcollide(self.player_manage.player_group, self.prop_manage.prop_group,
False, True)
if player_prop_collide:
for props in player_prop_collide.values():
for prop in props:
if prop.prop == 1:
Audio.check_sound("sound/upgrade.wav")
self.player_manage.player.hp += 1
if prop.prop == 3:
Audio.check_sound("sound/get_bullet.wav")
self.player_manage.player.super_bullet = 20
if prop.prop == 2:
Audio.check_sound("sound/get_bomb.wav")
self.prop_manage.bomb_count += 1
for enemys in self.enemy_manage.enemy_group.sprites():
player_enemy_bullet_collide = pygame.sprite.groupcollide(self.player_manage.player_group,
enemys.bullet_group, False, True)
if player_enemy_bullet_collide:
self.player_manage.player.hp -= 1
if self.player_manage.player.hp <= 0:
# self.state = "end"
self.player_manage.player.hp = self.player_manage.player.max_hp
Audio.check_sound("sound/me_down.wav")
if pygame.sprite.groupcollide(self.player_manage.player_group, self.enemy_manage.enemy_group, False, True):
self.player_manage.player.hp -= 1
if self.player_manage.player.hp <= 0:
# self.state = "end"
self.player_manage.player.hp = self.player_manage.player.max_hp
Audio.check_sound("sound/me_down.wav")
# self.state = "end"
def run(self):
while True:
self.clock.tick(24)
self.check_event()
self.collide_event()
self.bg_manage.update()
self.ui_manage.update()
self.player_manage.update()
self.enemy_manage.update()
self.player_manage.update()
self.prop_manage.update()
pygame.display.flip()
gm = GameManage()
gm.run()