ITPub博客

首页 > IT职业 > IT职场 > 打飞机小游戏

打飞机小游戏

原创 IT职场 作者:smokingcat 时间:2025-10-30 14:27:23 0 删除 编辑

下面是一个使用Python和Pygame库实现的简单打飞机小游戏:

python
import pygameimport randomimport sys# 初始化pygamepygame.init()# 游戏窗口尺寸WIDTH = 480HEIGHT = 600screen = pygame.display.set_mode((WIDTH, HEIGHT))pygame.display.set_caption("打飞机小游戏")# 颜色定义BLACK = (0, 0, 0)WHITE = (255, 255, 255)RED = (255, 0, 0)GREEN = (0, 255, 0)BLUE = (0, 120, 255)YELLOW = (255, 255, 0)# 游戏时钟clock = pygame.time.Clock()FPS = 60# 玩家飞机类class Player(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((50, 40))
        self.image.fill(BLUE)
        # 绘制飞机形状
        pygame.draw.polygon(self.image, WHITE, [(25, 0), (0, 40), (50, 40)])
        pygame.draw.rect(self.image, BLUE, (15, 15, 20, 25))
        self.rect = self.image.get_rect()
        self.rect.centerx = WIDTH // 2
        self.rect.bottom = HEIGHT - 10
        self.speed = 8
        self.health = 100
        
    def update(self):
        # 获取按键
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT] and self.rect.left > 0:
            self.rect.x -= self.speed        if keys[pygame.K_RIGHT] and self.rect.right < WIDTH:
            self.rect.x += self.speed        if keys[pygame.K_UP] and self.rect.top > 0:
            self.rect.y -= self.speed        if keys[pygame.K_DOWN] and self.rect.bottom < HEIGHT:
            self.rect.y += self.speed            
    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        all_sprites.add(bullet)
        bullets.add(bullet)# 敌机类class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface((30, 30))
        self.image.fill(RED)
        # 绘制敌机形状
        pygame.draw.polygon(self.image, YELLOW, [(15, 0), (0, 30), (30, 30)])
        self.rect = self.image.get_rect()
        self.rect.x = random.randrange(WIDTH - self.rect.width)
        self.rect.y = random.randrange(-100, -40)
        self.speedy = random.randrange(1, 5)
        self.speedx = random.randrange(-2, 2)
        
    def update(self):
        self.rect.y += self.speedy
        self.rect.x += self.speedx        # 如果敌机飞出屏幕底部或侧面,重新生成一个
        if self.rect.top > HEIGHT + 10 or self.rect.left < -25 or self.rect.right > WIDTH + 25:
            self.rect.x = random.randrange(WIDTH - self.rect.width)
            self.rect.y = random.randrange(-100, -40)
            self.speedy = random.randrange(1, 5)
            self.speedx = random.randrange(-2, 2)# 子弹类class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface((5, 15))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.centerx = x
        self.rect.bottom = y
        self.speedy = -10
        
    def update(self):
        self.rect.y += self.speedy        # 如果子弹飞出屏幕顶部,删除它
        if self.rect.bottom < 0:
            self.kill()# 爆炸效果类class Explosion(pygame.sprite.Sprite):
    def __init__(self, center):
        super().__init__()
        self.size = 30
        self.image = pygame.Surface((self.size, self.size))
        self.image.fill(YELLOW)
        self.rect = self.image.get_rect()
        self.rect.center = center
        self.frame = 0
        self.last_update = pygame.time.get_ticks()
        self.frame_rate = 50
        
    def update(self):
        now = pygame.time.get_ticks()
        if now - self.last_update > self.frame_rate:
            self.last_update = now
            self.frame += 1
            if self.frame == 8:
                self.kill()
            else:
                self.size = max(5, 30 - self.frame * 4)
                old_center = self.rect.center
                self.image = pygame.Surface((self.size, self.size))
                self.image.fill(YELLOW)
                self.rect = self.image.get_rect()
                self.rect.center = old_center# 创建精灵组all_sprites = pygame.sprite.Group()enemies = pygame.sprite.Group()bullets = pygame.sprite.Group()# 创建玩家player = Player()all_sprites.add(player)# 创建敌机for i in range(8):
    enemy = Enemy()
    all_sprites.add(enemy)
    enemies.add(enemy)# 分数score = 0font = pygame.font.SysFont('arial', 24)# 游戏主循环running = Truewhile running:
    # 保持游戏运行的速度
    clock.tick(FPS)
    
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                player.shoot()
    
    # 更新所有精灵
    all_sprites.update()
    
    # 检查子弹是否击中敌机
    hits = pygame.sprite.groupcollide(enemies, bullets, True, True)
    for hit in hits:
        score += 10
        explosion = Explosion(hit.rect.center)
        all_sprites.add(explosion)
        enemy = Enemy()
        all_sprites.add(enemy)
        enemies.add(enemy)
    
    # 检查敌机是否撞到玩家
    hits = pygame.sprite.spritecollide(player, enemies, True)
    for hit in hits:
        player.health -= 20
        explosion = Explosion(hit.rect.center)
        all_sprites.add(explosion)
        enemy = Enemy()
        all_sprites.add(enemy)
        enemies.add(enemy)
        if player.health <= 0:
            running = False
    
    # 渲染
    screen.fill(BLACK)
    all_sprites.draw(screen)
    
    # 显示分数
    score_text = font.render(f'分数: {score}', True, WHITE)
    screen.blit(score_text, (10, 10))
    m.ddjrszb.com
wap.ddjrszb.com
tsl.ddjrszb.com
gov.ddjrszb.com
govzb.ddjrszb.com
vip.ddjrszb.com
gcdr.ddjrszb.com

ddjrszb.cn

m.ddjrszb.cn
wap.ddjrszb.cn
tsl.ddjrszb.cn
    # 显示生命值
    health_text = font.render(f'生命值: {player.health}', True, WHITE)
    screen.blit(health_text, (10, 40))
    
    # 显示控制说明
    controls_text = font.render('方向键移动, 空格键射击', True, WHITE)
    screen.blit(controls_text, (WIDTH // 2 - controls_text.get_width() // 2, HEIGHT - 30))
    
    # 刷新屏幕
    pygame.display.flip()# 游戏结束pygame.quit()sys.exit()

游戏说明

游戏目标

  • 控制你的飞机躲避敌机并射击它们

  • 每击落一架敌机得10分

  • 被敌机撞到会减少生命值

  • 生命值降至0游戏结束

控制方式

  • 方向键(上、下、左、右)控制飞机移动

  • 空格键发射子弹

运行要求

  • 需要安装Python和Pygame库

  • 安装Pygame:  pip install pygame

游戏特点

  • 简单的图形界面

  • 敌机随机移动

  • 击中敌机有爆炸效果

  • 显示分数和生命值

你可以根据自己的喜好修改游戏参数,如飞机速度、敌机数量、子弹速度等,来调整游戏难度。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/42425/viewspace-3099228/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2025-10-29

  • 博文量
    12
  • 访问量
    11319