If you're seeing this message, it means we're having trouble loading external resources on our website.

Pokud používáš webový filtr, ujisti se, že domény: *.kastatic.org and *.kasandbox.org jsou vyloučeny z filtrování.

Hlavní obsah

Plánování programovacího projektu

Stát se programátorem není jen o tom naučit se syntax a koncepty programovacího jazyka, je to hlavně o tom jak potom tyto znalosti použít k vytváření programů. V tomto kurzu jsme vytvořili spoustu programů, a to v rámci výzev a projektů, ale teď je potřeba přijít s nápady pro nové programy - nápady, které tě nadchnou do realizace - a pokusit se proměnit je v opravdové programy.
Pravděpodobně nebudeš znát vše, co pro svůj program potřebuješ, když na něm začneš pracovat, a to je zcela v pořádku – bude to pro tebe motivací se tyto nové věci kvůli tomu naučit, aby tak byl tvůj program uskutečněný. Programátoři se při nových projektech neustále učí nové věci a to je součást toho, proč to máme tak rádi.
Pojďme si projít proces toho jak plánovat programovací projekt:

1. Co chceš vytvořit?

Když jsem poprvé začala programovat, zjistila jsem, že neustále přemýšlím o nových programech, které bych chtěla udělat, a zapisovala jsem si je na seznam. Propadla jsem síle kreativity a bylo toho tolik, co chtěl můj mozek vytvořit. Pokud jsi na tom podobně, pak již pravděpodobně máš představu o tom, co chceš vytvořit, a možná máš i svůj vlastní seznam.
Pokud ještě nemáš žádný nápad, pak tu pro tebe máme několik otázek, které ti s vymýšlením můžou pomoci:
  • Jaká je tvá oblíbená hra - arkáda, desková hra, sportovní hra? Můžeš vytvořit její zjednodušenou, digitální verzi? Můžeš ji klidně trochu pozměnit jako například upravit téma nebo hlavní postavy.
  • Jaké jsou tvé další oblíbené disciplíny? Pokud máš v oblibě umění, můžeš vytvořit výtvarný program? Miluješ-li historii, co takhle vytvořit interaktivní časovou osu? Pokud miluješ vědu, co třeba vytvořit vědeckou simulaci?
  • Jaký je tvůj oblíbený film nebo seriál? Můžeš vytvořit digitální verzi scény nebo postavy? Můžeš vytvořit filmem inspirovanou hru?
  • Vzpomeň si na nějaký užitečný přístroj. Můžeš ho zkusit simulovat?
Jakmile máš nějaký nápad, je potřeba sepsat si jeho popis. Například pokud chci vytvořit klon hry "Breakout", protože je to moje oblíbená retro arkáda, můžu napsat:
Breakout: hra, ve které ovládáš pálku v dolní části obrazovky, a používáš ji k tomu, aby se ti povedlo odrazit míč nahoru v takovém úhlu, že dojde k rozbití cihel. Cílem je prolomit všechny cihly a zabránit opakovanému pádu míče na zem.
Tento popis můžeš rozvést později, ale prozatím ti dává dobrý základ k tomu, aby bylo možné pokračovat v procesu plánování.

2. Jaké technologie použiješ?

V tomto kroku musíš zvážit, které technologie (jazyky/knihovny/prostředí) znáš dobře, nebo se je dokážeš snadno naučit, a které z nich jsou pro práci na projektu nejvhodnější. Nejspíše bude na tvém seznamu jenom jedna položka, "1. JS+ProcessingJS", což usnadní tvoje rozhodnutí.
Naše prostředí JS+ProcessingJS funguje skvěle pro vytváření animací, her, vizualizací a simulací. Stačí se podívat na komunitní programy a podívat se na širokou škálu programů, které zde lidé vytváří.
Naše prostředí nefunguje pro věci jako jsou hry pro více hráčů, mobilní aplikace, nebo aplikace pro ukládání dat. Pokud znáš další jazyky/prostředí (jako JS+HTML, Python, SCRATCH, Swift, atd.) a chceš vytvořit něco, co nedává v ProcessingJS žádný smysl, potom zvaž, která z těchto technologií by byla pro tvůj program nejvhodnější. Pokud chceš tyto věci dělat, ale neznáš jiné technologie, budeš muset přijít s novým nápadem na program. Klidně se můžeš pro nový projekt naučit novou technologii, ale pokud právě začínáš programovat, je vhodnější nejprve se zlepšit ve tvém prvním jazyce
Pokud se rozhodneš udělat hru jako Breakout, vyber si k tomu JS+ProcessingJS, protože už to trochu znáš a víš, že funguje skvěle pro obdobné 2D hry.

