• 代码


import pygame
import sys
import random

# 初始化Pygame
pygame.init()

# 设置屏幕尺寸
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("飞行射击游戏")

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

# 加载飞机图像(你需要自己准备一个飞机图像文件,比如plane.png)
player_image = pygame.image.load('plane.png').convert_alpha()
player_rect = player_image.get_rect()
player_rect.centerx = SCREEN_WIDTH // 2
player_rect.bottom = SCREEN_HEIGHT - 10
player_speed_x = 0

# 定义敌人类
class Enemy(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.image = pygame.Surface([50, 50])
        self.image.fill(RED)
        self.rect = self.image.get_rect()
        self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)
        self.rect.y = random.randint(-100, -40)
        self.speed_y = random.randint(1, 8)

    def update(self):
        self.rect.y += self.speed_y
        if self.rect.top > SCREEN_HEIGHT + 10:
            self.rect.x = random.randint(0, SCREEN_WIDTH - self.rect.width)
            self.rect.y = random.randint(-100, -40)
            self.speed_y = random.randint(1, 8)

# 创建敌人精灵组
all_enemies = pygame.sprite.Group()
for i in range(8):
    enemy = Enemy()
    all_enemies.add(enemy)

# 设置时钟以控制帧率
clock = pygame.time.Clock()

# 游戏主循环
running = True
score = 0
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 获取按键状态
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_rect.left > 0:
        player_rect.x -= 5
    if keys[pygame.K_RIGHT] and player_rect.right < SCREEN_WIDTH:
        player_rect.x += 5
    if keys[pygame.K_SPACE]:
        # 发射子弹(这里省略子弹的具体实现)
        pass

    # 更新敌人位置
    all_enemies.update()

    # 检测碰撞(这里省略碰撞检测的具体实现)
    # 如果检测到碰撞,可以增加分数并移除该敌人

    # 绘制背景(这里省略背景的具体绘制)
    screen.fill(BLACK)

    # 绘制飞机
    screen.blit(player_image, player_rect)

    # 绘制敌人
    all_enemies.draw(screen)

    # 更新屏幕显示
    pygame.display.flip()

    # 控制帧率
    clock.tick(60)

pygame.quit()
sys.exit()

知识点的总结:


1. Pygame库的使用

初始化Pygame:使用`pygame.init()`来初始化Pygame库,以便使用其提供的功能。

设置屏幕尺寸:使用`pygame.display.set_mode()`来设置游戏的屏幕尺寸和模式。

定义颜色:Pygame使用RGB颜色模式,可以通过元组来定义颜色,如`(255, 0, 0)`表示红色。

加载图像:使用`pygame.image.load()`来加载图像文件,并将其转换为Pygame可以处理的格式。

绘制图像:使用`screen.blit()`方法将图像绘制到屏幕上。

更新屏幕显示:使用`pygame.display.flip()`来更新整个屏幕的显示内容。

2. 精灵(Sprite)的使用

创建精灵类:通过继承`pygame.sprite.Sprite`类来创建自定义的精灵类,如上述代码中的`Enemy`类。

初始化精灵:在精灵类的`__init__`方法中,设置精灵的图像、矩形区域(用于碰撞检测)和其他属性。

更新精灵:在精灵类的`update`方法中,定义精灵的行为,如移动、改变状态等。

创建精灵组:使用`pygame.sprite.Group()`来创建精灵组,可以方便地对多个精灵进行管理和操作。

绘制精灵组:使用精灵组的`draw`方法将组内的所有精灵绘制到屏幕上。

3. 事件处理

获取事件:使用`pygame.event.get()`来获取游戏中的所有事件。

处理事件:根据事件的类型(如`pygame.QUIT`、`pygame.KEYDOWN`等)来执行相应的操作,如退出游戏、处理按键输入等。

4. 按键输入处理

获取按键状态:使用`pygame.key.get_pressed()`来获取当前所有按键的状态。

处理按键输入:根据按键的状态来执行相应的操作,如移动飞机、发射子弹等。

5. 碰撞检测

矩形碰撞检测:使用精灵的矩形区域(`rect`属性)来进行简单的碰撞检测。可以通过比较两个矩形的位置关系来判断是否发生碰撞。

处理碰撞:如果检测到碰撞,可以执行相应的操作,如增加分数、移除敌人等。

6. 控制帧率

设置时钟:使用`pygame.time.Clock()`来创建一个时钟对象。

控制帧率:通过时钟对象的`tick`方法来控制游戏的帧率,以确保游戏的运行速度稳定。


 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部