为什么我的方块(蛇)只能对角线移动?

问题描述 投票:-3回答:3

我正在编写2个蛇车的代码,我的第一个蛇车,使用WASD键盘格式,工作完美。但是我的第二个蛇车,使用的是方向键,只能对角线移动。我希望两个蛇车都能向各个方向移动(上、下、左、右、对角线),但是现在,第二个蛇车只能对角线移动。

    #initialize variables for player 1
    car1x = 250
    car1y = 300
    car1width = 20
    car1height = 20
    car1dx = 0
    car1dy = 0
    speed = 3

    #initialize variables for player 2
    car2x = 500
    car2y = 300
    car2width = 20
    car2height = 20
    car2dx = 0
    car2dy = 0
    speed = 3

    screen.fill(WHITE)

    # set main loop to True so it will run
    main = True

    # main loop
    while main:
        for event in pygame.event.get(): # check for any events (i.e key press, mouse click etc.)
            if event.type ==pygame.QUIT: # check to see if it was "x" at top right of screen
                main = False         # set the "main" variable to False to exit while loop
            if event.type ==pygame.KEYDOWN:
                if event.key == pygame.K_w:
                    car1dx = 0
                    car1dy = -speed
                elif event.key == pygame.K_s:
                    car1dx = 0
                    car1dy = speed
                elif event.key == pygame.K_a:     
                    car1dx = -speed                     
                    car1dy = 0                          
                elif event.key == pygame.K_d:
                    car1dx = speed
                    car1dy = 0


                if event.key == pygame.K_UP:
                    car2dx = 0
                    car2dy = -speed
                elif event.key == pygame.K_DOWN:
                    car2dx = 0
                    car2dy = speed
                elif event.key == pygame.K_LEFT:     
                    car2dx = -speed                     
                    car2dy = 0                          
                elif event.key == pygame.K_RIGHT:
                    car2dx = speed
                    car2dy = 0

                elif event.key == pygame.K_q:
                    pygame.quit()

            if event.type == pygame.KEYUP:
                if event.key in (pygame.K_w, pygame.K_s):
                    car1dx = 0
                elif event.key in (pygame.K_a, pygame.K_d):
                    car1dy = 0

                if event.key in (pygame.K_UP, pygame.K_DOWN):
                    car1dx = 0
                elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
                    car1dy = 0

# move the x and y positions of the player
            oldcar1x = car1x
            oldcar1y = car1y

            oldcar2x = car2x
            oldcar2y = car2y

            car1x = car1x + car1dx
            car1y = car1y + car1dy

            car2x = car2x + car2dx
            car2y = car2y + car2dx

            if car1x >= screenwidth:
                car1x = oldcar1x
                car1y = oldcar1y

            if car2x >= screenwidth:
                car2x = oldcar2x
                car2y = oldcar2y

          ``` 

python pygame keydown keyup
3个回答
1
投票

我想这是因为向上键的检测是...。一条ifelif和ifelif不一样。按键. 也可能是 因为那 你没有指定第二辆车的上锁检测功能。. 我不知道,只是一个建议。我不能评论。


1
投票

在你最后的if语句中,看起来应该重置Car2的dxdy的KEYUP事件正在设置Car1的dxdy值。这可能是你的错误的根源。


1
投票

这一行有一个印刷错误。

        car2y = car2y + car2dx

应该是:

        car2y = car2y + car2dy

注意最后一个字符被改成了 yx.

虽然使用 += 操作符,并将其写成。

        car2y += car2dy

你在这部分还有其他错误

    if event.type == pygame.KEYUP:
        if event.key in (pygame.K_w, pygame.K_s):
            car1dx = 0
        elif event.key in (pygame.K_a, pygame.K_d):
            car1dy = 0

        if event.key in (pygame.K_UP, pygame.K_DOWN):
            car1dx = 0
        elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
            car1dy = 0

你重置了错误的变量 你重置了dy而不是dx,反之亦然,而且在方向键部分你忘了把它改成car2。像这样。

    if event.type == pygame.KEYUP:
        if event.key in (pygame.K_w, pygame.K_s):
            car1dy = 0
        elif event.key in (pygame.K_a, pygame.K_d):
            car1dx = 0

        elif event.key in (pygame.K_UP, pygame.K_DOWN):
            car2dy = 0
        elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
            car2dx = 0

注意: 在上面的部分,我还把第二个变量 if 到一个 elif. 这不会影响代码的正确性,只是在上面已经匹配的情况下,避免了不必要的if检查。


0
投票

这里有一个错误。

            if event.type == pygame.KEYUP:
            if event.key in (pygame.K_w, pygame.K_s):
                car1dx = 0
            elif event.key in (pygame.K_a, pygame.K_d):
                car1dy = 0

            if event.key in (pygame.K_UP, pygame.K_DOWN):
                car1dx = 0
            elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
                car1dy = 0

你用的是car1dx和car1dy,而应该是car2dx和car2dy。

            if event.type == pygame.KEYUP:
            if event.key in (pygame.K_w, pygame.K_s):
                car1dx = 0
            elif event.key in (pygame.K_a, pygame.K_d):
                car1dy = 0

            if event.key in (pygame.K_UP, pygame.K_DOWN):
                car2dx = 0
            elif event.key in (pygame.K_LEFT, pygame.K_RIGHT):
                car2dy = 0

因为方向键是2号车的

你也应该改变这一行。

car2y = car2y + car2dx

这句话应该改成:

car2y += car2dy
© www.soinside.com 2019 - 2024. All rights reserved.