1

So I've written my border code under #Border but I don't know whats wrong with it. When I run the program the icon collides with the border only on when it reaches zero for both the x and y axis not when it reaches the maximum for both x and y-64 pixels. Also I was wondering how would you rotate an image based off of user key input.

import pygame
    
pygame.init()
screen = pygame.display.set_mode((900, 500))
# Game Window caption
pygame.display.set_caption("Snake Time")

# Game Window Icon

icon = pygame.image.load('snake.png')
pygame.display.set_icon(icon)

# Snake Player Image
Snake_Player = pygame.image.load('Snake Head.png')
PlayerX = 420
PlayerY = 435
PlayerX_Change = 0
PlayerY_Change = 0


def player(x, y):
    screen.blit(Snake_Player, (x, y))


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        # Player Movement
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                PlayerX_Change = -0.7
                PlayerY_Change = 0
            if event.key == pygame.K_RIGHT:
                PlayerX_Change = 0.7
                PlayerY_Change = 0
            if event.key == pygame.K_UP:
                PlayerY_Change = -0.7
                PlayerX_Change = 0
            if event.key == pygame.K_DOWN:
                PlayerY_Change = 0.7
                PlayerX_Change = 0
    #Border
    if PlayerX <= 0:
        PlayerX = 0
    elif PlayerX >= 836:
        PlayerX = 0
    elif PlayerY <= 0:
        PlayerY = 0
    elif PlayerY >= 500:
        PlayerY = 0
    PlayerX += PlayerX_Change
    PlayerY += PlayerY_Change
    # Game Window Color
    screen.fill((30, 90, 0))
    player(PlayerX, PlayerY)
    pygame.display.update()
Rabbid76
  • 202,892
  • 27
  • 131
  • 174
Wasi_
  • 39
  • 3

2 Answers2

1

I recommend to use pygame.key.get_pressed() for the movement of the player, rather than the KEYDOWN event.
Furthermore, use a pygame.Rect to evaluate the collisions with the border. Rectangle with the size of the pygame.Surface can be get by the get_rect() method:

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    
    # Player Movement
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        PlayerX -= 0.7
    if keys[pygame.K_RIGHT]:
        PlayerX += 0.7
    if keys[pygame.K_UP]:
        PlayerY -= 0.7
    if keys[pygame.K_DOWN]:
        PlayerY += 0.7
    
    #Border
    player_rect = Snake_Player.get_rect(topleft = (PlayerX, PlayerY))
    if player_rect.left < 0:
        PlayerX = 0
    elif player_rect.right > screen.get_width():
        PlayerX = screen.get_width() - player_rect.width
    if player_rect.top < 0:
        PlayerY = 0
    elif player_rect.bottom > screen.get_height():
        PlayerY = screen.get_height() - player_rect.height
    
    # Game Window Color
    screen.fill((30, 90, 0))
    player(PlayerX, PlayerY)
    pygame.display.update()
Rabbid76
  • 202,892
  • 27
  • 131
  • 174
0

try this and continue with the other keys:

if keys[pygame.K_LEFT] and PlayerX - 0.7 > 0:
    PlayerX - 0.7