求大佬们帮个忙

为什么set_timer方法能打印数字但调用不了函数,请帮忙解答下,谢谢!

import time

import pygame
import random
import math

# 初始化
pygame.init()
screen = pygame.display.set_mode((500, 666))
pygame.display.set_caption("飞机大战2")
icon = pygame.image.load("./resource/ufo.png")
pygame.display.set_icon(icon)
bgimg = pygame.image.load("./resource/bg.jpeg")
timer_event = pygame.USEREVENT + 1
pygame.time.set_timer(timer_event, 5000)

# 背景音乐
pygame.mixer.music.load("./resource/bg.wav")
pygame.mixer.music.play(-1)

# 射中音效
bao_sound = pygame.mixer.Sound("./resource/exp.wav")

# 子弹音效
shout_sound = pygame.mixer.Sound("./resource/laser.wav")

# 飞机
playerimg = pygame.image.load("./resource/雷霆.png")
playerx = 250
playery = 550
playerStep = 0

# 分数
score = 0
font = pygame.font.Font("freesansbold.ttf", 32)


def show_score():
    text = f"score:    {score}"
    score_render = font.render(text, True, (0, 0, 255))
    screen.blit(score_render, (10, 10))


# 游戏结束
is_over = False
over_font = pygame.font.Font("freesansbold.ttf", 40)


def check_is_over():
    if is_over:
        text = "GAME OVER"
        render = over_font.render(text, True, (255, 0, 0))
        screen.blit(render, (145, 300))


class Enemy:

    def __init__(self):
        self.img = pygame.image.load("./resource/enemy.png")
        self.x = 100
        self.y = 0
        self.rect = self.img.get_rect()
        self.stepz = 0.1
        self.step = self.stepz / 2

    def show(self):
        screen.blit(self.img, (self.x, self.y))
        pygame.display.update()


enemy_group = pygame.sprite.Group()
enemy = Enemy()
enemy_group.add()


# enemies = []
# for i in range(number_of_enemies):
#     enemies.append(Enemy())


def distance(bx, by, ex, ey):
    a = bx - ex
    b = by - ey
    return math.sqrt(a * a + b * b)


class Bullet:
    def __init__(self):
        self.img = pygame.image.load("./resource/bullet.png")
        self.x = playerx + 16
        self.y = playery + 10
        self.step = 10

    def hit(self):
        global score
        # for e in enemies:
        # if distance(self.x, self.y, e.x, e.y) < 50:
        # 子弹命中
        pygame.sprite.groupcollide(bullet_group, enemy_group, True, True)
        bao_sound.play()
        bullets.remove(self)
        score += 1
        print(score)


bullet_group = pygame.sprite.Group()
bullet = Bullet()
bullet_group.add()

bullets = []


def show_bullets():
    bullets_to_remove = []
    for b in bullets:
        screen.blit(b.img, (b.x, b.y))
        b.hit()
        b.y -= b.step
        if b.y < 0:
            bullets_to_remove.append(b)
    for b in bullets_to_remove:
        bullets.remove(b)


def show_enemy():
    Enemy.show(Enemy())
    pygame.display.update()


def move_player():
    global playerx
    playerx += playerStep
    # 防止飞机出界
    if playerx > 404:
        playerx = 404
    if playerx < 0:
        playerx = 0


# 游戏主循环
running = True
while running:
    screen.blit(bgimg, (0, 0))
    show_score()
    for event in pygame.event.get():
        if event.type == timer_event:
            print(1)
            show_enemy()
        if event.type == pygame.QUIT:
            running = False
        # 控制飞机移动
        keys_pressed = pygame.key.get_pressed()
        if keys_pressed[pygame.K_RIGHT]:
            playerStep = 2
        elif keys_pressed[pygame.K_LEFT]:
            playerStep = -2
        else:
            playerStep = 0
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            # 其他事件处理逻辑
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                print("发射子弹")
                # 创建子弹
                b = Bullet()
                bullets.append(b)
                shout_sound.play()

    screen.blit(playerimg, (playerx, playery))
    move_player()
    show_bullets()
    check_is_over()
    pygame.display.update()
讨论数量: 1

授人以鱼不如授人以渔,你知道 openai 的 Code Interpreter 吗?

8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!