9:飞机大战
一:目录结构(飞机资源文件和脚本在同一文件夹下)

二:代码:
import random
import time
import pygame
#键盘操作
from pygame.locals import *
#飞机
class HearPlane:
def __init__(self,screen_temp):
#飞机坐标
self.x=200
self.y=720
# 创建窗口--和背景图一样大
self.screen=screen_temp
# 飞机图片
self.hear_image=pygame.image.load("./feiji/hero1.png")
#存储发射的子弹的多个对象
self.bullet_list=[]
# 飞机图片贴在下方正中位置--(200,710)
def display(self):
self.screen.blit(self.hear_image,(self.x,self.y))
for bullet in self.bullet_list:
#子弹更新显示
bullet.display()
bullet.move()
#判断子弹是否越界
if bullet.judge():
#移除对象
self.bullet_list.remove(bullet)
def move_left(self):
self.x-=10
def move_right(self):
self.x+=10
def fire(self):
#传飞机坐标
self.bullet_list.append(Bullet(self.screen,self.x,self.y))
#敌机
class EnemyPlane:
def __init__(self,screen_temp):
#飞机坐标
self.x=0
self.y=0
# 创建窗口--和背景图一样大
self.screen=screen_temp
# 飞机图片
self.hear_image=pygame.image.load("./feiji/enemy0.png")
#存储发射的子弹的多个对象
self.bullet_list=[]
#敌机默认运行的方向向右
self.direction='right'
# 飞机图片贴在下方正中位置--(00)
def display(self):
self.screen.blit(self.hear_image,(self.x,self.y))
for bullet in self.bullet_list:
#子弹更新显示
bullet.display()
bullet.move()
def move(self):
if self.direction=='right':
self.x+=2
elif self.direction=='left':
self.x-=2
#运动长度值480-50
if self.x>480-50:
self.direction='left'
elif self.x<0:
self.direction='right'
def fire(self):
random_num=random.randint(1, 100)
if random_num == 20 or random_num == 21:
#传敌机坐标
self.bullet_list.append(EnemyBullet(self.screen,self.x,self.y))
#子弹
class Bullet:
def __init__(self,screen_temp,x,y):
# 子弹坐标
self.x = x+40
self.y = y-20
# 创建窗口--和背景图一样大
self.screen = screen_temp
# 子弹图片
self.bullet_image = pygame.image.load("./feiji/bullet.png")
# 飞机图片贴在下方正中位置--(200,710)
def display(self):
self.screen.blit(self.bullet_image, (self.x, self.y))
#子弹移动
def move(self):
self.y-=3
def judge(self):
if self.y<0:
return True
else:
return False
#敌机子弹
class EnemyBullet:
def __init__(self,screen_temp,x,y):
# 子弹坐标
self.x = x+25
self.y = y+40
# 创建窗口--和背景图一样大
self.screen = screen_temp
# 子弹图片
self.bullet_image = pygame.image.load("./feiji/bullet1.png")
# 飞机图片贴在下方正中位置--(200,710)
def display(self):
self.screen.blit(self.bullet_image, (self.x, self.y))
#子弹移动
def move(self):
self.y+=3
def judge(self):
if self.y>852:
return True
else:
return False
def key_control(hero_temp):
# 轮循键盘时间
for event in pygame.event.get():
# 判断是否点击退出
if event.type == QUIT:
exit()
# 判断是否按下键
elif event.type == KEYDOWN:
# 按a键或左箭头键
if event.key == K_a or event.key == K_LEFT:
print('left')
hero_temp.move_left()
# 按d键或右键
elif event.key == K_d or event.key == K_RIGHT:
print('right')
hero_temp.move_right()
# 按空格键
elif event.key == K_SPACE:
print('space')
#按空格键显示子弹开火
hero_temp.fire()
def main():
# 创建窗口--和背景图一样大
screen = pygame.display.set_mode((480, 852), 0, 32)
#加载一个和窗口一样大小的图片用来当做背景--背景图片
backgroud=pygame.image.load("./feiji/background.png")
#创建飞机对象
hero=HearPlane(screen)
# 创建敌机对象
enemy = EnemyPlane(screen)
while True:
#把背景图片贴在窗口上,从坐标(0,0)--左上方
screen.blit(backgroud,(0,0))
#飞机显示
hero.display()
#敌机显示
enemy.display()
#低机移动
enemy.move()
#敌机
enemy.fire()
#更新显示的内容
pygame.display.update()
key_control(hero)
time.sleep(0.01)
if __name__ == '__main__':
main()

浙公网安备 33010602011771号