python每日必学(每天10分钟python进阶11)

首先明确学习目标,今天的目标是继续python中实例开发项目--飞机大战

今天任务进行面向对象版的飞机大战开发--创建敌方子弹类

目标:创建敌方飞机子弹,让敌方飞机自动发射子弹

执行效果

python每日必学(每天10分钟python进阶11)(1)

完整代码如下

这边引入random模块 控制敌机发射子弹速度

import random import time import pygame from pygame.constants import * class HeroPlane(object): def __init__(self, screen): # 创建战斗机图片 self.player = pygame.image.load("/home/yeren/桌面/项目开发/images/me1.png") # 定义飞机的坐标 self.x = 480 / 2 - 100 / 2 self.y = 500 # 飞机速度 self.speed = 10 # 记录当前的窗口对象 self.screen = screen # 装子弹的列表 self.bullets = [] def key_control(self): # 键盘连续监听 key_pressed = pygame.key.get_pressed() if key_pressed[K_w] or key_pressed[K_UP]: self.y -= self.speed if key_pressed[K_s] or key_pressed[K_DOWN]: self.y = self.speed if key_pressed[K_a] or key_pressed[K_LEFT]: self.x -= self.speed if key_pressed[K_d] or key_pressed[K_RIGHT]: self.x = self.speed if 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: # 让子弹飞 修改子弹y坐标 bullet.auto_move() # 子弹显示在窗口 bullet.display() class EnemyPlane(object): def __init__(self, screen): # 4.创建敌机图片,当做真正的飞机 self.player = pygame.image.load("/home/yeren/桌面/项目开发/images/enemy-2.gif") # 定义飞机的坐标 self.x = 0 self.y = 0 # 飞机速度 self.speed = 10 # 记录当前的窗口对象 self.screen = screen # 装子弹的列表 self.bullets = [] # 敌机移动方向 self.direction = 'right' def auto_fire(self): """自动开火 创建子弹对象 添加进列表""" random_num = random.randint(1, 10) if random_num == 8: bullet = EnemyBullet(self.screen, self.x, self.y) self.bullets.append(bullet) def display(self): # 5将飞机图片贴到窗口中 self.screen.blit(self.player, (self.x, self.y)) # 遍历所有子弹 for bullet in self.bullets: # 让子弹飞 修改子弹y坐标 bullet.auto_move() # 子弹显示在窗口 bullet.display() def auto_move(self): if self.direction == 'right': self.x = self.speed elif self.direction == 'left': self.x -= self.speed if self.x > 480 - 51: self.direction = 'left' elif self.x < 0: self.direction = 'right' def auto_fire(self): """自动开火 创建子弹对象 添加进列表""" random_num = random.randint(1, 10) if random_num == 8: bullet = EnemyBullet(self.screen, self.x, self.y) self.bullets.append(bullet) # 子弹类 # 属性 class Bullet(object): def __init__(self, screen, x, y): # 坐标 self.x = x 100 / 2 - 22 / 2 self.y = y - 22 # 图片 self.image = pygame.image.load('/home/yeren/桌面/项目开发/images/bullet-3.gif') # 窗口 self.screen = screen # 速度 self.speed = 20 def display(self): """显示子弹到窗口""" self.screen.blit(self.image, (self.x, self.y)) def auto_move(self): """让子弹飞 修改子弹y坐标""" self.y -= self.speed # 敌方子弹类 # 属性 class EnemyBullet(object): def __init__(self, screen, x, y): # 坐标 self.x = x 50 / 2 - 8 / 2 self.y = y 39 # 图片 self.image = pygame.image.load('/home/yeren/桌面/项目开发/images/bullet-1.gif') # 窗口 self.screen = screen # 速度 self.speed = 20 def display(self): """显示子弹到窗口""" self.screen.blit(self.image, (self.x, self.y)) def auto_move(self): """让子弹飞 修改子弹y坐标""" self.y = self.speed def main(): # 1. 创建一个窗口,用来显示内容 screen = pygame.display.set_mode((480, 700), 0, 32) # 2. 创建一个和窗口大小的图片,用来充当背景 background = pygame.image.load("/home/yeren/桌面/项目开发/images/img_bg_level_5.jpg") # 创建一个玩家飞机对象player,记得导入参数 player = HeroPlane(screen) # 创建一个敌方飞机的对象,注意不要忘记传窗口 enemyplane = EnemyPlane(screen) while True : # 3将背景,飞机图片贴到窗口中 screen.blit(background, (0, 0)) # 获取事件 for event in pygame.event.get(): # 判断事件类型 if event.type ==pygame.QUIT: pygame.quit() # 程序退出 exit( ) # 执行飞机的按键监听 player.key_control() # 飞机的显示 player.display() # 敌方飞机的显示 enemyplane.display() # 显示窗口内容 # 敌机自动移动 enemyplane.auto_move() # 敌机自动开火 enemyplane.auto_fire() pygame.display.update() time.sleep(0.03) if __name__ == "__main__": main()

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页