返回

pygame游戏开发框架(8):游戏逻辑

前端


1. 敌机类

敌机类用于定义敌机的属性和方法,包括敌机的坐标、速度、血量等属性,以及移动、射击等方法。

class Enemy:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 1
        self.health = 100

    def move(self):
        self.y += self.speed

    def shoot(self):
        bullet = Bullet(self.x, self.y)
        bullets.add(bullet)

2. 添加敌机

在游戏中,需要不断添加敌机以保持游戏难度和趣味性。可以设置一个定时器,每隔一段时间添加一个敌机。

def add_enemy():
    enemy = Enemy(random.randint(0, SCREEN_WIDTH), 0)
    enemies.add(enemy)

# 设置定时器,每隔1000毫秒添加一个敌机
timer = pygame.time.Clock()
timer.tick(1000)

3. 绘制敌机

在每一帧中,需要将敌机绘制到屏幕上。

def draw_enemies():
    for enemy in enemies:
        screen.blit(enemy.image, (enemy.x, enemy.y))

4. 子弹类

子弹类用于定义子弹的属性和方法,包括子弹的坐标、速度、伤害等属性,以及移动等方法。

class Bullet:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = 5

    def move(self):
        self.y -= self.speed

5. 射击

当玩家按下射击键时,需要从玩家飞机发射子弹。

def shoot():
    bullet = Bullet(player.x, player.y)
    bullets.add(bullet)

6. 敌机爆炸

当敌机被击中时,需要播放敌机爆炸的动画并增加玩家的分数。

def enemy_explosion(enemy):
    # 播放敌机爆炸的动画
    explosion = pygame.image.load('explosion.png')
    screen.blit(explosion, (enemy.x, enemy.y))

    # 增加玩家的分数
    score += 100

7. 游戏记分

在游戏中,需要显示玩家的分数。

def draw_score():
    score_text = 'Score: ' + str(score)
    score_font = pygame.font.SysFont('Arial', 30)
    score_surface = score_font.render(score_text, True, (255, 255, 255))
    screen.blit(score_surface, (10, 10))

8. 游戏逻辑

游戏逻辑包括敌机的移动、射击、爆炸、玩家的分数等内容。

while True:
    # 处理事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        # 玩家射击
        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:
            shoot()

    # 更新游戏状态
    add_enemy()
    enemies.update()
    bullets.update()

    # 检测敌机与子弹的碰撞
    for bullet in bullets:
        for enemy in enemies:
            if bullet.colliderect(enemy):
                enemy_explosion(enemy)
                bullets.remove(bullet)

    # 检测敌机与玩家飞机的碰撞
    for enemy in enemies:
        if enemy.colliderect(player):
            # 玩家死亡
            game_over()

    # 绘制游戏画面
    screen.fill((0, 0, 0))
    draw_background()
    draw_player()
    draw_enemies()
    draw_bullets()
    draw_score()

    # 更新屏幕
    pygame.display.update()