Я кодировал простую платформенную игру, где пользователь управляет квадратом и должен попасть на другую сторону окна, не сталкиваясь с другими квадратами. Я хочу, чтобы остальные 4 квадрата подпрыгивать вверх и вниз, так что я написал этот код:Python и Pygame - Пытаюсь подпрыгнуть прямоугольником вверх и вниз
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)
В основном прямоугольник начинается в верхней части экрана, а затем sucessfuly попадает в нижнюю часть его. Он печатает много «б» на консоли, как и ожидалось. Затем прямоугольник перемещается на один пиксель, программа печатает один «a» на консоли, но затем он снова опускается, хотя выражение «if not down down» и «rectOneY! = 0» равно True, а «if rectOneY < height - 21 and goingDown "выражение равно False.
Я пытался исправить это хотя бы на час, и я просто не могу понять, что случилось, и я мог бы использовать какую-то помощь.
Я хочу, чтобы вы указали, в чем проблема с моим кодом (только конкретный вопрос, который я задаю, а не миллионы примеров неправильного кода перед ним xD).
Заранее спасибо.
Спасибо так много! Я чувствую себя таким глупым прямо сейчас, такое простое исправление = [ – user3124364
@ user3124364 Рад помочь! Не забудьте принять ответ, если вы сочтете это полезным. – bitoffdev