2014-01-27 6 views
0

Я кодировал простую платформенную игру, где пользователь управляет квадратом и должен попасть на другую сторону окна, не сталкиваясь с другими квадратами. Я хочу, чтобы остальные 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).

Заранее спасибо.

ответ

1

Первая строка вашего цикла while running: goingDown = True. Это устанавливает переменную goingDown в true в начале каждой итерации цикла. Перед циклом необходимо поставить линию goingDown = True.

Он должен выглядеть следующим образом:

#GameLoop 
goingDown = True 
while running: 
    ... 
+0

Спасибо так много! Я чувствую себя таким глупым прямо сейчас, такое простое исправление = [ – user3124364

+0

@ user3124364 Рад помочь! Не забудьте принять ответ, если вы сочтете это полезным. – bitoffdev

 Смежные вопросы

  • Нет связанных вопросов^_^