Ukázky programů v C++

Robot Karel a jednoduchá grafika

Na úplném začátku si obvykle jdeme hrát s nesmrtelným robotem Karlem. Ten je skvělý na pochopení základních programátorských dovedností. Naučíme se přemýšlet o úloze jako programátor – rozmyslet poslupnost dílčích operací, které povedou k řešení problému. Naučíme se tvořit cykly, větvit program a větší celky rozkládat na jednotlivé dílčí funkce. Jakmile získáme jistotu a způsob zápisu programovacího jazyka přestane dělat potíže, můžeme jít dál.

Přidáme do svých programů proměnné, naprogramujeme něco textového a brzy na to si začneme hrát i s jednoduchou grafikou. Naučíme se kreslit po obrazovce, určovat souřadnice a slabší povahy lehce zalapají po dechu, když zjistí, že pro nakreslení kruhu se hodí znalost Pythagorovy věty. A hlavně schopnost své znalosti matematiky prakticky použít! ;-) Naučíme se i zobrazovat připravené obrázky, reagovat na klávesnici a myš, a postupně krůček po krůčku se nám začne líhnout základ jednoduché grafické hry.

Samostatná práce

Je skvělé, když programování studenta chytne a má čas si občas něco zkusit i doma. Nemusí tomu věnovat přespříliš času, důležitá je spíše pravidelnost. To pak mu umožní jít dopředu mnohem rychleji a jistěji.

Z těchto prográmků jsem měl velkou radost, protože je moji studenti udělali úplně sami doma po cca dvou měsících docházky do kroužku. Sotva jsme si začali hrát s grafikou a ještě jsme se nedostali ani k probrání složených datových struktur, jako jsou pole či seznamy.

A bez nich není snadné rozpohybovat třeba pět střel najednou. Ondra ale omezení šikovně obešel jen s použitím obyčejných proměnných. Díky tomu sice program nebyl pěkný na pohled, ale hned jsme měli praktickou motivaci naučit se něco nového a zjednodušit si život. Žirafáček zase pěkně vyřešil pohyb duchů a povedlo se mu trefit obtížnost umělé inteligence tak akorát.

Arkanoid, had, raketa…

Patří k jednodušším programům. Pro zobrazení grafiky používáme knihovnu SDL, ale studenti mají k dispozici jednoduchou OOP nadstavbu pro reprezentaci objektů na obrazovce. Řeší se zde problematika vhodných datových struktur pro ukládání objektů (jednotlivý objekt vs. statické pole objektů vs. dynamický spojový seznam) a detekce kolizí.

U Arkanoidu pak navíc ještě prozkoumáme, jaký je rozdíl mezi kartézskými a polárními souřadnicemi a jak mezi nimi přecházet. Volitelně je možné využít dědičnost a polymorfismus pro reprezentaci různých druhů cihel či bonusů, které se liší svým chováním a jaké pro tyto objekty navrhnout společné rozhraní. Tím obvykle zakončíme první rok chození do kroužku, ale řada dětí chodí dál a dál, s nimi pak můžeme pustit i do obtížnějších a větších projektů.

Pacman

Těžiště programu spočívá hlavně v problematice vhodné reprezentace mapy (např. binární čísla a logické operace) a její nahrávání ze souboru. Nad mapu navrhneme vhodné API, které umožní snadné plánování pohybu duchů po bludišti (různé algoritmy umělé inteligence).

Liero

Vojtovo Liero patří už k náročným dlouhodobým projektům, ve kterých se kombinuje a rozvíjí řada znalostí a dovedností. Pro vykreslování grafiky používáme knihovnu SDL přímo a stavíme si vlastní mezivrstvu, která umožňuje kreslit více pohledů (více oken) současně na jednu scénu. Zajímavou výzvou je i herní fyzika – postava se pohybuje po terénu, jehož tvar se mění v průběhu hry a tak detekce kolizí musí fungovat v jakkoliv tvarované chodbě. Celá škála různých objektů, které se ve hře fyzikálně pohybují, nabádá k tvorbě promyšlené hierarchie tříd, aby programátor stejný kód neopakoval vždy znovu a znovu.

Osg Racing

Kryštofův program rozvíjíme už řadu let. Vykreslování je postaveno na knihovně OpenSceneGraph, fyzika je počítaná knihovnou Bullet a po síti komunikujeme Enetem. Jedná se o náš nejrozsáhlejší program, který jsme v kroužku vytvořili.