3. Jaké prvky budou použity?

Zde se dostáváme do skutečného plánování a podle mě k té skutečně zábavné části. Tvým cílem v tomto kroku je přijít na to, co se ve skutečnosti snažíš udělat - jak to bude vypadat, jaké prvky to bude zahrnovat, a jaké prvky to zahrnovat nebude.
První věc, kterou můžeš udělat, je udělat program "nanečisto" - náčrty (mock-ups), které vypadají jako to, co se snažíš udělat, ale bez podrobností, jako je barva nebo přesná velikost. Programy nanečisto můžeš klidně vytvářet na papíře nebo pomocí online programů:
Pro lepší představu o tom, jak vypadají programy nanečisto (mock-ups), je níže připojený takový náčrt pro klon hry Breakout. Každá scéna je načrtnuta samostatně a pomocí šipek je znázorněno, jak jednotlivé scény na sebe navazují. Tyto šipky pomáhají pochopit logiku, kterou je nutné v programu použít, aby se mezi jednotlivými stádii programu dalo přecházet.
Náčrty pro klon hry Breakout
Tyto návrhy programu nanečisto můžeš použít k vytvoření seznamu prvků a o každém prvku tvého programu tak můžeš popřemýšlet.
Pro klon hry Breakout může seznam prvků rozdělený dle různých scén vypadat následovně:
Hra
  • Uživatelsky ovládaná pálka
  • Vícebarevné cihly
  • Pohyb míče pod různým úhlem
  • Detekce kolize
  • Zobrazení života
  • Zobrazení skóre
  • Zvukové efekty
Hlavní obrazovka
  • Tlačítko hrát
  • Tlačítko nápověda
Nápověda
  • Text
  • Tlačítko zpět
Výhra
  • Nadpis
  • Animace ohňostroje
Prohra
  • Text
  • Tlačítko spustit znovu

4. Ale jaké prvky musí být zahrnuty?

Pokud bychom měli nekonečné množství času k vytvoření všech našich nápadů na programy, pak by všechny tyto programy zahrnovaly všechny funkce na našem seznamu. Ale nekonečné množství času nemáme, takže v tomto kroku je potřeba rozhodnout se, které prvky jsou nejdůležitější, a které prvky budou použity pouze v případě, že na ně máme čas. To ti také pomůže zjistit to, v jakém pořadí implementovat prvky od těch nejdůležitějších po ty nejméně důležité.
Polož si tyto otázky pro určení důležitosti každého prvku :
  • Pokud chci program sdílet s kamarádem, které prvky chci, aby určitě fungovaly?
  • Které prvky chci nejvíce udělat?
  • Které prvky jsou v mém programu jedinečné?
  • Které prvky mi pomohou se nejvíce naučit, když je implementuji?
  • Jsou zde nějaké prvky, které dalece přesahují moji aktuální úroveň dovednosti?
Poté si projdi seznam prvků z posledního kroku a buď jej seřaď podle důležitosti, nebo ke každému prvku přidej míru důležitosti.
Pro seznam prvků klonu hry Breakout je vedle prvků umístěno označení "P1", "P2" a "P3", pro označení nejvyšší priority (P1), střední priority (P2) a nejnižší priority (P3). V tomto případě se upřednostnili unikátní herní mechaniky před všeobecnými herními prvky, protože je to v rámci tohoto projektu to nejzajímavější:
(P1) Hra
  • (P1) Uživatelsky ovládaná pálka
  • (P1) Vícebarevné cihly
  • (P1) Pohyb míče pod různým úhlem
  • (P1) Detekce kolize
  • (P1) Zobrazení života
  • (P1) Zobrazení skóre
  • (P1) Zvukové efekty
(P2) Hlavní obrazovka
  • (P2) Tlačítko hrát
  • (P3) Tlačítko nápověda
(P3) Nápověda
  • (P3) Text
  • (P3) Tlačítko zpět
(P2) Výhra
  • (P2) Nadpis
  • (P3) Animace ohňostroje
(P2) Prohra
  • (P2) Text
  • (P3) Tlačítko začít znovu
