Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Import modulu pygame, dzieki ktoremu tworzymy aplikacje okienkowa
- import pygame
- from random import choice, randint
- # Inicjalizacja modułu
- pygame.init()
- # Utworzenie okna o określonych wymiarach
- SCREEN_WIDTH = 800
- SCREEN_HEIGHT = 600
- screen_surface = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
- # Nadanie nazwy oknu
- pygame.display.set_caption('Pierwsza Gra')
- # Utworzenie zegara, który nadzoruje stałe wartości fps
- clock = pygame.time.Clock()
- bonus_images = [
- 'bonus_1.png',
- 'bonus_2.png',
- 'bonus_3.png'
- ]
- FRAMES_PER_SECOND = 60
- frames_cnt = 0
- def load_image(img_path: str, position):
- image = pygame.image.load(img_path)
- surface = image.convert()
- transparent_color = (0, 0, 0)
- surface.set_colorkey(transparent_color)
- # Pozycja wyświetlania obiektu zapisana jest w rect
- rect = surface.get_rect(center=position)
- return [image, surface, rect]
- def print_image(img_list) -> None:
- # [image, surface, rect]
- image, surface, rect = img_list
- screen_surface.blit(surface, rect)
- pass
- def set_position_image(img_list, position):
- image, surface, rect = img_list
- rect = surface.get_rect(center=position)
- return [image, surface, rect]
- def calculate_player_movement(keys):
- # Poruszanie postacią
- speed = 10
- delta_x = 0
- delta_y = 0
- if keys[pygame.K_w]:
- delta_y -= speed
- if keys[pygame.K_s]:
- delta_y += speed
- if keys[pygame.K_d]:
- delta_x += speed
- if keys[pygame.K_a]:
- delta_x -= speed
- return [delta_x, delta_y]
- def limit_position(position):
- x, y = position
- x = max(0, min(x, SCREEN_WIDTH))
- y = max(0, min(y, SCREEN_HEIGHT))
- return [x, y]
- def generate_bonus_object():
- # Wylosowanie nazwy pliku do wczytania
- image_name = choice(bonus_images)
- # Wylosowanie współrzędnych dla nowego obiektu
- x = randint(0, SCREEN_WIDTH)
- y = randint(0, SCREEN_HEIGHT)
- # Utworzenie zmiennej position, która będzie listą dwuelementową
- position = [x, y]
- # Utworzenie grafiki za pomocą funkcji load_image
- new_obj = load_image(image_name, position)
- # Dodanie gotowego obiektu bonus do listy wszystkich elementów
- bonus_objects.append(new_obj)
- pass
- def print_bonus_objects():
- # Iteracja po obiektach bonusowych
- for obj in bonus_objects:
- # Wyświetlenie obiektu na ekranie gry,
- # za pomoca wczesniej przygotowanej funkcji
- print_image(obj)
- pass
- pass
- def check_collisions():
- rect_player = player[2]
- # Do wyboru sposób indeksowania
- # for i in range(len(bonus_objects)):
- # index = len(bonus_objects) - 1 - i
- for index in range(len(bonus_objects) - 1, -1, -1):
- obj = bonus_objects[index]
- rect = obj[2]
- if rect.colliderect(rect_player):
- bonus_objects.pop(index)
- pass
- pass
- pass
- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
- player_pos = [SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2]
- player = load_image('player.png', player_pos)
- background_color = [9, 42, 121]
- # Lista przechowująca obiekty bonusowe
- # Gotowy obiekt to trójelementowa lista uzyskana z load_image
- bonus_objects = []
- # Zmienna określająca, czy należy zamknąć okno
- game_status = True
- # Kod wykonywany póki aplikacja jest uruchomiona
- while game_status:
- # Odczytanie zdarzeń zarejestrowanych przez komputer
- events = pygame.event.get()
- for event in events:
- # Naciśnięto X - zamykanie aplikacji
- if event.type == pygame.QUIT:
- game_status = False
- pass # for event
- pressed_keys = pygame.key.get_pressed()
- delta_x, delta_y = calculate_player_movement(pressed_keys)
- # Zmiana wartości współrzędnych
- player_pos[0] += delta_x
- player_pos[1] += delta_y
- # Sprawdzenie limitów współrzędnych
- player_pos = limit_position(player_pos)
- # Zmiana współrzędnych obrazu
- player = set_position_image(player, player_pos)
- # Uzupełnij tło
- screen_surface.fill(background_color)
- # Wyświetl gracza
- print_image(player)
- # Dodawanie bonusu - pierwsze dodanie bez warunku ograniczającego ;)
- if frames_cnt % FRAMES_PER_SECOND * 1 == 0:
- generate_bonus_object()
- pass
- check_collisions()
- print_bonus_objects()
- # Odświeżenie wyświetlanego okna
- pygame.display.update()
- frames_cnt += 1
- clock.tick(FRAMES_PER_SECOND)
- pass
- print("Zamykanie aplikacji")
- # Zamknięcie aplikacji
- pygame.quit()
- # Zamknięcie skryptu
- quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement