【问题标题】:Score system based on a timer doesn't work in Pygame基于计时器的评分系统在 Pygame 中不起作用
【发布时间】:2022-06-25 16:20:29
【问题描述】:

所以,我和几个朋友正在为学校做一个 Python 项目,我们想要实现一个分数系统,分数每隔几秒就会变大。我们已经在网上搜索了可能的解决方案,但找不到任何适合我们的解决方案。

现在这是我们的代码:

import pgzrun
import pygame
import time
import random

TITLE = "___Title___"
WIDTH = 800
HEIGHT = 1180
CENTRE_X = WIDTH / 2
CENTRE_Y = HEIGHT / 2
game_over = False
finalised = False
xpos_list = [225,344,463,582]
autofarbe_list = ["carblau","carrot","cargruen"]

class Vehicle(Actor):
    def __init__(self,name):
        super().__init__(name)
        self.vy = random.randint(8,10)
        self.lane = random.randint(0,len(xpos_list)-1)
        self.x = xpos_list[self.lane]
        self.y = -50
        self.vmax = 10
    def move(self):
        self.y += self.vy
    def farbwechsel(self):
        self.image = random.choice(autofarbe_list)
    def update(self):
        self.draw()
    def accelerate(self):
        self.vy += 1
        if self.vy >= self.vmax:
            self.vy = self.vmax

class Player(Vehicle):
    def __init__(self, name):
        super().__init__(name)
        self.lane = random.randint(0,len(xpos_list)-1)
        self.x = xpos_list[self.lane]
    def timer():
        global score, seconds
        score = 0
        seconds = 0
        start_ticks = pygame.time.get_ticks()
        while not game_over:
            seconds = (pygame.time.get_ticks()-start_ticks)/1000
            if seconds > 10:
                score = score + 1
                seconds = 0

class Car(Vehicle):
    def __init__(self,name):
        super().__init__(name)

player = Player("player")
player.pos = 338, 900

cars = []
for i in range(4):
    cars.append(Car(random.choice(autofarbe_list)))

def update():
    player.update()
    player.timer()
    for car in cars:
        car.move()
    if not game_over:
        if keyboard.left and player.x > 220:
            player.x -= 7
        elif keyboard.right and player.x < 582:
            player.x += 7
        for car in cars:
            car.draw()
            if car.y > 1300:
                car.y = -50
                car.farbwechsel()
                car.x = random.choice(xpos_list)

def draw():
    screen.clear()
    screen.blit("strasselang", (0, 0))
    for car in cars:
        car.draw()
    for m in cars:
        player.draw()
    screen.draw.text(
        "Progress: " +
        str(score) + " Punkte",
        topleft=(10, 10), color="black")

pgzrun.go()

如何解决这个问题?

【问题讨论】:

    标签: python pygame pygame-clock pygame-tick


    【解决方案1】:

    我要做的是,定义一个变量来计算事件之间的刻度数。在您的 while 循环中的每一帧,您将检查变量是否等于您想要的任何值,并添加分数,否则您将添加 x 到该变量(例如,如果我想每秒添加一个,我是运行 60 FPS,我会每帧添加 1/60)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多