View difference between Paste ID: z7VjUFj0 and YVZHt02W
SHOW: | | - or go back to the newest paste.
1
# Import modulu pygame, dzieki ktoremu tworzymy aplikacje okienkowa
2
import pygame
3
from random import choice, randint
4
5
6
# Inicjalizacja modułu
7
pygame.init()
8
# Utworzenie okna o określonych wymiarach
9
SCREEN_WIDTH = 800
10
SCREEN_HEIGHT = 600
11
12
screen_surface = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
13
# Nadanie nazwy oknu
14
pygame.display.set_caption('Pierwsza Gra')
15
16
# Utworzenie zegara, który nadzoruje stałe wartości fps
17
clock = pygame.time.Clock()
18
19
bonus_images = [
20
    'bonus_1.png',
21
    'bonus_2.png',
22
    'bonus_3.png'
23
]
24
25
FRAMES_PER_SECOND = 60
26
frames_cnt = 0
27
28
29
def load_image(img_path: str, position):
30
    image = pygame.image.load(img_path)
31
    surface = image.convert()
32
33
    transparent_color = (0, 0, 0)
34
    surface.set_colorkey(transparent_color)
35
36
    # Pozycja wyświetlania obiektu zapisana jest w rect
37
    rect = surface.get_rect(center=position)
38
39
    return [image, surface, rect]
40
41
42
def print_image(img_list) -> None:
43
    # [image, surface, rect]
44
    image, surface, rect = img_list
45
    screen_surface.blit(surface, rect)
46
    pass
47
48
49
def set_position_image(img_list, position):
50
    image, surface, rect = img_list
51
    rect = surface.get_rect(center=position)
52
    return [image, surface, rect]
53
54
55
def calculate_player_movement(keys):
56
    # Poruszanie postacią
57
    speed = 10
58
    delta_x = 0
59
    delta_y = 0
60
61
    if keys[pygame.K_w]:
62
        delta_y -= speed
63
    if keys[pygame.K_s]:
64
        delta_y += speed
65
    if keys[pygame.K_d]:
66
        delta_x += speed
67
    if keys[pygame.K_a]:
68
        delta_x -= speed
69
70
    return [delta_x, delta_y]
71
72
73
def limit_position(position):
74
    x, y = position
75
    x = max(0, min(x, SCREEN_WIDTH))
76
    y = max(0, min(y, SCREEN_HEIGHT))
77
    return [x, y]
78
79
80
def generate_bonus_object():
81
    # Wylosowanie nazwy pliku do wczytania
82
    image_name = choice(bonus_images)
83
    # Wylosowanie współrzędnych dla nowego obiektu
84
    x = randint(0, SCREEN_WIDTH)
85
    y = randint(0, SCREEN_HEIGHT)
86
    # Utworzenie zmiennej position, która będzie listą dwuelementową
87
    position = [x, y]
88
    # Utworzenie grafiki za pomocą funkcji load_image
89
    new_obj = load_image(image_name, position)
90
    # Dodanie gotowego obiektu bonus do listy wszystkich elementów
91
    bonus_objects.append(new_obj)
92
    pass
93
94
95
def print_bonus_objects():
96
    # Iteracja po obiektach bonusowych
97
    for obj in bonus_objects:
98
        # Wyświetlenie obiektu na ekranie gry,
99
        # za pomoca wczesniej przygotowanej funkcji
100
        print_image(obj)
101
        pass
102
    pass
103
104
105
def check_collisions():
106
    rect_player = player[2]
107
108
    # Do wyboru sposób indeksowania
109
    # for i in range(len(bonus_objects)):
110
    #    index = len(bonus_objects) - 1 - i
111
112
    for index in range(len(bonus_objects) - 1, -1, -1):
113
        obj = bonus_objects[index]
114
        rect = obj[2]
115
        if rect.colliderect(rect_player):
116
            bonus_objects.pop(index)
117
            pass
118
        pass
119
    pass
120
121
122
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
123
player_pos = [SCREEN_WIDTH // 2, SCREEN_HEIGHT // 2]
124
player = load_image('player.png', player_pos)
125
background_color = [9, 42, 121]
126
# Lista przechowująca obiekty bonusowe
127
# Gotowy obiekt to trójelementowa lista uzyskana z load_image
128
bonus_objects = []
129
130
# Zmienna określająca, czy należy zamknąć okno
131
game_status = True
132
# Kod wykonywany póki aplikacja jest uruchomiona
133
while game_status:
134
135
    # Odczytanie zdarzeń zarejestrowanych przez komputer
136
    events = pygame.event.get()
137
138
    for event in events:
139
        # Naciśnięto X - zamykanie aplikacji
140
        if event.type == pygame.QUIT:
141
            game_status = False
142
        pass  # for event
143
144
    pressed_keys = pygame.key.get_pressed()
145
146
    delta_x, delta_y = calculate_player_movement(pressed_keys)
147
148
    # Zmiana wartości współrzędnych
149
    player_pos[0] += delta_x
150
    player_pos[1] += delta_y
151
    # Sprawdzenie limitów współrzędnych
152
    player_pos = limit_position(player_pos)
153
154
    # Zmiana współrzędnych obrazu
155
    player = set_position_image(player, player_pos)
156
157
    # Uzupełnij tło
158
    screen_surface.fill(background_color)
159
    # Wyświetl gracza
160
    print_image(player)
161
162
    # Dodawanie bonusu - pierwsze dodanie bez warunku ograniczającego ;)
163
    if frames_cnt % FRAMES_PER_SECOND * 1 == 0:
164
        generate_bonus_object()
165
        pass
166
167
    check_collisions()
168
169
    print_bonus_objects()
170
171
    # Odświeżenie wyświetlanego okna
172
    pygame.display.update()
173
174
    frames_cnt += 1
175
176
    clock.tick(FRAMES_PER_SECOND)
177
    pass
178
179
print("Zamykanie aplikacji")
180
# Zamknięcie aplikacji
181
pygame.quit()
182
# Zamknięcie skryptu
183
quit()
184
185