Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] i need help pls
#1
hi, im trying to implement a item colection sistem on my game but i cant understand why is not workin, the items are suposed to disapear wen you touch them and spawn the next one but i cant make it work, can anybody help pls?heres my code
pygame.init()
 
 
screen = pygame.display.set_mode((screen_width, screen_height))


clock = pygame.time.Clock()
level = Level(level_map, screen)
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
    screen.fill((0,0,0))
    screen.blit(background,(5,0))
    level.run()
    pygame.display.update()
 
    clock.tick(60)
    
level_map = [
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
    "X                  XXXXXX                      X",
    "X                  XXXXXX                      X",
    "X                  XXXXXX                      X",
    "X                  XXXXXX                      X",
    "X                  XXXXXX                      X",
    "XXXXXXXXXXX                                    X",
    "X         X                                 F  X",
    "X         X                        XXXXXXXXXXXXX",
    "X         X                        XXXXXXXXXXXXX",
    "X                                              X",
    "X                XXXXXXXXXXXX                  X",
    "X                                              X",
    "X                                       XXXXXXXX",
    "X                                       XXXXXXXX",
    "X  M       P                            XXXXXXXX",
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
]
 
tile_size = 40
screen_width =850
screen_height = len(level_map) * tile_size

class Tile(pygame.sprite.Sprite):
    def __init__(self, pos, size):
        super().__init__()
        self.image = pygame.Surface((size, size))
        self.image.fill((35,35,35))
        self.rect = self.image.get_rect(topleft=pos)
 
    def update(self, x_shift):
        self.rect.x += x_shift

class Flor(pygame.sprite.Sprite):
    def __init__(self, pos, size):
        super().__init__()
        self.image = pygame.Surface((size, size))
        self.image.fill('yellow')
        self.rect = self.image.get_rect(topleft=pos)
 
    def update(self, x_shift):
        self.rect.x += x_shift

class Mesa(pygame.sprite.Sprite):
    def __init__(self, pos, size):
        super().__init__()
        self.image = pygame.Surface((size, size))
        self.image.fill('brown')
        self.rect = self.image.get_rect(topleft=pos)
 
    def update(self, x_shift):
        self.rect.x += x_shift

class Player(pygame.sprite.Sprite):
    def __init__(self, pos):
        super().__init__()
        self.image = pygame.Surface((32, 64))
        self.image.fill("red")
        self.rect = self.image.get_rect(topleft=pos)
        # player movment
        self.direction = pygame.math.Vector2(0, 0)
        self.speed = 25
        self.gravity = 0.8
        self.jump_speed = -18
        self.jumping = False
 
    def update(self):
        keys = pygame.key.get_pressed()
        if keys[pygame.K_LEFT]:
            self.direction.x = -1
        elif keys[pygame.K_RIGHT]:
            self.direction.x = 1
        else:
            self.direction.x = 0
 
        if (keys[pygame.K_UP] or keys[pygame.K_SPACE]) and not self.jumping:
            self.direction.y = self.jump_speed
            self.jumping = True
            
 
    def move_y(self):
        self.direction.y += self.gravity
        self.rect.y += self.direction.y
 
    def move_x(self):
        self.rect.x += self.direction.x * self.speed

COLECTED_ITEMS = 0

class Level:
    
    def __init__(self, level_data, surface):
        # level setup
        self.display_surface = surface
        self.setup_level(level_data)
        self.world_shift = 0
 
    def setup_level(self, layout):
        self.tiles = pygame.sprite.Group()
        self.player = pygame.sprite.GroupSingle()
 
        for row_index, row in enumerate(layout):
            for col_index, cell in enumerate(row):
                x = col_index * tile_size
                y = row_index * tile_size
                if cell == "X":
                    tile = Tile((x, y), tile_size)
                    self.tiles.add(tile)
                if cell == "P":
                    player_sprite = Player((x, y))
                    self.player.add(player_sprite)
                if (cell == "F") and COLECTED_ITEMS == 4:
                    tile = Flor((x, y), tile_size)
                    self.tiles.add(tile)
                if (cell == "M") and COLECTED_ITEMS == 0:
                    tile = Mesa((x, y), tile_size)
                    self.tiles.add(tile)

    def colision_itens(self):
        player = self.player.sprite
        for Mesa in self.tiles.sprites():
            if Mesa.rect.colliderect(player.rect):
                if player.direction.x < 0 or player.direction.x > 0:
                    COLECTED_ITEMS + 4

    def scream_scroll(self):
        Player = self.player.sprite
        Player_x = Player.rect.centerx
        direction_x = Player.direction.x
 
        if Player_x < screen_width / 5 and direction_x < 0:
            self.world_shift = 5
            Player.speed = 0
 
        elif Player_x > screen_width - (screen_width / 5) and direction_x > 0:
            self.world_shift = -5
            Player.speed = 0
 
        else:
            self.world_shift = 0
            Player.speed = 5
 
    def colision_x(self):
        player = self.player.sprite
        player.move_x()
        for sprite in self.tiles.sprites():
            if sprite.rect.colliderect(player.rect):
                if player.direction.x < 0:
                    player.rect.left = sprite.rect.right
                elif player.direction.x > 0:
                    player.rect.right = sprite.rect.left
                if player.direction.x > 0 or player.direction.x < 0:
                    player.direction.y = 0.5   
                    player.jumping = False
                else:
                    player.jumping = True

    def colision_y(self):
        player = self.player.sprite
        player.move_y()
        for sprite in self.tiles.sprites():
            if sprite.rect.colliderect(player.rect):
                if player.direction.y > 0:
                    player.rect.bottom = sprite.rect.top
                    player.jumping = False
                    player.direction.y = 0
                elif player.direction.y < 0:
                    player.rect.top = sprite.rect.bottom
                    player.direction.y = 0.5
 

    def wall_grip(self):
        player = self.player.sprite
        player.move_x()
        for sprite in self.tiles.sprites():
            if sprite.rect.colliderect(player.rect):
                if player.direction.x < 0 or player.direction.x > 0:
                    player.direction.y = 0.5

    def run(self):
        # level tiles
        self.tiles.update(self.world_shift)
        self.tiles.draw(self.display_surface)
        self.scream_scroll()
        self.colision_itens()
        # player
        self.player.update()
        self.colision_x()
        self.colision_y()
        # self.wall_grip()
        self.player.draw(self.display_surface)
any help is welcome
Reply


Messages In This Thread
i need help pls - by augusto_A - May-28-2023, 01:44 PM
RE: i need help pls - by menator01 - May-28-2023, 05:36 PM
RE: i need help pls - by deanhystad - May-30-2023, 04:48 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020