Untitled

 avatar
unknown
plain_text
10 days ago
6.8 kB
7
Indexable
import pygame

pygame.init()

# Screen dimensions
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Platformer Game")

# Loading Images
dirt = pygame.image.load("Game_2\\Images\\dirt.png")
grass = pygame.image.load("Game_2\\Images\\grass.png")

# Player class and functions
def check(rect,list_):
    li = []
    for i in list_:
        if rect.colliderect(i):
            li.append(i)

    return li

def collisions(rect,list_):
    collision_types = {'bottom': False, 'top': False, 'left': False, 'right': False}
    list_ = check(rect, list_)
    for tile in list_:
        if abs(rect.bottom - tile.top) == 2:
            if rect.right <= tile.left:
                if rect.left >= tile.right:
                    collision_types['bottom'] = True
        if abs(rect.top - tile.bottom) == 2:
            if rect.right >= tile.left:
                collision_types['bottom'] = True
            if rect.left <= tile.right:
                collision_types['bottom'] = True
        if rect.right == tile.left:
            if rect.bottom >= tile.top:
                collision_types['right'] = True
            if rect.top <= tile.bottom:
                collision_types['right'] = True
        if rect.left == tile.right:
            if rect.bottom >= tile.top:
                collision_types['left'] = True
            if rect.top <= tile.bottom:
                collision_types['left'] = True

    return collision_types

class Player(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super().__init__()
        self.image = pygame.transform.scale(pygame.image.load("Game_2\\Images\\test img2.png"), (24, 32))
        self.image.set_colorkey((255, 255, 255))
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.speed = 5
        self.gravity = 0.8
        self.jump_speed = 10
        self.is_jumping = False
        self.vel_y = 0
        self.falling = True
        self.movement = [0,0]
        self.vel_x = 0

    def update(self, group, list_):
        keys = pygame.key.get_pressed()

        # Gravity and jumping
        if self.falling:
            self.vel_y += self.gravity
        if keys[pygame.K_SPACE] and not self.is_jumping:
            self.vel_y = -self.jump_speed
            self.is_jumping = True
            self.falling = True

        # Collision detection with ground and platforms
        if not self.is_jumping:
            if self.rect.bottom >= screen_height:
                self.rect.bottom = screen_height
                self.vel_y = 0
                self.is_jumping = False
                self.falling = False
        
        if self.rect.bottom >= screen_height:
            self.is_jumping = False
        
        collision = collisions(self.rect, list_)

        if collision['bottom'] == True:
            if self.vel_y != 0:
                self.vel_y = 0
            self.falling = False
            self.is_jumping = False
        if collision['top'] == True:
            self.vel_y = 0
            self.falling = True
            self.is_jumping = True
        if collision['left'] == True and self.vel_x < 0:
            self.vel_x = 0

        print(collision)
        
        if keys[pygame.K_r]:
            self.rect.x = 0
            self.rect.y = 0
            self.vel_y = 0
            self.falling = True
        
        if self.rect.top <= 0:
            self.vel_y = 0
            self.falling = True
        
        self.rect.y += self.vel_y

# Platform class
class Platform(pygame.sprite.Sprite):
    def __init__(self, x, y, image):
        super().__init__()
        self.image = image
        self.rect = self.image.get_rect()
        self.rect.x = x
        self.rect.y = y
        self.vel_x = 0

    def update(self, *args):
        keys = pygame.key.get_pressed()
        self.vel_x = player.vel_x
        self.rect.x += self.vel_x

# Create game objects
game_map = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0],
            [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
            [2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2],
            [1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,1],
            [1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1],
            [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
            [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
            [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
            [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]]

all_sprites = pygame.sprite.Group()
plfs = pygame.sprite.Group()

player = Player(100, 350)

all_sprites.add(player)

clock = pygame.time.Clock()

p_d = False

tiles = []

# Game loop
running = True
while running:

    movement = [0,0]

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

    if not p_d:
        y = 0
        for rows in game_map: 
            x = 0      
            for col in rows:
                if col == 1:
                    pd = Platform(x*25, y*25, dirt)
                    plfs.add(pd)
                    tiles.append(pygame.Rect(x*25,y*25,25,25))
                if col == 2:
                    pg = Platform(x*25, y*25, grass)
                    plfs.add(pg)
                    tiles.append(pygame.Rect(x*25,y*25,25,25))
                x += 1
            y += 1

    p_d = True

    all_sprites.update(plfs, tiles)
    plfs.update(player)
    movement = player.movement

    screen.fill((0, 0, 0))
    plfs.draw(screen)
    all_sprites.draw(screen)

    pygame.display.update()
    clock.tick(30)

pygame.quit()
Leave a Comment