python飞机大战游戏.py

python飞机大战游戏.py

python 复制代码
import pygame
import random

# 游戏窗口大小
WINDOW_WIDTH = 600
WINDOW_HEIGHT = 800

# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

# 初始化Pygame
pygame.init()

# 创建游戏窗口
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("飞机大战")

# 创建时钟对象,用于控制游戏帧率
clock = pygame.time.Clock()

# 飞机类
class Plane(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface([50, 50])  # 飞机的形状
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.x = WINDOW_WIDTH // 2
        self.rect.y = WINDOW_HEIGHT - 100
        self.speed = 5

    def update(self):
        # 获取键盘按键状态
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.rect.x -= self.speed
        if keys[pygame.K_RIGHT]:
            self.rect.x += self.speed

        # 限制飞机在窗口范围内移动
        if self.rect.x < 0:
            self.rect.x = 0
        if self.rect.x > WINDOW_WIDTH - 50:
            self.rect.x = WINDOW_WIDTH - 50

    def shoot(self):
        bullet = Bullet(self.rect.x + 23, self.rect.y)
        all_sprites.add(bullet)
        bullets.add(bullet)

# 子弹类
class Bullet(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.Surface([5, 10])  # 子弹的形状
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 10

    def update(self):
        self.rect.y -= self.speed
        if self.rect.y < -10:
            self.kill()

# 敌人类
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface([30, 30])  # 敌人的形状
        self.image.fill(WHITE)
        self.rect = self.image.get_rect()
        self.rect.x = random.randint(0, WINDOW_WIDTH - 30)
        self.rect.y = 0
        self.speed = random.randint(1, 5)

    def update(self):
        self.rect.y += self.speed
        if self.rect.y > WINDOW_HEIGHT:
            self.rect.x = random.randint(0, WINDOW_WIDTH - 30)
            self.rect.y = 0
            self.speed = random.randint(1, 5)

# 创建精灵组
all_sprites = pygame.sprite.Group()

# 创建飞机对象
player = Plane()
all_sprites.add(player)

# 创建子弹精灵组
bullets = pygame.sprite.Group()

# 创建敌人精灵组
enemies = pygame.sprite.Group()
for _ in range(10):
    enemy = Enemy()
    all_sprites.add(enemy)
    enemies.add(enemy)

# 游戏主循环
running = True
while running:
    # 处理事件
    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()

    # 检测碰撞
    if pygame.sprite.spritecollide(player, enemies, True):
        running = False
    for bullet in bullets:
        pygame.sprite.spritecollide(bullet, enemies, True)

    # 绘制背景
    window.fill(BLACK)

    # 绘制所有精灵
    all_sprites.draw(window)

    # 刷新屏幕
    pygame.display.flip()

    # 控制帧率
    clock.tick(60)

# 退出游戏
pygame.quit()
相关推荐
武天旭2 小时前
AI安全--AI大模型的毒性偏见与安全对齐实践
人工智能·python·深度学习
视觉小萌新3 小时前
AI Class 3 · Chapter 2-3:函数、异常、文件读写+JSON / JSONL 读写(小白版)
人工智能·python·json
小小张说故事4 小时前
Python 的 obj.x 到底按什么顺序找?拆开数据描述符、实例字典和 __getattr__ 那条优先级链
python
用户11481867894845 小时前
水印的实现方式逻辑
前端·python
贾公子5 小时前
从单条内容到账号维度——AIGC 风险评分的工程实现
后端·python
hkNaruto5 小时前
【AI】游戏大模型智能体OODA过程记忆问题解决方案:AgenticSTS 有界记忆契约:技术分析与流水线改造操作手册
人工智能·游戏·机器学习
木头左7 小时前
【Python】不点浏览器发博客:逆向 CSDN 创作中心接口做 md-publish 技能
python·自动化·api
Tt有了t7 小时前
设计模式速查
java·python·设计模式
deepseek237 小时前
Python日志拖慢请求?QueueHandler排队、丢失与退出实测
python·性能优化·logging·后端开发·queuehandler
用户91294046848427 小时前
Codex 从零到能交付(05):第一次改代码:生成一个文件清单脚本
python