Python Forum
Trying to make boundries for the pygame - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Game Development (https://python-forum.io/forum-11.html)
+--- Thread: Trying to make boundries for the pygame (/thread-25111.html)



Trying to make boundries for the pygame - bluewing101 - Mar-19-2020

Guys I have a problem is doing the boundaries of my pygame
I am trying to get the character not go above the pygame window

The code in the bottom is my game and all the way at the bottom is where I am trying to do the boundaries I got the sides but I can't manage to get the top and bottom.

import pygame, sys
from pygame.locals import *

import random 

pygame.init()
width, height = 640,480
hbox = 20
vbox = 20
controls =[False, False, False, False]
playerpos =[100,100]
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)


screen=pygame.display.set_mode((width, height))
rect = pygame.Rect(300, 220, hbox, vbox)
player = pygame.image.load("resources/images/pac.png")
grass = pygame.image.load("resources/images/grass.png")
coin = pygame.image.load("resources/images/coin.png")
player = pygame.transform.scale(player, (30,30))
coin = pygame.transform.scale(coin, (20,20))    
l = random.randint(0,480)
k = random.randint(0,640)
n = random.randint(480,640)
walls = (
    pygame.Rect(0, 0, 640, 10),
    pygame.Rect(0, 0, 10, 480),
    pygame.Rect(630, 0, 10, 480),
    pygame.Rect(0, 470, 640, 10),
    )
bar = (
    pygame.Rect(230, 170, 160, 10),
    pygame.Rect(230, 170, 10, 140),
    pygame.Rect(230, 310, 160, 10),
    pygame.Rect(390, 170, 10, 150),
    )

while 1:
    
    screen.fill(0)
    moved = None
    for x in range(width//grass.get_width()+1):
        for y in range(height//grass.get_height()+1):
            screen.blit(grass,(x*100,y*100))
    screen.blit(player, playerpos)

    screen.blit(coin, (l,k))
    
    
    
    for wall in walls:
        pygame.draw.rect(screen, pygame.Color("red"), wall)
    for bars in bar:
        pygame.draw.rect(screen, pygame.Color("red"), bars)
    pygame.display.flip()
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                controls[0]=True
            elif event.key==K_a:
                controls[1]=True
            elif event.key==K_s:
                controls[2]=True
            elif event.key==K_d:
                controls[3]=True
        if event.type == pygame.KEYUP:
            if event.key==pygame.K_w:
                controls[0]=False
            elif event.key==pygame.K_a:
                controls[1]=False
            elif event.key==pygame.K_s:
                controls[2]=False
            elif event.key==pygame.K_d:
                controls[3]=False
    if controls[0]:
        playerpos[1]-=2
        print(playerpos[0],",",playerpos[1])
        #sleep(1)
    elif controls[2]:
        playerpos[1]+=2
        print(playerpos[0],",",playerpos[1])
    if controls[1]:
        playerpos[0]-=2
        print(playerpos[0],",",playerpos[1])
    elif controls[3]:
        playerpos[0]+=2
        print(playerpos[0],",",playerpos[1])

    if playerpos>=[600,0]:
        controls[3] = False
    elif playerpos<=[10,0]:
        controls[1] = False
    elif playerpos<=[0,-440]:
        controls[2] = False

    
    
        


        if event.type==pygame.QUIT:
            pygame.quit() 
            exit(0) 



RE: Trying to make boundries for the pygame - SheeppOSU - Mar-22-2020

I'd rather not read through all of this code so I'll tell you this.
1. This code is really sloppy, there are lots of tips on making a game with pygame in the pygame tutorials here on this forum, I'd recommend you to go check those out.
2. To keep a player from going outside the screen, it depends on if they're left, right, up, or down, but for up, just check if the second value of they're rect, y-value, is less than 0, if so then set it back to 0. This creates the effect that they can't move beyond the walls of the pygame window.


RE: Trying to make boundries for the pygame - Windspar - Mar-23-2020

Using pygame rect will make this simple. Create area rect and player rect. Move player then clamp_ip player rect.
player.rect.clamp_ip(area) Now the player can't move beyond the window.