Toto cvičení z Programování Ⅱ patří k přednáškám Tomáše Holana, je primárně určeno pro kruh 42 a probíhá každé pondělí od 15.40 do 17.10 v učebně SW2. Cvičím ho já, tzn. Jonáš Vidra. Kontaktovat mě můžete e-mailem na adrese příjmení@ufal.mff.cuni.cz. Nezdráhejte se mi napsat, pokud máte jakýkoliv problém – nestíháte úkol? Zapomněli jste heslo do ReCodExu? Nemůžete přijít na písemku nebo na hodinu? Objevili jste chybu v mém výkladu? Něco jste nepochopili? Máte málo bodů? To vše se dá vyřešit, ale musím o tom vědět.
Ujistěte se, že jste do této paralelky zapsáni v SISu a že jste v ReCodExu přiřazeni do příslušné skupiny. Pokud vás totiž budu chtít kontaktovat, budu používat právě tyto kanály a nezapíšete-li se, nebudete informováni o změnách. Přiřazování do ReCodExových skupin by se mělo nějak dít automaticky; v SISu se zapisujte sami, pokud vám to jde, nebo mi řekněte.
Také je potřeba, abyste se dokázali v laboratoři SW2 dostat k funkčnímu počítači s Visual Studiem. To znamená, že potřebujete login do malostranské sítě nebo vlastní laptop.
INT_MIN
nemá kladný protějšek.Main()
, třídy s výhradně statickými členy, základní typy int
, float
, char
a bool
, System.Console.{Read,ReadLine,Write,WriteLine}()
, podmíněný příkaz if-else
, cyklus while
.for
-cyklem. Stringy a základní práce s nimi, upozornění na neměnnost (immutability) stringů.+
pro string
(a na co dát pozor), interpolace ve WriteLine()
.Úhozů | Bodů |
---|---|
<68000 | 12 |
68000–69999 | 11 |
70000–71999 | 10 |
72000–73999 | 9 |
74000–75999 | 8 |
76000–77999 | 7 |
78000–79999 | 6 |
≥80000 | 0 |
Where
a Select
), Dictionary
a tuple
s.PictureBox
u, ve kterém se najde Graphics
, na kterou kreslíme pomocí {Draw, Fill}{String, Ellipse, Rectangle, …}
perem (Pen
) nebo štětcem (Brush
). Periodická aktualizace simulace pomocí Timer
u nebo pomocí System.Diagnostics.Stopwatch
. Jednoduché řešení kolizí pomocí bounding boxů a na co si dát pozor.KeyPress
, nebo ve složitějších případech (kdy vás zajímá nejen stisk, ale i doba držení, což ve hrách bývá) KeyDown
a KeyUp
. Pokud chcete zjistit, kam uživatel kliká a řešit zároveň i tahání myši po kliknutí, můžete použít handlery mouseDown
a mouseUp
(třeba na okně nebo na PictureBox
u) a v mezičase mezi těmito dvěma eventy číst globální Cursor.Position
. Pozor na to, že tato pozice udává souřadnice vůči obrazovce. Pokud chcete vědět souřadnice uvnitř okna, převedete je do lokálních uvnitř Control
(třeba PictureBoxu
) pb
pomocí pb.PointToClient(Cursor.Position)
.Abyste získali zápočet, musíte
Jednotlivé kategorie se vzájemně ovlivňují – pokud vám bude chybět pár bodů z úkolů, ale poctivě jste chodili a byli jste při hodinách aktivní, zápočet dostanete. A naopak.
Vypracujte úlohy, které vám chybí nebo které jste nezvládli dostatečně dobře. ReCodEx vám za ně nedá body, ale procentuální úspěšnost řešení spočítá. Poté mě kontaktujte. Dbejte na přehlednost a kvalitu kódu, nejen na správnost jeho běhu.
Nutnou podmínkou k získání zápočtu je napsání a obhájení zápočtového programu. Zápočtový program začíná výběrem tématu, kdy je iniciativa na vaší straně. Doporučuji vám výběr neodkládat. Po jeho schválení a vypracování samotného programu po vás budu žádat jeho předvedení (obhajobu) v malostranské počítačové laboratoři.
Téma programu si musíte sami vymyslet a předložit mi ho ke schválení. Na rozdíl od zimního semestru musí být program interaktivní real-time simulace, dobrým námětem jsou proto počítačové hry. Nemusíte vymýšlet vlastní, herní systém můžete okopírovat třeba z nějaké arkády z osmibitových počítačů – i když iniciativě se meze nekladou.
Vhodné jsou klony her třeba ze ZX Spectra, Atari 800XL, Commodore 64 nebo arkádových počítačů ze začátku 80. let. Příliš jednoduchý je Arkanoid, Tetris nebo Pong. Mezi jednoduché, ale už přijatelné patří Asteroids nebo Space Invaders, složitější jsou třeba Manic Miner, Boulder Dash, Atic Atac, 1942, Spy Hunter, Knight Lore, Jet Set Willy nebo Sabre Wulf. Nenechte se ale omezovat předvýběrem – je vás 20, takže očekávám rozmanitost. Pokud přijdete s originálním nápadem, chci podrobnější zadání, aby bylo na konci jasné, jestli jste udělali, co jste slíbili.
Jakmile máte téma, je potřeba sepsat detailnější zadání, tedy seznam vlastností, které má výsledný program mít. Pokud se inspirujete existující hrou, stačí poslat odkaz na video zachycující průběh hry a popsat případné odchylky od originálu. Někdy je potřeba se rozepsat, ale většinou jako zadání stačí odrážkový seznam nebo dva-tři odstavce textu. Ze zadání by mělo být zjevné, jak bude vypadat uživatelské rozhraní, tedy jaký bude výstup a způsob ovládání. V tuhle chvíli už byste měli mít rozmyšlené hrubé rysy implementace. Zadání si opět nechte schválit, předejdete tak nepříjemnostem.
Pak přichází na řadu vypracování programu, testovacích vstupů a dokumentace, které je zcela ve vaší režii.
Jazykem zápočtových úloh je C♯ + čeština / slovenština / angličtina. Jiné jazyky je možné použít po předchozí domluvě – bez problémů je připustím, bude-li váš zápočťák úloha z praxe a jazykem nebude Pascal.
Doporučuji vám vyzkoušet, že se program dá zkompilovat a spustit na počítačích v labu – prostředí mého, vašich a školních počítačů mohou být odlišná a dobře napsaný program by sice měl běžet všude, ale v případě problémů budu programy testovat ve škole.
Zdrojové kódy a všechna potřebná data odevzdávejte v archivu e-mailem, dokumentaci dodejte v nějakém rozumném formátu, nejlépe jako PDF nebo archiv s prolinkovanými HTML soubory. Prosím, nepoužívejte .doc a podobné formáty – pokud budete dokumentaci psát ve Wordu, vyexportujte mi ji do PDF. Pokud jsou soubory velké (více než jednotky megabajtů), vystavte je na web a pošlete mi odkaz. Neposílejte EXE soubory a zbytečný obsah – před odesláním projektu ve Visual Studiu proveďte Clean Solution.
Po odevzdání se můžou stát tři věci: buď program rovnou schválím (v případě, že skutečně nebudu mít žádné připomínky), nebo vám ho rovnou vrátím k dopracování (pokud budou mé výhrady velké), nebo si vás pozvu na schůzku, na které mi program předvedete a obhájíte (většinový případ).
Na přečtení a ohodnocení programu potřebuji alespoň týden a pak si musíme domluvit společný termín schůzky. Termín odevzdání proto stanovuji na 14. července. Neznamená to, že při odevzdání 1. srpna už nedostanete zápočet, ale po uplynutí termínu vám negarantuji ohodnocení – čím pozdější odevzdání, tím menší máte šanci, že se k vašemu programu dostanu včas. Naopak velmi doporučuji odevzdat program co nejdříve – nejenže vás budu mít rád, ale hlavně dostanete možnost opravit případné nedostatky..
Zápočtový program je hodnocený podle následujících kritérií, v pořadí podle klesající důležitosti:
Totální selhání v libovolném bodu automaticky znamená neúspěch, ale první čtyři body jsou posuzovány přísněji než zbylé dva. Jak tedy vidíte, je lepší odevzdat dobře dokumentovaný stabilní program se dvěma funkcemi, než padající zmetek s deseti funkcemi bez návodu.
Potřebujete-li cokoliv, obraťte se na mě po hodině nebo e-mailem. Osobní konzultace jsou možné po domluvě v kanceláři S409.
Programy se předvádějí v malostranském labu, v SW2 nebo někde poblíž – podle toho, kde bude volno.