Python小游戏——雷霆战机

本文介绍了一个用Python的pygame库编写的简单雷霆战机游戏,包括游戏窗口初始化、图片加载、玩家和敌人的移动、子弹发射与碰撞检测以及得分系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import pygame
import random

# 初始化
pygame.init()

# 定义游戏窗口大小
window_width = 800
window_height = 600

# 创建游戏窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("雷霆战机")

# 加载图片
player_img = pygame.image.load("player.png")
enemy_img = pygame.image.load("enemy.png")
bullet_img = pygame.image.load("bullet.png")

# 获取图片大小
player_width = player_img.get_width()
player_height = player_img.get_height()
enemy_width = enemy_img.get_width()
enemy_height = enemy_img.get_height()
bullet_width = bullet_img.get_width()
bullet_height = bullet_img.get_height()

# 设置游戏速度
clock = pygame.time.Clock()
game_speed = 30

# 定义玩家、敌人和子弹的初始位置
player_x = window_width / 2 - player_width / 2
player_y = window_height - player_height
enemy_x = random.randint(0, window_width - enemy_width)
enemy_y = 0
bullet_x = 0
bullet_y = window_height
bullet_state = "ready"

# 定义玩家、敌人和子弹的移动速度
player_speed = 5
enemy_speed = 3
bullet_speed = 7

# 定义得分
score = 0

# 定义字体
font = pygame.font.Font(None, 36)

# 定义游戏结束标志
game_over = False

# 游戏循环
while not game_over:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True

        # 处理玩家移动事件
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player_x -= player_speed
            elif event.key == pygame.K_RIGHT:
                player_x += player_speed
            elif event.key == pygame.K_SPACE and bullet_state == "ready":
                # 发射子弹
                bullet_x = player_x + player_width / 2 - bullet_width / 2
                bullet_y = player_y
                bullet_state = "fire"

    # 更新玩家、敌人和子弹的位置
    player_x = max(0, min(window_width - player_width, player_x))
    enemy_y += enemy_speed
    bullet_y -= bullet_speed

    # 检测碰撞
    if bullet_state == "fire" and bullet_y <= enemy_y + enemy_height:
        if bullet_x >= enemy_x and bullet_x <= enemy_x + enemy_width:
            # 子弹击中敌人
            bullet_state = "ready"
            enemy_x = random.randint(0, window_width - enemy_width)
            enemy_y = 0
            score += 1

    if enemy_y >= window_height:
        # 敌人飞过屏幕底部
        enemy_x = random.randint(0, window_width - enemy_width)
        enemy_y = 0
        score -= 1

    # 绘制画面
    window.fill((255, 255, 255))
    window.blit(player_img, (player_x, player_y))
    window.blit(enemy_img, (enemy_x, enemy_y))
    window.blit(bullet_img, (bullet_x, bullet_y))

    # 绘制得分
    score_text = font.render("Score: " + str(score), True, (0, 0, 0))
    window.blit(score_text, (10, 10))

    pygame.display.update()
    clock.tick(game_speed)

# 退出游戏
pygame.quit()

以上代码是一个简单的雷霆战机小游戏的Python代码

请注意,以上代码仅为一个简单的示例,实际游戏可以根据需求进行更复杂的设置和功能。另外,游戏中使用的图片需要事先准备好并保存在与代码文件相同的目录下,分别命名为"player.png"、"enemy.png"和"bullet.png"。

### 使用Python开发雷霆战机游戏 #### 准备工作 为了创建雷霆战机游戏,需先安装并导入必要的模块。这包括`pygame`, `os`, `time` 和 `random`. 这些库提供了图形渲染、文件路径处理、时间控制以及随机数生成功能[^3]. ```python import pygame, os import time import random ``` #### 初始化设置 在启动游戏之前,必须完成一系列初始化操作来配置音频和显示参数。 ```python pygame.mixer.pre_init(44100, -16, 2, 2048) pygame.mixer.init() pygame.init() WIDTH = 480 HEIGHT = 600 screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Thunder Fighter") clock = pygame.time.Clock() ``` 上述代码片段设置了窗口尺寸为480x600像素,并命名为“Thunder Fighter”。同时,也设定了每秒刷新帧率为默认值[^4]. #### 资源加载 确保拥有名为`player.png`和`bullet.png`的图片文件,并放置于与Python脚本相同目录下。这些资源用于表示玩家角色及其发射物的形象[^2]. #### 主循环逻辑构建 游戏的核心在于主事件循环,在这里检测用户的输入动作并对场景中的对象位置进行更新: ```python running = True while running: # 控制游戏速度 clock.tick(60) # 处理事件队列 for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 更新游戏状态 (省略具体实现细节) # 绘制画面 (省略具体实现细节) pygame.display.flip() # 刷新屏幕内容 ``` 这段程序持续监听关闭按钮的状态变化;当用户尝试退出应用时,则终止整个进程。此外还包含了对游戏内部数据结构定期调整的过程,比如移动物体的位置或是碰撞检测等[^1].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值