python - 在 Python 中运行游戏循环时多线程显示游戏分数?

标签 python multithreading loops pygame subprocess

我希望根据游戏中耗时得分。为此,我希望同时运行两个循环。游戏循环和得分循环,每 1.5 秒将分数加 1。当我运行程序时,分数没有出现。我是否正确使用多线程?这是最好的方法吗?为简单起见,我只发布了相关代码。谢谢!

def text_objects(text, font):
    textSurface = font.render(text, True, black)
    return textSurface, textSurface.get_rect()

def displayScore(text):
    while(True):
        textStyle = pygame.font.Font('freesansbold.ttf', 25)
        # pop up window defining window and textRect to align text properly
        textWindow, textRect = text_objects(text, textStyle)
        textRect.center = ((display_width/2)), ((display_height/2))
        gameDisplay.blit(textWindow, textRect)
        pygame.display.update()
        time.sleep(1.5)
        text = int(text)
        text +=1
        text = str(text)

def gameStart():

    x_change = 0
    y_change = 0
    x = (display_width * 0.39)
    y = (display_height * 0.7)
    car_width = 200
    x_brick = (display_width * random.uniform(.05, .95))
    y_brick = display_height - 925

    # exception for the game crashing and the game loop
    gameExit = False

    while not gameExit:

    # capturing user actions
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

        # key-down events for car movements
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x_change = -5
            elif event.key == pygame.K_RIGHT:
                x_change = 5
            elif event.key == pygame.K_UP:
                y_change = -5
            elif event.key == pygame.K_DOWN:
                y_change = 5

        # cancelling out key-up events
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                x_change = 0
            if event.key == pygame.K_UP or event.key == pygame.K_DOWN:
                y_change = 0


    # crash conditions
    if x > display_width - car_width or x < 0:
        crash()
    if y > display_height - 175 or y < 0 - 10:
        crash()


    # updating car movements
    x += x_change
    y += y_change

    # generating display
    gameDisplay.fill(white)
    car(x, y)
    brick(x_brick, y_brick)

    # moving the brick
    y_brick += brick_speed

    # updates for parameter given or entire surface
    pygame.display.update()

    # frames per second, the more frames per second the faster and smoother things move, taxing on processing speed
    clock.tick(60)


t1 = Thread(target=gameStart())
t2 = Thread(target=displayScore('0'))
t1.start()
t2.start()

编辑:结束了这个..

import time

score = 0

def timer(oldsec):
    currentsec = time.time()
    if abs(currentsec - oldsec > 3):
        return True
    else:
        False


oldsec = time.time() # what time is it now

while True:
    if timer(oldsec) == True:
        score += 1
        oldsec = time.time()
        print (score)

最佳答案

你可以使用 _thread。

from _thread import *

count = 0

def Your_other_loop():
    global count
    while True:
        #Do loop stuff



def loop():
    global count
    while True:
        print(count)

start_new_thread(Your_other_loop,())
loop()

关于python - 在 Python 中运行游戏循环时多线程显示游戏分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47283008/

相关文章:

python - PySpark:使用过滤函数后取列的平均值

python - 使用 django 正确编码 JSON Web 服务

Python 处理系统关闭

java - 重复 SwingWorker

python - Python 单元测试的增量代码覆盖率?

c++ - 进程间对象传递

python - python中线程数的最大限制

bash - linux bash 中 python zip() 函数的等价物是什么?

c - Floyd-Warshall 在 C 中使用负循环

c - 扫描验证