Python和Pygame试图上下跳动矩形

2024-10-01 07:31:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在编写一个简单的平台游戏,用户控制一个正方形,并且必须到达窗口的另一边,而不与其他方块碰撞。我想其他4个方块上下跳动,所以我写了以下代码:

import pygame
import os
import sys

os.environ['SDL_VIDEO_CENTERED'] = "1"
pygame.init()

#Variables:
width = 600
height = width / 16 * 9

running = True

#Colors
PINK = (255, 79, 161)
BLACK = (0, 0, 0)
BLUE = (0, 0, 255)

clock = pygame.time.Clock()

#MainRectProperties
mainRectX = 0
mainRectY = height / 2 - 20
mainRectSpeed = 250

#RectOneProperties:
rectOneX = 150
rectOneY = 0

#RectTwoPropeties:
rectTwoX = 250
rectTwoY = height - 20

#RectThreeProperties:
rectThreeX = 350
rectThreeY = 0

#RectFourProperties:
rectFourX = 450
rectFourY = height - 20

#Window:
window = pygame.display.set_mode((width, height))
windowText = pygame.display.set_caption("Pixel Animation")

#Rectangles:
mainRect = pygame.draw.rect(window, PINK, (mainRectX, mainRectY, 20, 20), 0)
obstacleRect1 = pygame.draw.rect(window, BLUE, (rectOneX, rectOneY, 20, 20), 0)
obstacleRect2 = pygame.draw.rect(window, BLUE, (rectTwoX, rectTwoY, 20, 20,), 0)
obstacleRect3 = pygame.draw.rect(window, BLUE, (rectThreeX, rectThreeY, 20, 20), 0)
obstacleRect4 = pygame.draw.rect(window, BLUE, (rectFourX, rectFourY, 20, 20), 0)
pygame.display.flip()

#UpdateMainRectFunction
def updateMainRect(x, y):
    window.fill(BLACK)
    mainRect = pygame.draw.rect(window, PINK, (mainRectX, mainRectY, 20, 20), 0)
    pygame.display.flip()
    clock.tick(250)

#GameLoop
while running:
    goingDown = True
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    if rectOneY < height - 21 and goingDown:
        print "b"
        pygame.draw.rect(window, BLACK, (rectOneX, rectOneY, 20, 20), 0)
        rectOneY += 1
        obstacleRect1 = pygame.draw.rect(window, BLUE, (rectOneX, rectOneY, 20, 20), 0)
        pygame.display.flip()
        clock.tick(100)
        if rectOneY == height - 21:
            goingDown = False
        else:
            goingDown = True

    if not goingDown and rectOneY != 0:
        print "a"
        pygame.draw.rect(window, BLACK, (rectOneX, rectOneY, 20, 20), 0)
        rectOneY -= 1
        obstacleRect1 = pygame.draw.rect(window, BLUE, (rectOneX, rectOneY, 20, 20), 0)
        pygame.display.flip()
        clock.tick(100)
        goingDown = False
        print rectOneY < height - 21 and goingDown     


    keys = pygame.key.get_pressed()
    #MovingRectCommands
    if keys[pygame.K_UP]:
        mainRectY -= 1
        updateMainRect(mainRectX, mainRectY)

    if keys[pygame.K_DOWN]:
        mainRectY += 1
        updateMainRect(mainRectX, mainRectY)

    if keys[pygame.K_LEFT]:
        mainRectX -= 1
        updateMainRect(mainRectX, mainRectY)

    if keys[pygame.K_RIGHT]:
        mainRectX += 1
        updateMainRect(mainRectX, mainRectY)

基本上,矩形从屏幕顶部开始,然后成功地点击它的底部。它会像预期那样打印大量“b”到控制台。然后,矩形向上移动一个像素,程序会将一个“a”打印到控制台,但随后它又会下降,即使“如果不向下和直截了当!”!=0“表达式等于True,“if rectOneY<;height-21 and goingDown”表达式等于False。

我至少试着修了一个小时,我根本不明白怎么了,我可以用一些帮助。

我想让您指出我的代码有什么问题(只有我要问的是特定的问题,而不是xD之前的数百万个坏代码示例)。

谢谢。


Tags: rectifdisplaybluekeyswindowpygameheight
1条回答
网友
1楼 · 发布于 2024-10-01 07:31:19

while running循环的第一行是goingDown = True。这将在循环的每次迭代开始时将变量设置为true。您需要将goingDown = True行放在循环之前。在

应该是这样的:

#GameLoop
goingDown = True
while running:
    ...

相关问题 更多 >