Platformy, które znikają, gdy na nich lądujesz, to podstawowy element gier platformowych, takich jak tory z przeszkodami. Wymagają od gracza szybkiego działania i planowania, gdzie idzie, aby nie spaść.
Z tego samouczka dowiesz się, jak przy użyciu Verse w Unreal Editor dla Fortnite (UEFN) utworzyć platformę, która znika, gdy gracz jej dotknie, i pojawia się później po upływie losowej liczby sekund. Ten przykład pokazuje, jak stworzyć obszar, w którym gracz musi przeskakiwać z platformy na platformę, aby nie spaść. Na końcu tego przewodnika znajduje się kompletny skrypt.

Używana funkcja języka Verse
spawn
: Wyrażeniaspawn
używa się w celu wywołania asynchronicznej funkcji, która powoduje, że platforma pojawia się ponownie po upływie losowej liczby sekund.
Używane interfejsy API Verse
-
Sleep()
: APISleep()
służy do wstawiania opóźnień między znikaniem platformy i pojawianiem się jej ponownie po upływie losowego czasu. -
GetRandomFloat()
: APIGetRandomFloat()
służy do obliczania losowego czasu do ponownego pojawienia się platformy. -
Właściwości edytowalne: cztery wartości zmiennopozycyjne, które kontrolują opóźnienia znikania i pojawiania się platformy, a także samo odwołanie do platformy.
-
Zdarzenia urządzenia: Użyj
TriggeredEvent
urządzenia wyzwalacza, aby dowiedzieć się, kiedy gracz wyląduje na platformie.
Ustawianie poziomu
W tym samouczku jako punkt wyjścia wykorzystano Szablon początkowy Verse. Na początek zainicjalizuj nowy projekt z przykładu funkcji Urządzenie Verse.

