☝ 01_pole_gry
Etap 1 — Pole gry (plansza)
Plik: 01_pole_gry.html
01_pole_gry
Co tu powstaje?
-
Strona z tytułem i opisem.
-
Prostokątna plansza (div .board) – jeszcze nic się nie rusza.
Najważniejsze elementy
-
Zmienne CSS w :root
-
--w i --h trzymają wymiary planszy.
-
Dzięki temu łatwo zmienić rozmiar w jednym miejscu.
-
-
Wyśrodkowanie całej strony
-
body { display: grid; place-items: center; }
-
Prosty sposób, żeby wszystko było na środku.
-
-
Plansza .board
-
border tworzy ramkę.
-
position: relative jest kluczowe: wszystko, co będzie w środku z position: absolute, liczy pozycję względem tej planszy.
-
overflow: hidden ucina elementy, które “wyjadą” poza planszę.
-
☝ 02_ziemia_i_kwadrat
Etap 2 — Ziemia i postać (kwadrat)
Plik: 02_ziemia_i_kwadrat.html
02_ziemia_i_kwadrat
Co dodajemy?
-
Linię “ziemi” (div .ground)
-
Czarny kwadrat (div .square) — na razie stoi w miejscu
Najważniejsze nowe pojęcia
-
position: absolute
-
.ground i .square są pozycjonowane absolutnie względem .board, bo .board ma position: relative.
-
-
Linia ziemi
-
left: 0; right: 0; → rozciąga na całą szerokość.
-
bottom: 34px → podnosi linię nad dół planszy.
-
-
Kwadrat
-
Ma rozmiar --size.
-
Ustawiony przez left: 20px; top: 46px;
-
☝ 03_ruch_css_keyframes
Etap 3 — Ruch kwadratu (animacja CSS)
Plik: 03_ruch_css_keyframes.html
03_ruch_css_keyframes
Co dodajemy?
-
Animację CSS, dzięki której kwadrat “ucieka” po planszy.
Kluczowe mechanizmy
-
@keyframes roam
-
To “scenariusz ruchu” zapisany w procentach czasu.
-
Każdy punkt ustawia transform: translate(x, y).
-
-
animation na kwadracie
-
animation: roam var(--speed) linear infinite;
-
var(--speed) steruje czasem: większe = wolniej.
-
linear = stałe tempo (bez przyspieszania i zwalniania).
-
infinite = zapętlenie.
-
-
Dlaczego transform, a nie left/top?
-
transform jest zwykle płynniejszy i wydajniejszy.
-
will-change: transform sugeruje przeglądarce, że element będzie animowany.
-
-
Responsywność
-
Jest @media (max-width: 560px) → zmniejsza planszę i kwadrat na małych ekranach.
-
☝ 04_final_zlap_kwadrat
Etap 4 — Final: “Złap kwadrat” bez JavaScript
Plik: 04_final_zlap_kwadrat_bez_js.html
04_final_zlap_kwadrat_bez_js
Cel etapu
Zrobić “mechanikę gry” bez JS, używając sprytnego triku:
-
ukryty checkbox przechowuje stan gry: złapany / nie złapany
-
kwadrat jest <label>, więc kliknięcie go zaznacza checkbox
Jak to działa krok po kroku?
-
Stan gry = checkbox
-
<input id="caught" type="checkbox" />
-
Jest niewidoczny (opacity 0) i nieklikalny (pointer-events none), ale nadal działa.
-
-
Kwadrat to label
-
<label for="caught" class="runner"></label>
-
Kliknięcie w label automatycznie przełącza checkbox #caught (to HTML-owa funkcja formularzy).
-
-
Zatrzymanie ruchu po złapaniu
-
CSS:
-
#caught:checked ~ .board .runner { animation-play-state: paused; }
-
-
Czyli: jeśli checkbox zaznaczony → wstrzymaj animację.
-
-
Komunikat “ZŁAPANY!”
-
.msg jest na środku planszy, ale domyślnie opacity: 0.
-
Po złapaniu:
-
#caught:checked ~ .board .msg { opacity: 1; }
-
-
-
Reset gry też bez JS
-
Reset to drugi label wskazujący na ten sam checkbox:
-
<label class="reset" for="caught">ZAGRAJ JESZCZE RAZ</label>
-
-
Kliknięcie go przełącza checkbox z powrotem (odznacza) → gra wraca do stanu “nie złapany”.
-
-
Dodatkowe utrudnienie (hover = szybciej)
-
Gdy najedziesz na planszę/kwadrat, czas animacji się skraca (robi się trudniej trafić).
-
Komentarze
Prześlij komentarz