做这个得先自己练习pygame模块
然后验证安装一下这个
python -m pygame.examples.aliens
import pygame
from random import randrange
SCREEN_RECT = pygame.Rect(0, 0, 512, 768)
class GameSprite(pygame.sprite.Sprite):
""""精灵基类"""
def __init__(self, image_path, speed=0, speed1=0):
super().__init__()
# 加载图像
self.image = pygame.image.load(image_path)
# 设置尺寸
self.rect = self.image.get_rect()
# 设置速度
self.speed = speed
self.speed1 = speed1
def update(self, *args):
self.rect.y += self.speed
class Enemy(GameSprite):
def __init__(self):
super().__init__("caomei.jpg")
self.rect.bottom = 0
self.rect.x = randrange(0, SCREEN_RECT.right - self.rect.width, self.rect.width + 20)
self.speed = randrange(1, 3)
def update(self, *args):
self.rect.y += self.speed
if self.rect.y > SCREEN_RECT.right:
self.kill()
class Background(GameSprite):
def __init__(self, is_alt=False):
super().__init__("bg2.jpg", 1)
if is_alt:
self.rect.y = -self.rect.height
def update(self, *args):
super().update()
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -self.rect.height
class Hero(GameSprite):
def __init__(self):
super().__init__("shirui1.jpg")
self.rect.centerx = SCREEN_RECT.centerx
self.rect.bottom = SCREEN_RECT.bottom - 100
# 创建子弹精灵组
self.bullet_group = pygame.sprite.Group()
def update(self, *args):
self.rect.x += self.speed
self.rect.y += self.speed1
if self.rect.left < 0:
self.rect.left = 0
if self.rect.right > SCREEN_RECT.right:
self.rect.right = SCREEN_RECT.right
if self.rect.top < 0:
self.rect.top = 0
if self.rect.bottom > SCREEN_RECT.bottom:
self.rect.bottom = SCREEN_RECT.bottom
def fire(self):
for i in range(3):
hero_bullet = Bullet()
hero_bullet.rect.bottom = self.rect.y - i
hero_bullet.rect.centerx = self.rect.centerx
# 将精灵添加到精灵组
self.bullet_group.add(hero_bullet)
class Bullet(GameSprite):
def __init__(self):
super().__init__("bbb.jpg", -1)
def update(self):
super().update()
if self.rect.bottom < 0:
self.kill()
pygame.init()
# 替补背景
# 创建游戏主窗口
screen = pygame.display.set_mode(SCREEN_RECT.size)
# 创建精灵和精灵组
bg1 = Background()
bg2 = Background(is_alt=True)
bg_group = pygame.sprite.Group(bg1, bg2)
hero = Hero()
hero_group = pygame.sprite.Group(hero)
enemy_group = pygame.sprite.Group(*[Enemy() for item in range(3)])
# 创建时钟对象
clock = pygame.time.Clock()
CREATE_ENEMY_EVENT = pygame.USEREVENT
pygame.time.set_timer(CREATE_ENEMY_EVENT, 500)
# 时钟控制子弹频率
HERO_FIRE_EVENT = pygame.USEREVENT + 1
# pygame.time.set_timer(HERO_FIRE_EVENT, 500)
# 游戏循环
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == CREATE_ENEMY_EVENT:
enemy_group.add(Enemy())
elif event.type == HERO_FIRE_EVENT:
hero.fire()
# 按键控制子弹频率
elif event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
hero.fire()
# 获取按键
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_RIGHT:
hero.speed = 2
elif event.key == pygame.K_LEFT:
hero.speed = -2
elif event.key == pygame.K_UP:
hero.speed1 = -2
elif event.key == pygame.K_DOWN:
hero.speed1 = 2
elif event.type == pygame.KEYUP:
if event.key == pygame.K_RIGHT:
hero.speed = 0
elif event.key == pygame.K_LEFT:
hero.speed = 0
elif event.key == pygame.K_UP:
hero.speed1 = 0
elif event.key == pygame.K_DOWN:
hero.speed1 = 0
# 碰撞检测
pygame.sprite.groupcollide(hero.bullet_group, enemy_group, True, True)
res = pygame.sprite.spritecollide(hero, enemy_group, True)
if res:
hero.kill()
pygame.quit()
exit()
# 刷新帧率
clock.tick(500)
# 更新绘制精灵
bg_group.update()
bg_group.draw(screen)
hero_group.update()
hero_group.draw(screen)
enemy_group.update()
enemy_group.draw(screen)
hero.bullet_group.update()
hero.bullet_group.draw(screen)
# 统一更新屏幕
pygame.display.update()
pass