Jako obecný tip pro tvorbu her jsou zde uvedeny prvky, které by měly mít menší prioritu: menu, více úrovní, 3D grafika. Zaměř se na to, co je na tvojí hře jedinečné a zábavné, a pak teprve přidej tyto doplňky.
Můžeš také použít prioritizovaný seznam prvků jako různé verze projektu, ať snadno víš, co je potřeba v každé verzi implementovat, tím pádem můžeš po určité verzi přestat a stále mít radost, co všechno už projekt obsahuje.
Zde je příklad toho, jak by verze vypadaly pro klon hry Breakout:
V1
  • Uživatelsky ovládaná pálka
  • Vícebarevné cihly
  • Pohyb míče pod různým úhlem
  • Detekce kolize
V2
  • Zobrazení života
  • Zobrazení skóre
  • Začátek / tlačítko hrát
  • Výhra včetně nadpisu
V3
  • Zvukové efekty
  • Tlačítko nápovědy
  • Ohňostroje
  • Prohra včetně tlačítka spustit znovu

5. Jak to provedeš?

Nyní máš představu o tom, jaké prvky vybuduješ ve svém programu nejdříve - ale pokud začneš nyní, tvůj program bude prázdný, bez kódu, a to může být zastrašující. Které proměnné je potřeba napsat jako první? Které funkce?
Jedním ze způsobů, jak to zjistit, je zamyslet se nad "architekturou vysoké úrovně" tvého programu - rozdělit jej do kategorií, jako jsou "objekty", "logika", "uživatelská interakce", "uživatelská data" a "scény" - a pak popřemýšlet o tom, jak je můžeš implementovat jako objektově orientované typy objektů, funkce nebo proměnné.
Zde je příklad architektury pro klon Breakout:
Objekty
  • Cihla (.jeTrefena())
  • Pálka (.pohyb())
  • Míč (.pohyb())
Scény
  • Spustit
  • Hra
  • Konec
Logika
  • Náraz míčku do cihly (funkce, použití ohraničení)
  • Odraz míčku od pálky (funkce, opačný úhel)
Uživatelská interakce
  • Pohyb pálky pomocí klávesnice (zmáčknutáKlávesa)
  • Tlačítka pro změnu scény (zmáčknutaMyš)
Uživatelská data
  • Spadnuté míčky (array)
  • Zásahy míčkem (array)
Jakmile máš promyšlenou architekturu na vysoké úrovni, mělo by být jasnější, co je potřeba začít programovat jako první.
Nejdříve můžeš napsat celý program v pseudokódu, o kterém mluvíme později v tomto návodu. V podstatě to znamená psaní celého programu v prostém českém textu uvnitř komentáře a poté pomalu proměňovat komentáře ve skutečný kód.

6. Kolik máš času?

Kolik máš času na to udělat tento program? Kolik týdnů a kolik času každý den? Jaké prvky napíšeš každý týden? Tvým cílem v tomto kroku je stanovit si časový harmonogram pro svůj projekt - což je obzvláště důležité, pokud máš nějaký termín, do kterého to musí být hotovo, ale také užitečné pro úvahu kolik času trvá napsání daného programu.
Tady je časový harmonogram pro klon Breakout, za předpokladu 2-4 hodin práce každý týden:
  • První týden: Udělat design a napsat pseudokód
  • Druhý týden: Hrubé vizuály
  • Třetí týden: Pohybující se míč/mechanismy kolize
  • Čtvrtý týden: Mechanismy skórování
  • Pátý týden: Scény (Začít/Výhra/Prohra)
  • Šestý týden: Polština, Manuální testy (QA), příprava na spuštění
Určit časový harmonogram programovacích projektů je těžké. Některé věci, které se zdají být snadné, zaberou více času, než očekáváš (jako když se objeví nějaká podivná chyba, jejímž vylaďováním strávíš hodiny), a některé věci, které se zdají být těžké, zaberou méně času, než očekáváš. Jako obecné pravidlo je dobré předpokládat, že to bude trvat déle, než si myslíš, a v průběhu pak harmonogram uzpůsobovat.

Jdeš na to!?

Doufáme, že ti tento text pomohl porozumět procesu plánování programovacího projektu a inspiroval tě k zahájení vlastního projektu. V závislosti na tom, co chceš vytvořit, si můžeš projít jiné kurzy, jako Advanced JS: Games & Visualizations nebo Advanced JS: Natural Simulations (zatím pouze v angličtině), a získat tak inspiraci pro vytváření her a simulací.
Nejdůležitější je však začít vytvářet programy, protože právě tím se naučíš nejvíc, a při tom také nalezneš nejvíce radosti z programování, protože si uskutečníš své sny a nápady.

Chceš se zapojit do diskuze?

Zatím žádné příspěvky.
Umíš anglicky? Kliknutím zobrazíš diskuzi anglické verze Khan Academy.