pygame小游戏飞机大战_9继承精灵敌人优化
敌人优化后:# 引入敌方飞机的类
class Enemy(pygame.sprite.Sprite):
def __init__(self, screen):
# 调用继承精灵初始化方法
pygame.sprite.Sprite.__init__(self)
# 引入图片创建敌人
self.enemy = pygame.image.load("./images/enemy1.png")
self.image = self.enemy
# 设置速度变量
self.speed = 10# 降低速度使游戏可玩
# 根据图片进行获取矩形对象
self.rect = self.image.get_rect()
self.rect.topleft =
self.x = 0
self.y = 0
# 使screen变为飞机类的一个属性
self.screen = screen
# 定义装子弹的精灵组
self.bullets = pygame.sprite.Group()
def display(self):
self.screen.blit(self.enemy, (self.rect.left, self.rect.top))
# 改为使用精灵组的方法绘制子弹
self.bullets.update()# 更新子弹位置
self.bullets.draw(self.screen)# 绘制子弹
# 定义移动飞机的方法
def auto_move(self):
# 将direction改为全局变量
global direction
# 判断方向进行移动
if direction == "right":
self.rect.right += self.speed
if direction == "left":
self.rect.right -= self.speed
# 定义碰壁时调整移动方向
if self.rect.right >= 480 - 51:
direction = "left"
if self.rect.right <= 0:
direction = "right"
def update(self):
self.auto_fire()
self.auto_move()
self.display()
# 定义自动开火的方法
def auto_fire(self):
# 使用随机数函数进行随机抽取一个1到10的一个随机数
random_number = random.randint(1, 10)
# 当随机数为8时创建子弹
if random_number == 8:
# 创建单个子弹
bullet = EnemyBullet(self.screen,self.rect.left, self.rect.top)
# 将子弹放入列表中
self.bullets.add(bullet)完整代码:
# 引入randomimport random# 引入pygameimport pygame# 引入time模块import time# 引入pygame中的所有方法from pygame.constants import K_UP, K_RIGHT, K_DOWN, K_LEFT, K_w, K_a, K_s, K_d, K_SPACE# 定义初始为向右direction = "right"# 引入敌方飞机的类
class Enemy(pygame.sprite.Sprite):
def __init__(self, screen):
# 调用继承精灵初始化方法
pygame.sprite.Sprite.__init__(self)
# 引入图片创建敌人
self.enemy = pygame.image.load("./images/enemy1.png")
self.image = self.enemy
# 设置速度变量
self.speed = 10# 降低速度使游戏可玩
# 根据图片进行获取矩形对象
self.rect = self.image.get_rect()
self.rect.topleft =
self.x = 0
self.y = 0
# 使screen变为飞机类的一个属性
self.screen = screen
# 定义装子弹的精灵组
self.bullets = pygame.sprite.Group()
def display(self):
self.screen.blit(self.enemy, (self.rect.left, self.rect.top))
# 改为使用精灵组的方法绘制子弹
self.bullets.update()# 更新子弹位置
self.bullets.draw(self.screen)# 绘制子弹
# 定义移动飞机的方法
def auto_move(self):
# 将direction改为全局变量
global direction
# 判断方向进行移动
if direction == "right":
self.rect.right += self.speed
if direction == "left":
self.rect.right -= self.speed
# 定义碰壁时调整移动方向
if self.rect.right >= 480 - 51:
direction = "left"
if self.rect.right <= 0:
direction = "right"
def update(self):
self.auto_fire()
self.auto_move()
self.display()
# 定义自动开火的方法
def auto_fire(self):
# 使用随机数函数进行随机抽取一个1到10的一个随机数
random_number = random.randint(1, 10)
# 当随机数为8时创建子弹
if random_number == 8:
# 创建单个子弹
bullet = EnemyBullet(self.screen,self.rect.left, self.rect.top)
# 将子弹放入列表中
self.bullets.add(bullet)# 引入子弹的类class Bullet(pygame.sprite.Sprite): def __init__(self, screen, x, y): # 调用继承精灵初始化方法 pygame.sprite.Sprite.__init__(self) # 引入子弹图片 self.image = pygame.image.load("./images/bullet1.png") # 根据图片进行获取矩形对象 self.rect =self.image.get_rect() self.rect.topleft = self.x = x + 51 - 2 self.y =y # 显示窗口 self.screen = screen # 定义速度 self.speed = 10 def update(self): #修改子弹坐标 self.rect.top -= self.speed # 如果子弹出界,销毁子弹 if self.rect.top < -22 : self.kill()# 定义音乐的类class GameSound(object): def __init__(self): # 初始化主程序 pygame.mixer.init() # 引入背景音乐 pygame.mixer.music.load("./sound/game_music.ogg") # 调整声音大小 pygame.mixer.music.set_volume(0.5) def PlayMusic(self): # 开始播放音乐 pygame.mixer.music.play(-1)# 创建main函数创建主程序def main(): sound = GameSound() sound.PlayMusic() # 创建一个窗口 screen = pygame.display.set_mode((480, 700), 0, 32) # 引入图片创建背景 background = pygame.image.load("./images/background.png") # 引入图片创建玩家 player = pygame.image.load("./images/me1.png") # 引入玩家信息 player = Plane(screen) # 引入敌人信息 enemy = Enemy(screen) # 设置速度变量 speed = 10 x = 179 y = 500 while True: # 绘制背景 screen.blit(background, (0, 0)) # 获取事件 for event in pygame.event.get(): # 如果事件是QUIT事件,如点击窗口的关闭按钮,则退出循环 if event.type == pygame.QUIT: # 执行退出游戏 pygame.quit # 退出程序 exit() # 执行飞机按键监听 player.key_control() # 显示飞机 player.display() # 显示敌人 enemy.display() # 敌人自动移动 enemy.auto_move() # 敌人自动开火 enemy.auto_fire() # 界面更新 pygame.display.update() # 使程序每次运行时停留0.01秒 time.sleep(0.01)if __name__ == '__main__': main()此时优化后的程序可以正常运行
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]