W tym przykładzie wykorzystano następujące rekwizyty i urządzenia:
-
1 x Urządzenie Panel startowy gracza: To urządzenie określa, w którym miejscu na początku gry spawnuje się gracz.
-
4 x Rekwizyt trybu kreatywnego: Rekwizyty trybu kreatywnego mają kilka zachowań, które można wywoływać za pomocą Verse, na przykład
Hide()
iShow()
, aby przełączać widoczność platformy i kolizję. W tym samouczku wykorzystano Platformę unoszącą się A jako platformę interaktywną dla gracza, ale możesz ją dowolnie zmieniać, dostosowując ją do swoich potrzeb. -
4 x Urządzenie aktywatora: Użyj tych wyzwalaczy, by dowiedzieć się, kiedy gracz wyląduje na danej platformie.
Postępuj zgodnie z poniższą instrukcją, aby skonfigurować swój poziom:
-
Dodaj jedną Powietrzną platformę unoszącą się A do swojej sceny. Umieść to nad podłogą, aby gracz spadł, jeśli w porę nie zeskoczy ze znikającej platformy. W Outlinerze nazwij platformę RecyclePlatform.
-
Dodaj jedno urządzenie wyzwalacza do swojej sceny i ustaw je jako urządzenie podrzędne swojej RecyclePlatform. Umieść je na górze platformy i dostosuj jego rozmiar tak, aby pasowało do całej platformy. W Outlinerze ustaw Widoczność w grze na wartość False, a Liczba aktywacji na 1.
-
Na platformie umieść urządzenie Panelu startowego gracza. W tym miejscu gracz się spawnuje w chwili rozpoczęcia gry. W Outliner wyłącz opcję Widoczność podczas gry, aby gracz nie mógł stanąć na panelu startowym po tym, jak się zespawnuje. Gotowa konfiguracja powinna wyglądać następująco:
Tworzenie urządzenia
W tym przykładzie używamy urządzenia utworzonego w Verse, aby zdefiniować zachowanie platformy, która znika, gdy gracz na niej wyląduje, i pojawia się ponownie po upływie losowej liczby sekund. Postępuj zgodnie z poniższą instrukcją, aby utworzyć urządzenie w Verse.
-
Utwórz nowe urządzenie Verse o nazwie disappear_on_touch_platform przy użyciu Eksploratora Verse. Aby dowiedzieć się, jak utworzyć nowe urządzenie w Verse, patrz Tworzenie własnego urządzenia przy użyciu Verse.
-
Przeciągnij urządzenie disappear_on_touch_platform z Przeglądarki zawartości do poziomu.
Edycja właściwości urządzenia w UEFN
W tej sekcji pokazujemy, jak uwidocznić cztery właściwości urządzenia dla UEFN, aby można je było dostosować w edytorze:
-
Odwołanie urządzenia do obiektu trybu kreatywnego umieszczonego na poziomie.
-
Stała typu
float
o nazwieDisappearDelay
, która przechowuje wartość czasu oczekiwania na ukrycie platformy po tym, jak gracz jej dotknie. -
Dwie stałe typu
float
o nazwachDelayMin
iDelayMax
, przechowujące minimalną i maksymalną ilość czasu oczekiwania przed ponownym wyświetleniem platformy. Te dwie wartości definiują dozwolony zakres przy uzyskiwaniu losowej liczby.
Postępuj zgodnie z poniższymi instrukcjami, aby uwidocznić te właściwości z urządzenia disappear_on_touch_platform utworzonego w poprzedniej sekcji.
-
Otwórz Eksplorator Verse i kliknij dwukrotnie disappear_on_touch_platform.verse, aby otworzyć skrypt w Visual Studio Code.
-
Do definicji klasy
disappear_on_touch_platform
dodaj następujące pola:-
Edytowalna wartość
float
o nazwieDisappearDelay
. Określa to, jak długo czekać przed ukryciem platformy, gdy gracz jej dotknie. Inicjuj tę wartość na1.0
, czyli jedną sekundę.# Jak długo czekać przed ukryciem platformy, gdy gracz jej dotknie. @editable DisappearDelay:float = 1.0
-
Edytowalna wartość
float
o nazwieDelayMin
. # Jest to minimalny czas oczekiwania przed ponownym wyświetleniem platformy. Zainicjuj to na3.0
, czyli trzy sekundy.# Minimalny czas oczekiwania przed ponownym wyświetleniem platformy. @editable DelayMin:float = 3.0
-
Edytowalna wartość
float
o nazwieDelayMax
. # Jest to maksymalny czas oczekiwania przed ponownym wyświetleniem platformy. Zainicjuj to na4.0
, czyli cztery sekundy.# Maksymalny czas oczekiwania przed ponownym wyświetleniem platformy. @editable DelayMax:float = 4.0
-
Edytowalny
creative_prop
o nazwieDisappearingPlatform
. Jest to platforma na poziomie, która będzie okresowo znikała i się pojawiała. Ponieważ twój kod nie zawiera jeszcze odwołania do tego obiektu na tym poziomie, utworzysz jego instancję przy użyciu pustego archetypucreative_prop{}
. Później przypiszesz to odwołanie do swojej wiszącej platformy.# Odwołanie do platformy na poziomie. @editable DisappearingPlatform:creative_prop = creative_prop{}
-
Edytowalny
trigger_device
o nazwiePlatformTrigger
. Aby dowiadywać się o tym, że gracz wylądował na platformie, potrzebne będzie zdarzenieTriggeredEvent
z tego urządzenia.# Strefa, w którą gracz wchodzi po lądowaniu na platformie. @editable PlatformTrigger:trigger_device = trigger_device{}
-
-
Pola klasy
disappear_on_touch_platform
powinny teraz wyglądać następująco:# Urządzenie trybu kreatywnego utworzone w Verse, które można umieścić w poziomie disappear_on_touch_platform := class(creative_device): # Jak długo czekać przed ukryciem platformy, gdy gracz jej dotknie. @editable DisappearDelay:float = 1.0 # Minimalny czas oczekiwania przed ponownym wyświetleniem platformy. @editable DelayMin:float = 3.0 # Maksymalny czas oczekiwania przed ponownym wyświetleniem platformy. @editable DelayMax:float = 4.0 # Odwołanie do platformy na poziomie. @editable DisappearingPlatform:creative_prop = creative_prop{} # Strefa, w którą gracz wchodzi po lądowaniu na platformie. @editable PlatformTrigger:trigger_device = trigger_device{}
Pomocne jest użycie atrybutu
@editable
, aby udostępnić edytorowi wartości z twoich skryptów, takie jakToggleDelay
. Pozwala ci to dostosować ich wartości w UEFN bez konieczności ponownego tworzenia kodu Verse za każdym razem, dzięki czemu możesz szybko wprowadzać zmiany i znajdować wartości odpowiadające twojej przygodzie. -
Zapisz skrypt w Visual Studio Code.
-
Na pasku narzędzi UEFN kliknij Verse, następnie Skompiluj kod Verse, aby uaktualnić urządzenie disappear_on_touch_platform na poziomie.
-
W panelu Outlinera w UEFN wybierz urządzenie disappear_on_touch_platform, aby otworzyć jego panel Szczegóły.
-
Na panelu Szczegóły w obszarze Platforma znikająca po dotknięciu ustaw Platforma na RecyclePlatform (rekwizyt trybu kreatywnego dodany do poziomu), klikając wybieracz obiektów i wybierając urządzenie platformy w oknie wizualizacji.
-
Masz teraz rekwizyt z odwołaniem do Twojego urządzenia Verse. Wybierz oba urządzenia i zduplikuj je wiele razy na poziomie, tworząc serię platform, między którymi gracz może przeskakiwać. Każde nowo utworzone urządzenie Verse powinno się odwoływać do własnej platformy.
Ukrywanie i wyświetlanie platformy
Po skonfigurowaniu poziomu i urządzeń możesz dodać funkcjonalność wyświetlania i ukrywania platformy, gdy gracz na nie wyląduje. Wykonaj poniższe kroki, aby dodać to zachowanie do klasy disappear_on_touch_platform
:
-
Klasa
creative_prop
zawiera dwie metody do przełączania jej widoczności:Show()
iHide()
. Wróć do Visual Studio Code, wOnBegin()
wywołajHide()
, a następnieShow()
na swojejDisappearingPlatform
.# Działa po uruchomieniu urządzenia w aktywnej grze OnBegin<override>()<suspends>:void= # Zrób platformę niewidoczną. DisappearingPlatform.Hide() # Zrób platformę widoczną. DisappearingPlatform.Show()
Po wykonaniu tego kodu nie zobaczysz, jak platforma znika i pojawia się ponownie, ponieważ wywołania
Hide()
iShow()
następują bezpośrednio po sobie. -
Aby platforma pozostawała w stanie widocznym/niewidocznym przez dłuższy czas, możesz dodać opóźnienie przy wywołaniu
Hide()
lubShow()
przy użyciuSleep()
. FunkcjaSleep()
zawiesza wykonanie procedury. Przekazując funkcji argumentfloat
, określasz ilość czasu (w sekundach), przez którą wykonanie funkcji ma być zawieszone. WywołajSleep()
przed każdym wywołaniemHide()
iShow()
, przekazującDisappearDelay
, co zostało zdefiniowane wcześniej.# Działa po uruchomieniu urządzenia w aktywnej grze OnBegin<override>()<suspends>:void= # Odczekaj przez czas określony przez DisappearDelay liczony w sekundach. Sleep(DisappearDelay) # Zrób platformę niewidoczną. DisappearingPlatform.Hide() # Odczekaj przez czas określony przez DisappearDelay liczony w sekundach. Sleep(DisappearDelay) # Zrób platformę widoczną. DisappearingPlatform.Show()
Po wykonaniu tego kodu platforma będzie niewidoczna przez jedną sekundę (czas zdefiniowany przez
DisappearDelay
), zanim stanie się widoczna przez resztę gry.Funkcję
Sleep()
można wywołać wyłącznie w kontekście asynchronicznym. MetodaOnBegin()
jest już kontekstem asynchronicznym, ponieważ posiada specyfikatorsuspends
, dlatego nie są konieczne żadne dalsze czynności. Aby dowiedzieć się więcej na temat specyfikatorasuspends
, przeczytaj dokument Specyfikatory i atrybuty. -
Różnicowanie czasu, po jakim platforma wyświetla się ponownie, uatrakcyjnia grę. Zamiast przekazywać za każdym razem tę samą wartość do
Sleep()
, możesz użyć funkcjiGetRandomFloat()
, aby wygenerować losową liczbę sekund i przekazać ją doSleep()
.-
Na górze pliku dodaj
using { /Verse.org/Random }
, aby użyć funkcjiGetRandomFloat()
.using { /Fortnite.com/Devices } using { /Verse.org/Random } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/Diagnostics } # Odwiedź stronę: https://dev.epicgames.com/documentation/pl-pl/uefn/create-your-own-device-in-verse, aby dowiedzieć się, jak utworzyć urządzenie Verse. # Urządzenie trybu kreatywnego utworzone w Verse, które można umieścić w poziomie disappear_on_touch_platform := class(creative_device):
-
Użyj funkcji
GetRandomFloat()
jako argumentu dlaSleep()
, gdy określasz, jak długo platforma ma czekać, zanim wyświetli się ponownie. Ustaw dozwolony zakres sekund przy użyciuDelayMin
iDelayMax
.# Działa po uruchomieniu urządzenia w aktywnej grze OnBegin<override>()<suspends>:void= # Odczekaj przez czas określony przez DisappearDelay liczony w sekundach. Sleep(DisappearDelay) # Zrób platformę niewidoczną. DisappearingPlatform.Hide() # Odczekaj przez czas określony przez DelayMin i DelayMax liczony w sekundach. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Zrób platformę widoczną. DisappearingPlatform.Show()
Teraz platforma zniknie po upływie
1.0
sekundy, a następnie pojawi się ponownie po upływie3.0
–4.0
sekund. -
Wykrywanie lądowania gracza na platformie
Aby wykrywać lądowanie gracza na platformie, możesz zasubskrybować do zdarzenia TriggeredEvent
uwidocznionego przez klasę trigger_device
. Wyzwalacz wysyła zdarzenie TriggeredEvent
tylko wtedy, gdy gracz po nim przejdzie. Ponieważ ustawiłeś parametr Times Can Trigger na jeden, musisz wywołać metodę Reset()
na wyzwalaczu, aby zresetować jego stan i umożliwić ponowne wysłanie TriggeredEvent
.
Wykonaj poniższe instrukcje, aby wykrywać, kiedy gracz dotyka platformy. Użyj kodu napisanego w poprzedniej sekcji, aby w odpowiedzi platforma ukrywała się i pojawiała ponownie.
-
TriggeredEvent
wymaga sygnatury funkcji z opcjonalnymplayer
jako parametrem orazvoid
jako typem zwracanej wartości. Agent jest opcjonalny w tej funkcji, ponieważ można aktywować urządzenia wyzwalacza również za pomocą kodu, dlatego trzeba sprawdzić, czy to gracz je aktywował. Dodaj nową metodę do klasydisappear_on_touch_platform
o nazwieOnPlayerTouch()
.OnPlayerTouch(ActivatingPlayer:?agent):void=
-
W
OnPlayerTouch()
, w wyrażeniuif
spróbuj pobrać gracza z opcjiActivatingPlayer
. Jeśli to wywołanie się powiedzie, będziesz wiedzieć, że to gracz aktywował wyzwalacz, a nie kod.OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("Gracz dotknął platformy!")
-
W
OnBegin()
zasubskrybujPlatformTrigger.TriggeredEvent
używającOnPlayerTouch
jako procedury obsługi zdarzeń. Teraz za każdym razem, gdy gracz wyląduje na platformie, aktywowane będzie zdarzenieTriggeredEvent
i uruchomi sięOnPlayerTouch()
.OnBegin<override>()<suspends>:void= # Subskrybuj wydarzenie TriggeredEvent z PlatformTrigger, aby być na bieżąco # gdy gracz ląduje na platformie. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)
-
Gdy platforma jest ukryta, gracze nie powinni móc aktywować wyzwalacza, ponieważ powinni przejść prosto przez platformę. Aby to wykonać, w
OnBegin()
dodaj wywołaniaPlatformTrigger.Disable()
iEnable()
– odpowiednio poHide()
iShow()
. Teraz nie będą możliwe interakcje z wyzwalaczem, gdy twoja platforma jest ukryta.OnBegin<override>()<suspends>:void= # Subskrybuj wydarzenie TriggeredEvent z PlatformTrigger, aby być na bieżąco # gdy gracz ląduje na platformie. PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch) # Odczekaj przez czas określony przez DisappearDelay liczony w sekundach. Sleep(DisappearDelay) # Ukryj platformę i wyłącz wyzwalacz. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Odczekaj przez czas określony przez DelayMin i DelayMax liczony w sekundach. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Wyświetlaj platformę i włącz wyzwalacz. DisappearingPlatform.Show() PlatformTrigger.Enable()
Chociaż musisz ukryć platformę, gdy gracz na niej wyląduje, nie możesz dodawać kodu ukrywającego i wyświetlającego platformę bezpośrednio do metody OnPlayerTouch()
. Funkcję Sleep()
można wywoływać wyłącznie w kontekście asynchronicznym. Nie możesz dodawać specyfikatora suspends
do OnPlayerTouch()
, ponieważ TriggeredEvent
nie zezwala na funkcje asynchroniczne jako jego procedury obsługi zdarzeń. Zamiast tego możesz użyć spawn
, aby wywołać funkcję asynchroniczną z OnPlayerTouch()
. Aby dodać funkcję asynchroniczną, wykonaj poniższe kroki.
-
Dodaj nową metodę
RecyclePlatform()
do definicji klasydisappear_on_touch_platform
. Dodaj modyfikator<suspends>
, aby umożliwić asynchroniczne działanie tego kodu, oraz przenieś kod ukrywania i wyświetlania platformy i wyzwalacza zOnBegin
do bloku koduRecyclePlatform()
.# Ukrycie platformy i reset PlatformTrigger. # Następnie odczekaj losową ilość czasu i ponownie włącz wyświetlanie platformy. RecyclePlatform()<suspends> : void = # Odczekaj przez czas określony przez DisappearDelay liczony w sekundach. Sleep(DisappearDelay) # Ukryj platformę i wyłącz wyzwalacz. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Odczekaj przez czas określony przez DelayMin i DelayMax liczony w sekundach. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Wyświetlaj platformę i włącz wyzwalacz. DisappearingPlatform.Show() PlatformTrigger.Enable()
-
W
OnPlayerTouch()
wywołajspawn{}
naRecyclePlatform()
, aby uruchomić kod asynchronicznie. Gotowa funkcjaRecyclePlatform()
powinna wyglądać następująco:# Uruchamia się, gdy gracz ląduje na platformie. Wywołuje RecyclePlatform(), aby ukryć platformę # i resetuje stan wyzwalacza. OnPlayerTouch(ActivatingPlayer:?agent):void= if: Player := ActivatingPlayer? then: Print("Gracz dotknął platformy!") spawn{ RecyclePlatform() }
Po wykonaniu tego kodu, gdy gracz wyląduje na platformie po raz pierwszy, platforma zniknie, a potem pojawi się ponownie.
Asynchroniczne oznacza, że wykonanie danego fragmentu kodu może trochę potrwać. Np. w tym przypadku pełny cykl zmian platformy trwa kilka sekund ze względu na wszystkie wywołania
Sleep()
. Funkcje asynchroniczne umożliwiają wykonanie operacji bez blokowania wykonania kodu, który wywołuje funkcję asynchroniczną. Aby dowiedzieć się więcej na temat kontekstów asynchronicznych i wyrażeniaspawn
, zapoznaj się z pojęciem współbieżności. -
Obecnie
TriggeredEvent
jest wysyłane tylko, gdy gracz ląduje na platformie po raz pierwszy. Aby ponownie umożliwić wyzwalanie zdarzenia, można wywołać opcję resetu wyzwalacza. WRecyclePlatform()
wywołajReset()
naPlatformTrigger
po wywołaniuEnable()
.# Ukrycie platformy i reset PlatformTrigger. # Następnie odczekaj losową ilość czasu i ponownie włącz wyświetlanie platformy. RecyclePlatform()<suspends> : void = # Odczekaj przez czas określony przez DisappearDelay liczony w sekundach. Sleep(DisappearDelay) # Ukryj platformę i wyłącz wyzwalacz. DisappearingPlatform.Hide() PlatformTrigger.Disable() # Odczekaj przez czas określony przez DelayMin i DelayMax liczony w sekundach. Sleep(GetRandomFloat(DelayMin, DelayMax)) # Wyświetlaj platformę i włącz wyzwalacz. DisappearingPlatform.Show() PlatformTrigger.Enable() # Reset liczby możliwych wyzwoleń, które może wykonać PlatformTrigger. PlatformTrigger.Reset()
-
Zapisz skrypt i kliknij Verse, następnie Skompiluj kod Verse, aby skompilować kod.
-
Na pasku narzędzi UEFN kliknij Uruchom sesję, aby przetestować poziom w grze.
-
Teraz, podczas testowania poziomu w grze, każda platforma powinna znikać, gdy na niej lądujesz, i pojawiać się ponownie po kilku sekundach.
Kompletny skrypt
Poniższy kod to kompletny skrypt do ukrywania platformy, gdy gracz na niej wyląduje, i wyświetlania jej ponownie po upływie losowej liczby sekund.
using { /Fortnite.com/Devices }
using { /Verse.org/Random }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Odwiedź stronę: https://dev.epicgames.com/documentation/pl-pl/uefn/create-your-own-device-in-verse, aby dowiedzieć się, jak utworzyć urządzenie Verse.
# Urządzenie trybu kreatywnego utworzone w Verse, które można umieścić w poziomie
disappear_on_touch_platform := class(creative_device):
# Jak długo czekać przed ukryciem platformy, gdy gracz jej dotknie.
@editable
DisappearDelay:float = 1.0
# Minimalny czas oczekiwania przed ponownym wyświetleniem platformy.
@editable
DelayMin:float = 3.0
# Maksymalny czas oczekiwania przed ponownym wyświetleniem platformy.
@editable
DelayMax:float = 4.0
# Odwołanie do platformy na poziomie.
@editable
DisappearingPlatform:creative_prop = creative_prop{}
# Strefa, w którą gracz wchodzi po lądowaniu na platformie.
@editable
PlatformTrigger:trigger_device = trigger_device{}
# Działa po uruchomieniu urządzenia w aktywnej grze
OnBegin<override>()<suspends>:void=
# Subskrybuj wydarzenie TriggeredEvent z PlatformTrigger, aby być na bieżąco
# gdy gracz ląduje na platformie.
PlatformTrigger.TriggeredEvent.Subscribe(OnPlayerTouch)
# Uruchamia się, gdy gracz ląduje na platformie. Wywołuje RecyclePlatform(), aby ukryć platformę
# i resetuje stan wyzwalacza.
OnPlayerTouch(ActivatingPlayer:?agent):void=
if:
Player := ActivatingPlayer?
then:
Print("Gracz dotknął platformy!")
spawn{ RecyclePlatform() }
# Ukrycie platformy i reset PlatformTrigger. # Następnie odczekaj losową ilość czasu i ponownie włącz wyświetlanie platformy.
RecyclePlatform()<suspends> : void =
# Odczekaj przez czas określony przez DisappearDelay liczony w sekundach.
Sleep(DisappearDelay)
# Ukryj platformę i wyłącz wyzwalacz.
DisappearingPlatform.Hide()
PlatformTrigger.Disable()
# Odczekaj przez czas określony przez DelayMin i DelayMax liczony w sekundach.
Sleep(GetRandomFloat(DelayMin, DelayMax))
# Wyświetlaj platformę i włącz wyzwalacz.
DisappearingPlatform.Show()
PlatformTrigger.Enable()
# Reset liczby możliwych wyzwoleń, które może wykonać PlatformTrigger.
PlatformTrigger.Reset()
We własnym zakresie
Po ukończeniu tego samouczka wiesz, jak przy użyciu Verse utworzyć urządzenie, dzięki któremu platforma znika, gdy gracz na niej wyląduje, i pojawia się ponownie po upływie losowej liczby sekund.
Wykorzystując zdobytą wiedzę, spróbuj wykonać następujące czynności:
-
Poeksperymentuj z różnymi rozmiarami i pozycjami platform, aby utworzyć interesujące wyzwanie.
-
W tym przykładzie gracz nie zdobywa żadnych punktów, a gdy spada z platformy, nic się nie dzieje. Zastanów się, w jaki sposób można zaimplementować system punktacji i warunek przegrania gry.