Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import pygame
- pygame.init()
- pygame.font.init()
- font = pygame.font.SysFont("Times New Roman", 30)
- WIDTH = 1200
- HEIGHT = 600
- window = pygame.display.set_mode((WIDTH, HEIGHT))
- pygame.display.set_caption("Platformer Game")
- # Spremenljivke, ki jih bomo potrebovali za igralca
- # ---
- class Coin:
- def __init__(self, x, y):
- self.position = pygame.Rect(x, y, 50, 42)
- self.image = pygame.transform.scale(pygame.image.load("images/cheeseburger.png"), (50, 42))
- def collect(self, player):
- player.score += 1
- def draw(self, player):
- x_relative = self.position.x - (player.position.x - player.x_relative)
- y_relative = self.position.y - (player.position.y - player.y_relative)
- window.blit(self.image, (x_relative, y_relative))
- class Player:
- def __init__(self, x, y):
- self.size = 75
- self.position = pygame.Rect(x, y, self.size, self.size)
- self.image = pygame.image.load("images/scratch-cat.png")
- self.image = pygame.transform.scale(self.image, (self.size, self.size))
- self.speed_x = 0
- self.speed_y = 0
- self.jumps = 3
- self.score = 0
- self.direction = 0
- self.x_relative = (WIDTH - self.size) // 2
- self.y_relative = 3 * (HEIGHT - self.size) // 4
- def move(self):
- keys = pygame.key.get_pressed()
- if keys[pygame.K_d]:
- self.speed_x = 5
- self.direction = 1
- elif keys[pygame.K_a]:
- self.speed_x = -5
- self.direction = -1
- else:
- self.speed_x = 0
- if keys[pygame.K_SPACE] and self.jumps > 0 and self.speed_y > -5:
- self.jumps -= 1
- self.speed_y = -18
- if self.speed_y < 20:
- self.speed_y += 1
- self.position.x += self.speed_x
- self.position.y += self.speed_y
- # if self.position.x < 0:
- # self.position.x = 0
- # if self.position.x > WIDTH - self.size:
- # self.position.x = WIDTH - self.size
- # if self.position.y < 0:
- # self.position.y = 0
- # if self.position.y > HEIGHT - self.size:
- # self.position.y = HEIGHT - self.size
- for platform in platforms:
- if self.position.colliderect(platform.position):
- resolve_collision(self.position, platform.position)
- def draw(self):
- if (player.direction < 0):
- window.blit(pygame.transform.flip(player.image, True, False), (self.x_relative, self.y_relative))
- else:
- window.blit(self.image, (self.x_relative, self.y_relative))
- class Platform:
- def __init__(self, x, y, width, height):
- self.position = pygame.Rect(x, y, width, height)
- def draw(self, player):
- x_relative = self.position.x - (player.position.x - player.x_relative)
- y_relative = self.position.y - (player.position.y - player.y_relative)
- pygame.draw.rect(window, (0, 127, 0), pygame.Rect(x_relative, y_relative, self.position.width, self.position.height))
- player = Player(100, 100)
- platforms = [Platform(0, HEIGHT - 50, WIDTH, 50), Platform(300, 500, 200, 20), Platform(600, 350, 200, 20), Platform(900, 400, 200, 20)]
- coins = [Coin(400, 150), Coin(600, 200), Coin(900, 300)]
- # ---
- def resolve_collision(rect_a, rect_b):
- # Compute overlap distances in x and y
- dx1 = rect_b.right - rect_a.left
- dx2 = rect_a.right - rect_b.left
- dy1 = rect_b.bottom - rect_a.top
- dy2 = rect_a.bottom - rect_b.top
- # Find the smallest displacement to separate them
- min_dx = min(dx1, dx2)
- min_dy = min(dy1, dy2)
- if min_dx < min_dy:
- # Move rect_a left or right
- if dx1 < dx2:
- rect_a.x += dx1 # Move right
- else:
- rect_a.x -= dx2 # Move left
- else:
- # Move rect_a up or down
- if dy1 < dy2:
- pass
- # player.speed_y = 0
- # rect_a.y += dy1 # Move down
- else:
- player.jumps = 3
- player.speed_y = 0
- rect_a.y -= dy2 # Move up
- return True # Collision was resolved
- # Glavna zanka igre
- clock = pygame.time.Clock()
- running = True
- while running:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- window.fill((0, 255, 255))
- # background_image = pygame.image.load("images/New Piskel.png")
- # background_image = pygame.transform.scale(background_image, (width, height))
- # window.blit(background_image, (0, 0))
- # Premikanje igralčevega lika
- # ---
- # Vsako ponovitev zanke (vsak frame) dobimo pritisnjene tipke
- # in se glede na njih odločimo, kako bomo igralca premaknili
- player.move()
- for coin in coins:
- if player.position.colliderect(coin.position):
- coin.collect(player)
- coins.remove(coin)
- # ---
- # Izris likov
- # ---
- player.draw()
- font_render = font.render(f"Score: {player.score}", False, (0, 0, 0))
- window.blit(font_render, (0, 0))
- for platform in platforms:
- platform.draw(player)
- for coin in coins:
- coin.draw(player)
- # window.blit(slika_ovire, platform)
- # ---
- pygame.display.update()
- clock.tick(60)
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement