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

时间:2017-11-14 10:12:59

标签: 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)

1 个答案:

答案 0 :(得分:0)

你可以使用_thread。

 blocitoff.controller('HomeCtrl', ['$scope', '$firebaseArray', '$firebaseObject', function HomCtrl ($scope, $firebaseObject, $firebaseArray) {                          
    alert("hello");
    var ref = firebase.database().ref();
    var list = $firebaseArray(ref);
    $scope.data = $firebaseObject(ref);
    $scope.hello = "no way bill it worked!";                                
}]);