引入敌人子弹:
算出敌人子弹出射点并在敌人出射点绘制子弹
# 引入敌人子弹的类
class EnemyBullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 29 - 2self.y = y + 43# 引入子弹图片self.image = pygame.image.load("./images/bullet2.png")# 显示窗口self.screen = screen# 定义速度self.speed = 4# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y += self.speed
在敌人类中引入子弹存入列表中并进行循环实现发射:
# 引入敌方飞机的类
class Enemy(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建敌人self.enemy = pygame.image.load("./images/enemy1.png") # 51*43# 设置速度变量self.speed = 5self.x = 0self.y = 0# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []def display(self):# 绘制敌人self.screen.blit(self.enemy, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 定义移动飞机的方法def auto_move(self):# 将direction改为全局变量global direction# 判断方向进行移动if direction == "right":self.x += self.speedif direction == "left":self.x -= self.speed# 定义碰壁时调整移动方向if self.x >= 480 - 51:direction = "left"if self.x <= 0:direction = "right"# 定义自动开火的方法def auto_fire(self):#创建单个子弹bullet = EnemyBullet(self.screen,self.x,self.y)#将子弹放入列表中self.bullets.append(bullet)
引入子弹和敌人的方法到主程序:
# 敌人自动移动
enemy.auto_move()
# 敌人自动开火
enemy.auto_fire()
完整代码:
# 引入pygame
import 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(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建敌人self.enemy = pygame.image.load("./images/enemy1.png") # 51*43# 设置速度变量self.speed = 5self.x = 0self.y = 0# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []def display(self):# 绘制敌人self.screen.blit(self.enemy, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 定义移动飞机的方法def auto_move(self):# 将direction改为全局变量global direction# 判断方向进行移动if direction == "right":self.x += self.speedif direction == "left":self.x -= self.speed# 定义碰壁时调整移动方向if self.x >= 480 - 51:direction = "left"if self.x <= 0:direction = "right"# 定义自动开火的方法def auto_fire(self):#创建单个子弹bullet = EnemyBullet(self.screen,self.x,self.y)#将子弹放入列表中self.bullets.append(bullet)
# 引入飞机的类
class Plane(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建玩家self.player = pygame.image.load("./images/me1.png")# 设置速度变量self.speed = 10self.x = 179self.y = 500# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []# 创建玩家移动的方法def key_control(self):# 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动key_pressed = pygame.key.get_pressed()if key_pressed[K_w] or key_pressed[K_UP]:self.y -= self.speedif key_pressed[K_d] or key_pressed[K_RIGHT]:self.x += self.speedif key_pressed[K_a] or key_pressed[K_LEFT]:self.x -= self.speedif key_pressed[K_s] or key_pressed[K_DOWN]:self.y += self.speedif key_pressed[K_SPACE]:# 按下空格键发射子弹bullet = Bullet(self.screen, self.x, self.y)# 将子弹存入列表self.bullets.append(bullet)def display(self):# 绘制玩家self.screen.blit(self.player, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()
# 引入敌人子弹的类
class EnemyBullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 29 - 2self.y = y + 43# 引入子弹图片self.image = pygame.image.load("./images/bullet2.png")# 显示窗口self.screen = screen# 定义速度self.speed = 4# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y += self.speed# 引入子弹的类
class Bullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 51 - 2self.y = y# 引入子弹图片self.image = pygame.image.load("./images/bullet1.png")# 显示窗口self.screen = screen# 定义速度self.speed = 10# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y -= self.speed# 创建main函数创建主程序
def main():# 创建一个窗口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 = 10x = 179y = 500while 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()
演示如下:

由于敌人子弹发射速度过快为降低子弹发射频率使用random函数:
# 引入random
import random
# 定义自动开火的方法
def auto_fire(self):# 使用随机数函数进行随机抽取一个1到10的一个随机数random_number = random.randint(1, 10)# 当随机数为8时创建子弹if random_number == 8:# 创建单个子弹bullet = EnemyBullet(self.screen, self.x, self.y)# 将子弹放入列表中self.bullets.append(bullet)
完整代码:
# 引入random
import random
# 引入pygame
import 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(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建敌人self.enemy = pygame.image.load("./images/enemy1.png") # 51*43# 设置速度变量self.speed = 5self.x = 0self.y = 0# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []def display(self):# 绘制敌人self.screen.blit(self.enemy, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 定义移动飞机的方法def auto_move(self):# 将direction改为全局变量global direction# 判断方向进行移动if direction == "right":self.x += self.speedif direction == "left":self.x -= self.speed# 定义碰壁时调整移动方向if self.x >= 480 - 51:direction = "left"if self.x <= 0:direction = "right"# 定义自动开火的方法def auto_fire(self):# 使用随机数函数进行随机抽取一个1到10的一个随机数random_number = random.randint(1, 10)# 当随机数为8时创建子弹if random_number == 8:# 创建单个子弹bullet = EnemyBullet(self.screen, self.x, self.y)# 将子弹放入列表中self.bullets.append(bullet)# 引入飞机的类
class Plane(object):# 创建玩家的方法,引入screen模块def __init__(self, screen):# 引入图片创建玩家self.player = pygame.image.load("./images/me1.png")# 设置速度变量self.speed = 10self.x = 179self.y = 500# 使screen变为飞机类的一个属性self.screen = screen# 定义装子弹的列表self.bullets = []# 创建玩家移动的方法def key_control(self):# 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动key_pressed = pygame.key.get_pressed()if key_pressed[K_w] or key_pressed[K_UP]:self.y -= self.speedif key_pressed[K_d] or key_pressed[K_RIGHT]:self.x += self.speedif key_pressed[K_a] or key_pressed[K_LEFT]:self.x -= self.speedif key_pressed[K_s] or key_pressed[K_DOWN]:self.y += self.speedif key_pressed[K_SPACE]:# 按下空格键发射子弹bullet = Bullet(self.screen, self.x, self.y)# 将子弹存入列表self.bullets.append(bullet)def display(self):# 绘制玩家self.screen.blit(self.player, (self.x, self.y))# 遍历所有子弹for bullet in self.bullets:# 引入让子弹飞起来的方法bullet.auto_move()# 显示子弹bullet.display()# 引入敌人子弹的类
class EnemyBullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 29 - 2self.y = y + 43# 引入子弹图片self.image = pygame.image.load("./images/bullet2.png")# 显示窗口self.screen = screen# 定义速度self.speed = 4# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y += self.speed# 引入子弹的类
class Bullet(object):def __init__(self, screen, x, y):# 定义坐标self.x = x + 51 - 2self.y = y# 引入子弹图片self.image = pygame.image.load("./images/bullet1.png")# 显示窗口self.screen = screen# 定义速度self.speed = 10# 定义显示子弹的方法def display(self):# 显示子弹到窗口self.screen.blit(self.image, (self.x, self.y))# 定义移动子弹的方法def auto_move(self):# 修改子弹y坐标使子弹飞起来self.y -= self.speed# 创建main函数创建主程序
def main():# 创建一个窗口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 = 10x = 179y = 500while 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()
演示如下:

