Alternativní závěrečný projekt - Had#12
Conversation
| Na lekci jsme načtený obrázek ukládali do tzv. Spritů, abychom jimi | ||
| pak mohli pohybovat a dosáhli plynulého pohybu. Tady bude situace jednodušší, | ||
| protože se obejdeme bez plunylého pohybu a tak nám stačí obrázek několikrát | ||
| vykreslit na vyprázdněnou plochu. |
There was a problem hiding this comment.
Důvod pro Sprite proti blit je spíš že se dá otáčet (a pak obarvovat atd.)
There was a problem hiding this comment.
Má poznámka o plynulém pohybu vycházela z toho, že Sprite se dá vložit do batch a tím vykreslovat rychleji a v dynamických hrách s plynulým pohybem mnoha objektů tak zajistit dostatečnou rychlost a plynulost. Mělo to fungovat jako takový odkaz na Asteroidy, kde se tohle řeší. Něco jako: „V Asteroidech kolegyně vedle tebe řeší plynulý pohyb, ale ty se bez toho obejdeš“ pro ty méně zdatné a bojácné a „V Asteroidech na tebe čeká nová výzva s podobě plynulého pohybu mnoha objektů najednou“ pro ty odvážné.
Má smysl tu moji myšlenku rozvinout a v tomhle duchu to upravit, nebo to naopak zjednodušit a jako důvod nevyužití Sprite dát že je nepotřebujeme otáčet?
There was a problem hiding this comment.
Myslím že má cenu používat Sprite.
Jo, ještě jedna věc: Sprite řeší průhlednost. Když používáš jen blit, je potřeba docela neintuitivním „zaříkadlem“ zapnout alpha blending:
pyglet.gl.glEnable(pyglet.gl.GL_BLEND)
pyglet.gl.glBlendFunc(pyglet.gl.GL_SRC_ALPHA, pyglet.gl.GL_ONE_MINUS_SRC_ALPHA)Na workshopu to je pro ušetření času.
There was a problem hiding this comment.
Jaký zvolit kompromis mezi optimalizací a složitostí implementace?
- Jednoduše vytvořit
Sprite, vykreslit, zahodit - Udržovat si seznamy
Sprite(pro každý kousek hada jeden, pro každé ovoce jeden), měnit jejich souřadnice a při použití obrázků i obsah a po jednom je vykreslovat - Udržovat si jejich seznam jako v předchozím bodě a navíc mít všechny v
batcha vykreslovat je tedy najednou
První varianta sice není optimální, ale zase je to jednoduché.
There was a problem hiding this comment.
Ostatní můžeš nechat na rozšíření :)
|
Jen taková myšlenka: zásadní rozdíl mezi CLI a GUI aplikací je, že v CLI spustíš |
|
Předchází tomu Grafika, kde je to vysvětlené. Případně se dá použít kratší vysvětlení z workshopu. |
Je to jak píše Petr. Předchází tomu lekce o grafice, kde se o těchto speciálních funkcích dozví vše potřebné. Abychom se tady vyhnuli slepencům, je tam na začátku poznámka, že mají začít s novým souborem a do hotových programů se dívat jen pro radu a připomenutí a nestavět to přímo na nich. |
|
Uvidíme, zda předpoklady budou splněny i v praxi :) Zase je hezký, že tu úlohu (hada) už znají, takže uvidí více způsobů řešení jedné věci, než furt něco úplně nového. |
f7bf8bb to
377c843
Compare
|
Dopsáno, doplněno, upraveno, připraveno na review. @Glutexo slíbil review a korekturu i s vlastním testem implementace, ale jakýkoli postřeh je vítán. |
| if new_x >= self.width: | ||
| self.snake_alive = False | ||
| if new_y >= self.height: | ||
| self.snake_alive = False |
There was a problem hiding this comment.
Možná jestli by nebylo jednodušší a i zajímavější, kdyby hrací plocha byla cyklická? Tj. vylezu vpravo, přilezu zleva :)
There was a problem hiding this comment.
Logika je pak jednodušší, ale o hodně to zesložití vybírání správných obrázků pro části hada.
There was a problem hiding this comment.
@messa Je to jedna z možností rozšíření. Postupujeme tak, jak se vyvíjel had na Nokiích a vycházíme z hada z domácích projektů, kde také byla plocha ohraničená.
|
Pořád si říkám, jestli by první krok nemohl být také s pohybem po stisku klávesy. Bylo by to mozkově bližší konzolovému hadu. Tikaní by se mohlo přidat až jako další krok, čímž by se z grafické podoby konzolového hada stal nokiácký první had. |
Přemýšlím nad tím.
Dokážu si představit oboje, ale mám obavu z jedné věci. Když budou volat v prvním kroku funkci po pohyb hned po té, co nějak nastaví směr v závislosti na stisknuté klávese, mohlo by pro ně pak být komplikované přenést směr pohybu do nějakého globální proměnné či třídy tak, aby směr byl nastaven vždy a stisk klávesy jej jen změnil. Přeci jen při přesunu volání funkce pro pohyb z události pro stisk klávesy do události pro tik dojde ke změně kontextu a proměnná obsahující stisknutou klávesu bude najednou nedosažitelná. Můj popis mi příjde více jako programování a doplňování funkcionality v logickém sledu, zatímco u tebe to vnímám spíše jako refaktoring po té, co zjistím, že to potřebuji udělat jinak, aby se had hýbal automaticky. Netvrdím, že je to problém, ale napadlo mě to. Co na to @encukou ? |
|
Povídali jsme si o tom s @mcurlej. Prosím o komentář. |
|
S tím sledem ti musím dát za pravdu. Jsem ale na vážkách, je-li to dobře. Ono to pak vypadá jak recept z kuchařky. Přitom úprava s důsledky přesahujícími do jiných částí kódu je docela cenná zkušenost. A co na to ten @encukou? 😄 |
|
Já nejsem proti, aby základní hra byla jako podle kuchařky, protože zásahy do kódu napříč funkcemi budou muset dělat při implementaci každého rozšíření. Na základní hře bych jim rád ukázal, že když si to dobře rozmyslí, mohou implementovat krok za krokem. Mimochodem ani to samozřejmě neznamená, že nebudou kusy kódu měnit v průběhu, protože i přes podobu kuchařky tam mají spoustu možností volby a ne všechny se musí povést na první pokus. |
|
Pak ale není problém nasměrovat to ukládání směru nějakým doporučením tak, aby to pak nebylo potřeba měnit. |
Tohle je přesně důvod, proč to ve workshopu je v tomto pořadí. Přejít z toho, že je stav hry rozhozený po globálních seznamech na něco, kam je možné jednoduše dát i aktuální směr, není triviální. Na kurzu je potřeba vždycky v každém kroku řešit jen jednu netriviální věc, jinak se v tom lidi ztratí. Možná mějte stav hry v třídě hned od začátku (možná s vysvětlením proč je to dobré). Pak by, myslím, oba přístupy byly zhruba na stejno. |
👍🏻 Tak máme třídu State, která je na to přímo dělaná. Její mání od začátku mi stále více připadá zásadní a rozestrkávání těchto informací jinam akorát zvyšuje entropii (čti: dělá bordel). |
Upravil jsem to v tomto duchu a je tam tedy zmíněno, že by měly od samého počátku používat minimálně jednu třídu pro stav hry. Je poznámka: Ta implementace přiložená k tomuto projektu je čistě ukázková a pro nás (pro představu) a nebude nikde zmíněna pro účastnice, takže mezi textem a touto implementací nemusí existovat žádná spojitost. Implementace asteroidů se také používá jen jako motivace pro holky, pro ukázku fungování v jednotlivých fázích a nikde neni k dispozici veřejně. |
|
Tumáš jazykovou korektūru. Co do obsahu, teďka po vyzdvihnutí stavové třídy bych nic zásadního proti neměl. Přechod ze skokového ovládání na časované jsme zavrhli. Přidám sem jen pár takových polovýhrad, co jsem psal na Slacku:
Pokud bych ještě na něco narazil, tak bych ještě dal vědět. Ale klidně bych to pustil, jak to je. |
* Doplněny pevné mezery za jednopísmenné předložky. * Doplněny mezery kolem symbolů. * Spojovníky nahrazený pomlčkami. * Doplněny pevné mezery po jednopísmenných spojkách. Doplněny chybějící čárky – ohraničující vedlejší věty a vyjadřující vylučovací poměr. Doplněny pomlčky ohraničující vedlejší větný celek. Odebrány pomlčky ze slovních spojení, ve kterých se nepoužívají. Odkaz na stránku Wikipedie o hře had obsahuje závorky. Kvůli tomu byl použitý Markdown rozbitý. Závorky opatřeny lomítkem, čímž byl odkaz opraven. My si hrajeme **s** hadem, ale funkce hýbe hadem. Mačkáš mi hada, debile! Doplněno pár slov do vět, které moc nedávaly smysl, byly skladebně špatně nebo se mi jen nelíbily.
6589087 to
1478c1f
Compare
|
Udělal udělal jsem squash na jednotlivé commity. Aktuálně je tam jeden se samotným projektem a jeden s opravami od Glutexa. Myslím si, že jsme připraveni to pustiti do světa. Kdo stiskne to magické tlačítko nebo dá alespoň svolení? |
|
Tohle repo je pro podzim 2018. PR nezasahuje do ostatních kurzů. Jako lektor v Ostravě nepotřebuješ svolení někoho jiného :) |
|
Udělá někdo cherry-pick na naučse? Mám na to založit issue? |
|
Založ issue, ale myslím že by se to mělo obecně dělat až po "live" vyzkoušení. |
Pracuji na alternativní závěrečném projektu pro začátečnický kurz. Stavím přitom na hadím workshopu. Sem to dávám, kdyby se na to chtěl někdo mrknout ještě v průběhu příprav a pomoci mi odhalit chyby.
Hlavní vlastnosti:
Možná to zní „tvrdě“, ale chci aby si z toho něco odnesly i ty, které se cíleně rozhodnou pro snazší projekt. Tady se nenaučí tolik nového jako v Asterodiech, ale zase je to tak rychle neodradí, protože celkem snadno dojdou k funkční variantě a snad je to motivuje pokračovat v rozšířeních a popustit uzdu fantazii.
Názory?
Češtinu opravím pak najednou všude, takže prosím na ni v tuto chvíli nehledět.