import pygame,random
class Plane:
def __init__(self,scr,planeImage_1,planeImage_2,bulletImage):
self.planeImage_1 = planeImage_1
self.planeImage_2 = planeImage_2
self.bulletImage = bulletImage
self.rect = self.planeImage_1.get_rect()
self.screen = scr
self.screen_rect = self.screen.get_rect()
self.rect.bottom = self.screen_rect.bottom
self.rect.centerx = self.screen_rect.centerx
self.speed = 1
self.bulletsGroup = pygame.sprite.Group()
def move(self,direction):
if direction == "up":
self.rect.centery-=self.speed
if direction == "down":
self.rect.centery+=self.speed
if direction == "left":
self.rect.centerx-=self.speed
if direction == "right":
self.rect.centerx+=self.speed
def show(self):
self.pic = random.choice([self.planeImage_1,self.planeImage_2])
self.screen.blit(self.pic, self.rect)
"""
发射子弹
"""
def shoot(self):
bullet = Bullet(self.bulletImage,self.rect.midtop)
self.bulletsGroup.add(bullet)
def show_bullets(self):
for bullet in self.bulletsGroup:
bullet.move()
if bullet.rect.top <= self.screen_rect.top:
self.bulletsGroup.remove(bullet)
self.bulletsGroup.draw(self.screen)
"""
子弹类
"""
class Bullet(pygame.sprite.Sprite):
def __init__(self,bulletImage,mid_bottom):
super().__init__()
self.image = bulletImage
self.rect = self.image.get_rect()
self.rect.midbottom = mid_bottom
self.speed = 1
def move(self):
self.rect.top -= self.speed
"""
敌机
"""
class EnemyPlane(pygame.sprite.Sprite):
def __init__(self,image):
super().__init__()
self.image = image
self.rect = self.image.get_rect()
self.rect.x = random.randint(0,430)
self.speed = 1
def move(self):
self.rect.top += self.speed
class Window():
def __init__(self):
pygame.init()
pygame.key.set_repeat(1,1)
self.name="飞机大战"
self.height=800
self.width=480
self.screen = pygame.display.set_mode((self.width, self.height))
self.rect = self.screen.get_rect()
pygame.display.set_caption(self.name)
self.image = pygame.image.load("image/background.png").convert_alpha()
self.picture = pygame.image.load("image/shoot.png").convert_alpha()
self.bulletImage = self.picture.subsurface(pygame.Rect(1004,987,9,21))
self.planeImage_1 = self.picture.subsurface(pygame.Rect(3, 99, 98, 126))
self.planeImage_2 = self.picture.subsurface(pygame.Rect(168, 360, 98, 126))
self.enemyPlaneImage = self.picture.subsurface(pygame.Rect(534, 612, 57, 43))
self.game_state = True
self.plane = Plane(self.screen,self.planeImage_1,self.planeImage_2,self.bulletImage)
self.enemyPlanes = pygame.sprite.Group()
def createEnemy(self):
"""飞机太多"""
enemyPlane = EnemyPlane(self.enemyPlaneImage)
self.enemyPlanes.add(enemyPlane)
def moveEnemy(self):
for enemy in self.enemyPlanes:
enemy.move()
if enemy.rect.top>=self.rect.bottom:
self.enemyPlanes.remove(enemy)
self.enemyPlanes.draw(self.screen)
def show(self):
while self.game_state:
for event in pygame.event.get():
if event.type == pygame.QUIT:
self.game_state = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
self.plane.move("up")
if event.key == pygame.K_DOWN:
self.plane.move("down")
if event.key == pygame.K_LEFT:
self.plane.move("left")
if event.key == pygame.K_RIGHT:
self.plane.move("right")
if event.type == pygame.KEYUP:
if event.key == pygame.K_SPACE:
self.plane.shoot()
self.screen.blit(self.image,(0,0))
self.plane.show()
self.plane.show_bullets()
self.createEnemy()
self.moveEnemy()
pygame.display.update()
window = Window()
window.show()