Jak udělat hru zábavnou
Až herní smyčka funguje, dolaď čtyři věci: hlavní akci hráče, odezvu, obtížnost a rozsah. Laťka není „běží to” — je to zábava v prvních 10 sekundách. Stránka Herní vzory ukazuje k těmto myšlenkám kód.
Začni hlavní akcí
Sekce “Začni hlavní akcí”Než pojmenuješ sloveso, rozhodni fantazii — čím hráč je. „Chytání” je jiná hra jako uspěchaný kuchař, brankář, nebo někdo, kdo zachraňuje padající hvězdy. Vyber fantazii, pak sloveso na jedno slovo: skok, střelba, řízení, spojování, uhýbání. Postav kolem něj cyklus: akce → výsledek → reakce hráče → další akce v nových podmínkách.
Takhle těsná smyčka má být čitelná pouhým pozorováním po deset sekund a zábavná bez grafiky a zvuku.
Vyzkoušej ji s tvary z picogame_shapes dřív, než uděláš finální grafiku — pokud není zábavná jako
obdélník honící kolečko, lepší grafika ji nezachrání. Uprav nejdřív pravidla a odezvu.
Dej akcím okamžitou odezvu
Sekce “Dej akcím okamžitou odezvu”Odezva propojí vstup nebo kolizi s výsledkem, který hráč vidí a slyší, a spustí se ve stejné aktualizaci, která událost zpracovala — opožděná odezva působí těžkopádně i při 30 fps. Ne každá odezva je stejně levná. Zhruba v pořadí zábavy získané za utracený bajt:
-
Zvuk u hlavní akce — nejvíc muziky za nejmíň kódu; pípnutí potvrdí, co oko už vidělo. Nejjednodušší pípnutí nepotřebuje
.wav:beep = picogame_audio.tone(880, 90) # krátký vysoký blip, vytvořený jednouaudio.sfx(beep) # spusť ho ve snímku, kdy nastane chyceníVýznam nese průběh — vysoký zní jako dobře, nízký jako špatně. Hotový kit
picogame_sfxdá obojí:Chycení (lehký blip):
Minutí (nízký, klesající tón): -
Krátký záblesk při zásahu — nastav opaque pixely spritu na plochou bílou na 1–3 snímky a pak zhasni. Skoro zdarma:
spr.flash = pg.rgb565(255, 255, 255) # při nárazuspr.flash = 0 # o 2 snímky později: zpět do normálu
-
Mírný otřes obrazovky —
picogame_fx.Shake, pár pixelů, rychle doznívající. Víc už působí jako šum, ne náraz:shaker.add(0.6) # při zásahu — trauma se umocňuje, malé události sotva zatřesoushaker.tick(0, 0) # každý snímek (sem vlož offset kamery, pokud ji máš)
-
Krátké pozastavení (hit-stop) — zmraz simulaci na 2–8 snímků při velkém zásahu; náraz pak sedne. Engine na to nemá primitivum — přeskočíš vlastní ticky:
freeze = 4 # při velkém nárazuif freeze > 0: # na začátku smyčky, dokud mrzneme:freeze -= 1; clock.tick(); continue -
Malý výtrysk částic — pop nebo prstenec při chycení či skóre:
ps.emit(x, y, 16, 4, 24, pg.rgb565(255, 210, 120)) # výtrysk při událostips.tick() # každý snímek
Utrať první položku dřív než pátou — jeden dobrý zvuk překoná pět slabých částicových efektů. Sílu
efektu přizpůsob události a zachovej čitelnost hrací plochy; picogame_fx a nativní blit efekty pokryjí
většinu, viz Efekty a stránku vzory.
Obtížnost, která dýchá
Sekce “Obtížnost, která dýchá”Výzva má stoupat jako pila, ne po přímce: buduj napětí 20–40 sekund, uvolni ho u milníku (vyčištěná vlna, kontrolní bod), pak znovu přitáhni asi o 10 % víc. Plochý nárůst začne nudit do druhé minuty; monotónní stoupání hráči nedá vydechnout.
- Nejdřív zvyšuj rychlost, hustotu nebo pestrost, ne životy. Změní to způsob hraní místo prodlužování stejné situace.
- Hrozby oznam předem. Čitelný náběh a dost času na reakci — lidský práh je asi 250 ms (zhruba 8 snímků při 30 fps). Pod ním přestane zásah působit jako hráčova chyba.
- Buď velkorysý — tohle dělá hru férovou, ne snadnou: coyote time a jump buffer
(
picogame_input.Timer), i-frames po zásahu, aby jedna chyba nezřetězila smrt, hitbox menší než sprite hráče. - Restartuj pod půl sekundy. Obnov běh na místě; nikdy neposílej hráče přes menu, aby to zkusil znovu.
Drž rozsah pod kontrolou
Sekce “Drž rozsah pod kontrolou”Postav nejmenší úplnou verzi hlavní smyčky, zahraj si ji a teprve potom přidávej. Funkci vynech, pokud nemění hráčova rozhodnutí ani sílu odezvy — čtvrtý typ nepřítele, který hraje přesně jako první tři, není hloubka. Omezení RAM a časování cílového zařízení jsou užitečná hranice, ne jen překážka.
Co si hráči pamatují
Sekce “Co si hráči pamatují”Pokus se pamatuje podle vrcholu a konce, ne podle průměrného snímku. Dej každému běhu zřetelný vrchol a promyšleně zakonči: po neúspěchu ukaž výsledek, přidej poslední vizuální nebo zvukovou tečku a nabídni restart bez prodlevy. Tečka při smrti stojí málo a je to ona, kvůli které hráč znovu sáhne po tlačítku.
Před → po: hra na chytání
Sekce “Před → po: hra na chytání”Jednotlačítková hra — pohyb vlevo/vpravo, chytej padající tvary, tři minutí a končíš. Mdlá verze: ticho, tvary padají pořád stejnou rychlostí, text „GAME OVER”, žádná nápověda na restart. Po aplikaci myšlenek výše, od nejlevnějšího:
- Zvuk — blip při každém chycení, výrazný nízký žuchnutí při každém minutí. Jedno volání
picogame_sfx.Kit; okamžitě mění, jak každé chycení působí. - Záblesk — chycený tvar problikne bíle na 2 snímky, než opustí pool.
- Otřes — 3–4px
picogame_fx.Shakejen při minutí, doznívající půl sekundy — ne při každém chycení, jinak dobrou odezvu utopí v šumu. - Férovost — hitbox chytače je o pár pixelů užší než jeho sprite a tvar, který zavadí o okraj, se stále počítá. Bez toho působí minutí jako chyba hry, ne pomalá reakce.
- Pila obtížnosti — rychlost pádu a spawn rate se zvýší každých 5 chycení, každý krok ~10 % těžší, přičemž dvě sekundy po zrychlení necháš beze změny, ať se nová rychlost usadí.
- Peak-end — nejlepší série běhu se ukáže velká nahoře na game-over obrazovce, nad skóre; A okamžitě spustí nový běh.
Nic z toho nezměnilo pravidla chytání. Změnilo to, jak chytání působí — a o tom je celá tahle stránka.
Dál: vzory převádějí tyto principy do kódu; tutoriály je používají ve třech hrách.