Обновления координат прямоугольников, не зарегистрированных в Pygame? - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь научить себя программировать в pygame и в настоящее время делаю простую игру для домашнего проекта.Я написал код, думая, что он должен обновлять координаты прямоугольника игрока на каждой итерации игрового цикла, основываясь на входах игрока.Тем не менее, координаты прямоугольника сбрасываются, а не изменяются.Любая помощь будет оценена.

import pygame, sys

from pygame.locals import*
from sys import exit

pygame.init()

##Set up the colours
WHITE =(255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
ORANGE = (255, 165, 0)
PINK = (255, 192, 203)
YELLOW = (255, 255, 0)
KHAKI = (189, 183, 107)
MAGENTA = (255, 0, 255)

##Set up the window
WINDOWHEIGHT = 500
WINDOWWIDTH = 1000
screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Tower')


##Set up level variable    
level = 1

##Run game loop
while True:
    ##Check for quit event
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); sys.exit()


    ##Check for level
    if level == 1:
        screen.fill(WHITE)
        MOVESPEED = 10

    ##Enemy rectangles
        e1 = pygame.Rect(200, 0, 50, 100)
        e2 = pygame.Rect(250, 50, 50, 100) 
        e3 = pygame.Rect(300, 100, 50, 100)
        e4 = pygame.Rect(450, 250, 50, 100)
        e5 = pygame.Rect(500, 300, 50, 100)
        e6 = pygame.Rect(550, 350, 50, 100)

        enemies = [e1, e2, e3, e4, e5, e6]

    ##Draw enemy rectangles
        pygame.draw.rect(screen, RED, e1, 0)
        pygame.draw.rect(screen, RED, e2, 0)
        pygame.draw.rect(screen, RED, e3, 0)
        pygame.draw.rect(screen, RED, e4, 0)
        pygame.draw.rect(screen, RED, e5, 0)
        pygame.draw.rect(screen, RED, e6, 0)

    ##Player rectangle
        player = pygame.Rect(25, 25, 50, 50)

    ##Change keyboard variables

        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == K_a:
                moveRight = False
                moveLeft = True
            if event.key == K_RIGHT or event.key == K_d:
                moveLeft = False
                moveRight = True
            if event.key == K_UP or event.key == K_w:
                moveDown = False
                moveUp = True
            if event.key == K_DOWN or event.key == K_s:
                moveUp = False
                moveDown = True
        if event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            if event.key == K_LEFT or event.key == K_a:
                moveLeft = False
            if event.key == K_RIGHT or event.key == K_d:
                moveRight = False
            if event.key == K_UP or event.key == K_w:
                moveUp = False
            if event.key == K_DOWN or event.key == K_s:
                moveDown = False    
    ##Move the player with the keyboard

        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == K_a:
                player.left -= MOVESPEED
            if event.key == K_DOWN or event.key == K_s:
                player.top += MOVESPEED
            if event.key == K_RIGHT or event.key == K_d:
                player.left += MOVESPEED
            if event.key == K_UP or event.key == K_w:
                player.top -= MOVESPEED

    ##Check if player is in the window
        if player.top < 0:
    #The player has moved past the top
            player.top += 1

        if player.bottom > WINDOWHEIGHT:
    #The player has moved past the bottom
            player.top -= 1

        if player.left < 0:
    #The player has moved past the left side
            player.left += 1

        if player.right > WINDOWWIDTH:
    #The player has moved past the right side
            player.left -= 1

    #Draw player onto the screen
        pygame.draw.rect(screen, GREEN, player)
        pygame.display.flip()

1 Ответ

0 голосов
/ 28 октября 2018

Вы определяете врагов и игрока на каждой итерации цикла снова и снова.Вы должны определить их один раз.Затем обновите и нарисуйте их в цикле.Это решение вашей проблемы.

Я попробовал ваш код с некоторыми изменениями.Для простоты я удалил части, которые вы до сих пор не использовали, и объединил некоторые условия.

Вот мой код:

import pygame, sys

from pygame.locals import *
from sys import exit


#SET UP
pygame.init()

WHITE =(255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

WINDOWHEIGHT = 500
WINDOWWIDTH = 1000
MOVESPEED = 10

e1 = pygame.Rect(200, 0, 50, 100)
e2 = pygame.Rect(250, 50, 50, 100) 
e3 = pygame.Rect(300, 100, 50, 100)
e4 = pygame.Rect(450, 250, 50, 100)
e5 = pygame.Rect(500, 300, 50, 100)
e6 = pygame.Rect(550, 350, 50, 100)

player = pygame.Rect(25, 25, 50, 50)

screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Tower')

##GAME LOOP
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()

            if (event.key == K_LEFT or event.key == K_a) and player.left > MOVESPEED:
                player.left -= MOVESPEED
                player.right -= MOVESPEED

            if (event.key == K_RIGHT or event.key == K_d) and player.right < WINDOWWIDTH - MOVESPEED:
                player.left += MOVESPEED
                player.right += MOVESPEED

            if (event.key == K_DOWN or event.key == K_s) and player.bottom < WINDOWHEIGHT - MOVESPEED:
                player.top += MOVESPEED
                player.bottom += MOVESPEED

            if (event.key == K_UP or event.key == K_w) and player.top > MOVESPEED:
                player.top -= MOVESPEED
                player.bottom -= MOVESPEED

    #DRAW SCREEN AT EACH ITERATION
    screen.fill(WHITE)

    pygame.draw.rect(screen, RED, e1, 0)
    pygame.draw.rect(screen, RED, e2, 0)
    pygame.draw.rect(screen, RED, e3, 0)
    pygame.draw.rect(screen, RED, e4, 0)
    pygame.draw.rect(screen, RED, e5, 0)
    pygame.draw.rect(screen, RED, e6, 0)

    pygame.draw.rect(screen, GREEN, player)

    pygame.display.flip()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...