Mohamed Dahmani
Mohamed Dahmani

Reputation: 13

Create a border in PyGame

I would like to know how to create a border around my screen to stop my player from getting off screen. Here's what I've done until now.

# Importing Libraries
import pygame
from pygame.locals import *
pygame.init()

# Variable Stockage
color = (0, 0, 0)
x = 385
y = 470
velocity = 12
background_color = (255, 255, 255)
clock = pygame.time.Clock()

# Screen
screen = pygame.display.set_mode((800, 500))
pygame.display.set_caption('Shooter')


# Game Loop
running = True
while running:

    # Setting to 60fps
    clock.tick(60)
    screen.fill(background_color)
    px, py = x, y

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Player
    player = pygame.draw.rect(screen, color, pygame.Rect(x, y, 30, 30))

    # Player Movement
    key_pressed_is = pygame.key.get_pressed()

    if key_pressed_is[K_LEFT]:
        x -= 8
    if key_pressed_is[K_RIGHT]:
        x += 8
    if key_pressed_is[K_UP]:
        y -= 8
    if key_pressed_is[K_DOWN]:
        y += 8

    pygame.display.update()

I tried this line of code but it didn't work

    # Barrier Around The Screen
barrierRect = pygame.Rect(0, 0, 800, 500)
if player.colliderect(barrierRect):
    x, y = px, py

I'm a bit knew so if you don't mind adding some tips to make my programm better, I would be thankful.

Upvotes: 1

Views: 538

Answers (1)

Rabbid76
Rabbid76

Reputation: 210909

Option 1: Test that the barrierRect does not contains() the player rectangle. You must set the player rectangle directly before using it with the current x and y coordinate:

player = pygame.Rect(x, y, 30, 30)
barrierRect = pygame.Rect(0, 0, 800, 500)
if not barrierRect.contains(player):
    x, y = px, py

Option 2: Use clamp_ip to move the player rectangle inside the barrier rectangle:

player = pygame.Rect(x, y, 30, 30)
barrierRect = pygame.Rect(0, 0, 800, 500)
player.clamp_ip(barrierRect)
x, y = player.topleft

Complete example:

import pygame
from pygame.locals import *
pygame.init()

# Variable Stockage
color = (0, 0, 0)
x = 385
y = 470
velocity = 12
background_color = (255, 255, 255)
clock = pygame.time.Clock()

# Screen
screen = pygame.display.set_mode((800, 500))
pygame.display.set_caption('Shooter')

# Game Loop
running = True
while running:

    # Setting to 60fps
    clock.tick(60)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Player Movement
    key_pressed_is = pygame.key.get_pressed()
    x += (key_pressed_is[K_RIGHT] - key_pressed_is[K_LEFT]) * 8
    y += (key_pressed_is[K_DOWN] - key_pressed_is[K_UP]) * 8

    # Player
    player = pygame.Rect(x, y, 30, 30)

    # Barrier Around The Screen
    barrierRect = pygame.Rect(0, 0, 800, 500)

    # clamp player in barrier
    player.clamp_ip(barrierRect)
    x, y = player.topleft

    screen.fill(background_color)
    player = pygame.draw.rect(screen, color, player)    
    pygame.display.update()

Upvotes: 3

Related Questions