IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Soutěž: Machr na OOP - Hra v Dart

Soutěž již skončila

Zadání

Cílem soutěže je vytvořit autonomní konzolovou hru v jazyce Dart (žádné jiné jazyky nebudou akceptovány – tato soutěž je zaměřena právě na seznámení s jazykem Dart).

Každá hra na začátku vygeneruje náhodná herní data, které bude mít program za úkol postupně zpracovat až do finální podoby, např. určení výherce či určení finálního stavu. Hra si data zpracuje sama, zásah ze strany uživatele (např. standardní vstup) není povolen.

Ukázkové řešení, volně inspirované arénou z lokálních tutoriálů, je dostupné na https://github.com/…-sample-game. V tomto řešení hra vygeneruje náhodné postavy do herního turnaje, kde každá postava má náhodou třídu, počty životů a sílu útoku. Postupně, turnaj je členěn na jednotlivá kola, hra vyhodnocuje turnaj, až se dopracuje k výherci (pokud je), kterého vyhlásí a zobrazí statistiku hráčů.

Nenechte se omezit ve vašich nápadech na ukázkovém řešení. Jakýkoli nápad na program (hru) splňující pravidla bude vítán. :-)

Maximálně bude možno získat 100 bodů, a to následovně:

  • Přehlednost a návrh kódu hry [40 bodů]
  • Funkčnost hry [40 bodů]
  • Přehlednost výpisu hry [10 bodů]
  • Nápad [10 bodů]

Pokud někdo jazyk Dart neovládá, nenechte se odradit! Mohu doporučit například následující studijní materiály:

https://www.dartlang.org/…/get-started
https://www.youtube.com/playlist?…
https://www.youtube.com/…qw/playlists

Výhra

Vítěz dostane placku Machr, pár samolepek a ocenění do portfolia.

Výhra

Výsledky

Jméno bodů Řešení ( Stáhnout vše )
Matěj Kripner 80 Stáhnout řešení
Libor Šimo (libcosenior) 73 Stáhnout řešení
Neaktivní uživatel 58 Stáhnout řešení
Aktivity
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:5.2.2017 11:00

Cílem soutěže je vytvořit autonomní konzolovou hru v jazyce Dart – tato soutěž je zaměřena právě na seznámení s jazykem Dart.

Soutěž končí 26. února 20:00, tak se nezapomeň zapojit! :)

Odpovědět
5.2.2017 11:00
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:5.2.2017 13:02

Hodně otázek by mohlo být hlavně na téma, proč vlastně Dart vyzkošet a používat?

Určitě zde nechci rozepisovat všechny jeho přednosti, protože sám o něm nevím tolik, abych si to mohl dovolit. Raději vás odkážu na zdroje, kde jsou tyto věci vysvětlovány, jako např. na video Let's play Dart! od české Google Expert Jany Moudré. Určitě stojí za to si také projít webové stránky Dartu.

O Dartu jste určitě slyšeli ve spojitosti s front-endem, ale ve skutečnosti Dart umí o mnoho více. Dart není jenom jazyk, obsahuje také mnoho nástrojů, jako právě kompilátor do JS, vlastní balíčkovací systém pub a také např. Dart VM, ve kterém můžete psát aplikace na serveru nebo třeba konzolové aplikace (což je oblast tohoto Machra). A také existuje projekt Flutter, který se zaměřuje na psaní mobilních aplikací v Dartu.

Mně jako nováčkovi se mi líbí konzistentnost Dartu. Má doporučenou strukturu - rozlišující testy, spustitelné soubory, soubory aplikace, soubory pro web, podpůrné nástroje atp. Příjemná je také syntaxe, která, pokud jste dělali někdy s C-like jazyky vám nebude cizí a Dart navíc má plno skvělých syntaktických cukrů, kterými jazyk obohacuje a usnadňuje zápis. Co je fajn je to, že sám Dart přichází s plnou řadou knihoven, jako např. knihovna pro html, která se hodí, když pracujete s front-endem a narozdíl od JS nemá milión divností, jak vybrat a pracovat s elementy, ale má hezké metody ve stylu řekněme jQuery. Také všechno v Dartu je objekt a každý objekt může definovat metodu toString() a také zajímavou metodu noSuchMethod(). Dart také podporuje trojité uvozovky či apostrofy, čímž se přepnete do módu víceřádkového stringu, všechno nedefinované je null a v podmínkách se jako false vyhodnotí opravdu jen false.

Popularita podle TIOBE

Podle TIOBE indexu nejpopulárnějších jazyků 2017 poskočil Dart za uplynulý rok z 26. místa na 17. místo a hned po jazyku Go má největší míru kladného růstu.

Nahoru Odpovědět
5.2.2017 13:02
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Neaktivní uživatel:5.2.2017 16:26

Tady někomu skončily zkoušky, tak zadává machry :D Až skončí zkoušky i mě, tak se třeba zapojím :)

Nahoru Odpovědět
5.2.2017 16:26
Neaktivní uživatelský účet
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):6.2.2017 12:49

Nápad by som už mal.
Teraz to už len nakódiť. ;-)

Nahoru Odpovědět
6.2.2017 12:49
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Libor Šimo (libcosenior)
Michal Haňáček:6.2.2017 19:28

Tak tak, ještě bych možná doplnil "a najít na to dostatek času" :) ...

Nahoru Odpovědět
6.2.2017 19:28
Každé rozhodnutí a každý krok v životě nás někam posune. Bohužel jen některé nás posouvají dopředu.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:15.2.2017 13:35

V jaké formě se má projekt odevzdávat? Nevím přesně, jaké všechny soubory budeš potřebovat na testování. Mám IntelliJ IDEA IDE, který to fluše do svojí projektové složky. Chceš to všechno?

Nahoru Odpovědět
15.2.2017 13:35
Programátor je stroj k převodu kávy na kód.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na krepsy3
Honza Bittner:15.2.2017 14:29

Složku .idea/ nechci, jinak chci všechny zdrojáky tak, abych to spustil. Předlohou k tomu co potřebuji nechť jsou soubory v ukázce https://github.com/…-sample-game.

Nahoru Odpovědět
15.2.2017 14:29
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na krepsy3
Libor Šimo (libcosenior):15.2.2017 15:29

No fajn. Konečne mám konkurenta. ;-)

Nahoru Odpovědět
15.2.2017 15:29
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
krepsy3:15.2.2017 16:18

Nápad mám, teď ještě mít čas to nahodit do kódu. Snad to půjde :D

Nahoru Odpovědět
15.2.2017 16:18
Programátor je stroj k převodu kávy na kód.
Avatar
krepsy3
Tvůrce
Avatar
Odpovídá na Honza Bittner
krepsy3:15.2.2017 16:21

Děkuji. Je nutné mít to rozsložkované jako to máš ty?

Nahoru Odpovědět
15.2.2017 16:21
Programátor je stroj k převodu kávy na kód.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na krepsy3
Honza Bittner:15.2.2017 16:34

To je standardní struktura podle Dart ekosystému, konkrétně struktura pub package, viz třeba https://www.dartlang.org/…ckage-layout. Bylo by tedy rozumné to dodržovat. :-)

Pro nás jsou podstatné složky bin/, kam patří spustitelné soubory a lib/, kam patří kód a taky by stála za zmínku lib/src/, kam se většinou umisťují zdrojáky tvé aplikace. Nebo tak to alespoň chápu. Na té stránce výše najdeš všechny informace, případně se můžeš podívat na nějaké větší projekty, třeba https://github.com/sass/dart-sass nebo https://github.com/…angular.dart.

Jinak všechny tyto složky jako bin/, lib/, web/, benchmark/, test/, doc/, tool/ jsou součástí té Dart struktury, což je dle mého suprové, že ať přijdeš do jakéhokoli projektu, víš kde hledat. A celá ta Dart platforma s tím umí pracovat, což je dost nice. :-)

Nahoru Odpovědět
15.2.2017 16:34
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):15.2.2017 16:44

V subore start_test importujes subor test.dart a nikde ho nevidim.

Nahoru Odpovědět
15.2.2017 16:44
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Honza Bittner:15.2.2017 17:50
import 'package:test/test.dart';

Je tam to package:test, což znamená, že to je nějaký balíček. V souboru pubspec.yaml uvidíš, že se to stáhne jako dev_dependencies pomocí pub get. :-)

Každopádně ty testy jsem jen zkoušel a pak nic nedodělal.

Nahoru Odpovědět
15.2.2017 17:50
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):16.2.2017 19:14

Tak moja hra už naberá otáčky. Celkom fajn to počíta a vykresluje.
Možno mám konečne šancu na machra. ;-)

Nahoru Odpovědět
16.2.2017 19:14
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:18.2.2017 23:19

Mohlo by se hodit: http://dartlang.fr/…et/core.html

Nahoru Odpovědět
18.2.2017 23:19
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):19.2.2017 17:39

Tak som to tam pastol. Dúfam, že to bude stačiť. ;-)

Nahoru Odpovědět
19.2.2017 17:39
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:26.2.2017 12:16

Připomínám, že do konce soutěže zbývá necelých 8 hodin, což znamená, že máte skvělou poslední příležitost se ještě zapojit a vyzkoušet si tento super jazyk. #časudost

Všechny účastníky (nebo ty, kteří si Dart zkoušeli) bych chtěl také poprosit, jestli by nám mohli napsat, jak na ně Dart zapůsobil, co se jim líbilo, co se jim nelíbilo. Nebo třeba co se jim nelíbilo tak moc, až si to nakonec zamilovali. :-)

Libor Šimo (libcosenior), Neaktivní uživatel

Nahoru Odpovědět
26.2.2017 12:16
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
krepsy3
Tvůrce
Avatar
krepsy3:26.2.2017 14:49

Tak ze mě nakonec nevypadne nic :(

Ale dart je jistě zajímavý jazyk, velmi mě potěšila logická a familiární syntaxe, a také podpora, kterou jazyk má (chromium, web apps ale i console apps) :)

Nahoru Odpovědět
26.2.2017 14:49
Programátor je stroj k převodu kávy na kód.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):26.2.2017 15:09

Ako zapôsobil?
Nie som programátor, ale toto sa dalo zvládnuť. Lepšie sú na tom tí, ktorí dobre ovládajú c#, pretože syntax je veľmi podobný.
Ani mi nešlo o to, naučiť sa nový jazyk, ale vyskúšať si, či to zvládnem napísať a to sa mi podarilo. :-)

Nahoru Odpovědět
26.2.2017 15:09
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:26.2.2017 17:04

Jelikož stejně dnes nebudu mít čas na opravu, posouvám konec soutěže na zítra 27.2. 20:00, kdy soutěž snad rovnou i vyhodnotím. :)

Nahoru Odpovědět
26.2.2017 17:04
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Neaktivní uživatel:27.2.2017 0:27

Na to jak jsem k němu byl ze začátku skeptický tak se z toho vyklubalo i něco použitelného. Je zde pár věcí které mi chybí(třeba typový method overload, který se dá ovšem obejít), ale i tak se to dá přežít.
Syntax je opravdu podobný C#, jak zde zmínil @libcosenior. Věc která by se mi líbila by byla možnost striktních datových typů aby překladač řval při použití magického slovíčka var a zároveň by byl i schopen to kontrolovat.
Platforma je to úžasná, dá se spustit kdekoliv. Co se týče Dart webdev, tak Get Started návod vyžaduje použití WebStorm a nikde ani zmínka o příkazu pub serve, který spustí web server a není tedy potřeba IDE (které udělá to samé). A poslední výtka webdev, jelikož je to financované společností Google, tak to podle toho i vypadá. Oficiální podpora frontend js frameworků pouze Angular2(Google) a Polymer(Google). Takže rád bych použil Dart (webdev) i pro vývoj který mám nyní v plánu, ale kvůli absenci jakékoliv integrace třeba VueJS nebo ReactJS(pouze neoficiální port) asi radši zvolím něco jako NodeJS.

Nahoru Odpovědět
27.2.2017 0:27
Neaktivní uživatelský účet
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Honza Bittner:27.2.2017 1:31

Striktní datové typy, jak píšeš, jdou nastavit. Viz ukázková aplikace, soubor .analysis_options https://github.com/…ysis_options. Nejsem si jistý, jestli to ještě povoluje var, nebo bys musel připsat další řádek do nastavení, to vyzkoušej sám kdyžtak. :)

Btw. co se týče různých knihoven a tak (asi ne úplně to, co bys chtěl), tak v Dartu můžeš přes něco volat věci skrz JS.

Nahoru Odpovědět
27.2.2017 1:31
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Honza Bittner:27.2.2017 2:08

Prolézal jsem ta různá pravidla a narazil jsem na toto, co tomu brutálně řekne, že specifikuj vždy typ a např. var to vyhazuje jako chybu. :-)

linter:
  rules:
    - always_specify_types

http://dart-lang.github.io/linter/lints/

Editováno 27.2.2017 2:08
Nahoru Odpovědět
27.2.2017 2:08
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Honza Bittner:27.2.2017 2:26

Updatuji link, přejmenoval jsem soubor analysis options na nový název podle doporučení z nových verzí: https://github.com/…options.yaml

Doplnil jsem tam i linter rules, které mi přišly vhodné. :-)

Nahoru Odpovědět
27.2.2017 2:26
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):27.2.2017 12:05

To mám prepísať kód, keď tam mám použité aj var? Alebo to nebude považované za chybu?

Nahoru Odpovědět
27.2.2017 12:05
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Odpovídá na Libor Šimo (libcosenior)
Honza Bittner:27.2.2017 12:36

Chyba to není. Jazyk umožňuje optional typing. Je to spíš věc konvence. :)

Nahoru Odpovědět
27.2.2017 12:36
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Filip Hráček:27.2.2017 18:38

Jenom doplním, že když máte zapnutý strong mode ("strong-mode: true" v analysis_options) — což máte — tak Dart dělá typovou inferenci. Tj.

var map = {'josef': 3, 'lada': 23};

se automaticky chová stejně jako

Map<String, int> map = {'josef': 3, 'lada': 23};

Samozřejmě, kdo chce úplnou kontrolu, ten raději typuje explicitně, protože třeba

var map = {'josef': 3, 'lada': '23'};

bude Map<String, dynamic> a to asi nechceš. Takže always_specify_ty­pes linter stále dává smysl.

Když chceš opravdu vynutit dynamický typ, musíš použít dynamic:

var map = {'josef': 3, 'lada': 23};
map['filip'] = '0'; // << WARNING

dynamic map2 = {'josef': 3, 'lada': 23};
map2['filip'] = '0'; // << OK
 
Nahoru Odpovědět
27.2.2017 18:38
Avatar
Odpovídá na Neaktivní uživatel
Filip Hráček:27.2.2017 18:53

Co se týče Dart webdev, tak Get Started návod vyžaduje použití WebStorm a nikde ani zmínka o příkazu pub serve, který spustí web server a není tedy potřeba IDE (které udělá to samé).

To je chyba, zkusím napravit.

A poslední výtka webdev, jelikož je to financované společností Google, tak to podle toho i vypadá. Oficiální podpora frontend js frameworků pouze Angular2(Google) a Polymer(Google). Takže rád bych použil Dart (webdev) i pro vývoj který mám nyní v plánu, ale kvůli absenci jakékoliv integrace třeba VueJS nebo ReactJS(pouze neoficiální port) asi radši zvolím něco jako NodeJS.

To je svým způsobem feature :). V Dartu nám jde o to, aby byl jeden "zlatý" způsob, jak dělat webové SPA (AngularDart), jak dělat iOS/Android mobilní aplikace (Flutter), jak dělat terminálové nástroje (pkg:args) a jak dělat servery (aqueduct.io). Samozřejmě to nikomu nepřikazujeme, ale chceme mít vždy jednu hodně dotaženou možnost místo pěti nedotažených. Kdo chce použít něco jako VueJS je na tom stejně líp s JavaScriptem nebo TypeScriptem. Když člověk obaluje JavaScriptí knihovny v Dartu, tak to sice jde, ale přijde o některé příjemné věci, jako je tree-shaking, typová jistota, automatická optimizace výkonu, atp. Naproti tomu třeba právě ten AngularDart je teď již celý v idiomatickém Dartu, takže tam člověk využívá výhody platformy naplno.

Takže: rozumím námitce, osobně bych taky vítal třeba VueJS (react už je podporovaný myslím pěkně), ale aby byl Dart dobrý v tom, co má dělat, musí se těchto cílů vzdát.

 
Nahoru Odpovědět
27.2.2017 18:53
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:27.2.2017 23:36

Ikdyž se zúčastnilo poměrně málo účastníků, i tak hodnotím tuto soutěž jako úspěšnou, protože se dalších několik lidí zkusilo tento jazyk, který za to IMHO prostě stojí. Děkuji všem za účast!

Snažil jsem se hodnotit objektivně a spravedlivě a každému jsem napsal nějaké poznámky, které mě zrovna trkly do očí, ikdyž by tu toho mohlo být ke komentování samozřejmě více. Pokud máte nějaké připomínky, nebojte se ozvat. :-)

Určitě všem doporučuji projít si různé konvence:

A hlavně se nepřestávat zdokonalovat a poučovat se ze svých chyb či kritik ostatních – o tom to přeci všechno je. :-)

=============­===================

Díky všem za účast, zde jsou výsledky:

Libor Šimo (libcosenior) - 73 bodů
22 + 35 + 7 + 9

Nápad na biatlon, který je navíc hodně detailní, je opravdu fajn! U výpisu se mi ale nelíbí, že ho vypisuješ po až moc obrovském kroku, takže ve výsledku uživatel stejně musí scrollovat nahoru a projet si to sám.

Kód je díky komentářům (ty by se na většině míst měly nahradit za doc komenty ///) opravdu nepřehledný – snad všechny soubory jsou s úplným minimem prázdných řádků, což je pro člověka, který kód vidí poprvé velký šok.

V lib/src/hra.dart:73 by bylo vhodné použít něco jako for (Zavodnik zavodnik in _zavodnik_list) a tím využít toho, že _zavodnik_list je List, což je iterable collection a můžeš na něj použít tento for-in cyklus, viz https://www.dartlang.org/…rt-tips-ep-5. V lib/src/zavod­nik.dart:35 zase například máš switch, který nedělá nic jiného, než že podle toho, jakou větví se vydá změní jednu konstantu ve výpočtu. Na to by se třeba dal efektivněji použít List, který máš v Generátoru tu lib/src/genera­tor.dart:22, a přistupovat na index a dále to zkombinovat do výpočtu, čímž se zbavíš switche i redundantnosti. Po upravení něco jako cas = 1000 * gz._kondicia[new Random().nextInt(gz.generuj_hod_kockou())] * zlozitost * _kondicia. A takových věcí tam je více – Dart (či někde OOP obecně) nabízí věci, které prostě nevyužíváš a tím se připravuješ o srozumitelnost nebo píšeš redundantní kód.

Vykreslování střely bych udělal pomocí """ multline stringů, kde by sis definoval prázdné kolečko a plné kolečko, čímž by ses vyhnul nevkusnému generování. Musel by sis samozřejmě napsat nějakou funkci, která by ti dala jednotlivé kolečka vedle sebe.

Neaktivní uživatel - 58 bodů
28 + 20 + 3 + 7

Nápad na lodě je super, jen to zpracování pro uživatele není až tak hezké. Zajímavá a hezká by byla i nějaká vizualizace, ale stačil by klidně i přehlednější výpis hry, protože ten tvůj současný je dost špatný. Bohužel ale hra nefunguje až tak dobře, ikdyž třeba v kódu funkce na nějaké fičurky na víc jsou. Na tomto by se dalo opravdu dost vyblbnout; trochu škoda výsledku.

Pro doc komenty je upředňostňován zápis ///. Pro konstruktor bez těla je zase upřednosťňován zápis bez {} a místo toho dát ;, tj. např. Game(this.size);.

Hra mi nešla spustit, ale dokomunikovali jsme menší opravu podmínky. Používáš for-in cykly pro průchod iterables, což je fajn. U několika funkcí používáš návratovou hodnotu, kterou nakonec vlastně ani nevracíš, nebo nezaručíš její vrácení. U některých funkcí máš návratovou hodnotu, u některých ne – chtělo by to určitě větší konzistentnost. Máš tu hned několik nepoužitých proměnných. Bylo by taky fajn dodržovat nějaké konvence jazyka, např. že metody začínají malým písmenkem. Otázka taky, jestli je fajn mít více tříd v jednom souboru. Ale návrh je jinak obecně docela fajn, ikdyž třeba zrovna metoda start by asi neměla mít v sobě celý cyklus hry – bylo by lepší lépe členit metody.

Matěj Kripner - 80 bodů
34 + 30 + 6 + 10

Kód je opravdu ohromnej, možná až moc. Pro dané zadání by se dala určitě vymyslet o dost jednodušší cesta, jak tento prográmek napsat. Zajímavá je vlastní implementace skládání sloupců pro výpis hry do konzole. Na druhou stranu dost hezky používáš různé Future, awaity, File, for pomocí in pro průchod iterable atp., což se taky cení.

Co se nápadu týče, moc se mi to líbí. Jen je škoda, že výpis a funkčnost za ním není až tak dotažen a tak se většinu času koukáme na změnu jedné karty, pokud nás tedy do salonu nepřijde otravovat slečna :-), přičemž bohužel nevíme nic moc jiného – zde je obrovský prostor pro vylepšení funkčnosti i výpisu a například přidat zobrazení seznamu karet, který každý hráč má a také zobrazit pořadí karet v balíčku.

Shrnul bych to tedy tak, že by bylo vhodné dát uživateli více zážitků a nepsat věci složitě, když to není potřeba. :-)

Placku tedy získává Matěj Kripner Gratuluji :)

Editováno 27.2.2017 23:38
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět
27.2.2017 23:36
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Avatar
Libor Šimo (libcosenior):28.2.2017 9:00

Gratulujem víťazovi. :-)

Nahoru Odpovědět
28.2.2017 9:00
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Matěj Kripner
Tvůrce
Avatar
Odpovídá na Honza Bittner
Matěj Kripner:28.2.2017 15:41

Dart můžu hodnotit jenom jako začátečník, navíc bez zkušeností s jeho nástroji nebo vývojem pro web. S čím jsem se do teď nesetkal a do čeho jsem se zamiloval je kaskádová notace - 2 tečky. Šetří spoustu proměnných :-) Super jsou taky konstruktory automaticky inicializující instanční proměnné.
Úplně mi nevyhovuje, že i u nejjednodušších aplikací musím buď všechny asynchronní operace provádět bez blokování, nebo v celém programu počítat s asynchronitou (všechny metody ve stacku volání musí být async). Chápu ale, že to vychází z jednovláknového designu. Taky bych ocenil protected.
Jinak super víkendová zábava, pro zájemce o Dart doporučuji oficiální language tour.

 
Nahoru Odpovědět
28.2.2017 15:41
Avatar
Odpovídá na Honza Bittner
Libor Šimo (libcosenior):28.2.2017 17:15

Skoda ze si tie konvencie nepastol skor. Mozno som mohol ma vacsiu sancu aj proti sikovnemu vitazovi. :-)

Nahoru Odpovědět
28.2.2017 17:15
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):28.2.2017 17:21

Inac ten Matej je fakt sikula. Jeho clanky akoby pisal stary skuseny pes a on to je kluk. (hlanve sa neuraz, to je maximalna pocta).

Nahoru Odpovědět
28.2.2017 17:21
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Honza Bittner
Tvůrce
Avatar
Honza Bittner:27.8.2017 17:23

Poslední pátek v září 2017 budu mít přednášku o Dartu na přednáškovém srazu ITnetwork. Určitě doražte, pokud vás jazyk zaujal nebo vás zajímá. :-)

https://www.itnetwork.cz/…k/detail/110

Nahoru Odpovědět
27.8.2017 17:23
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 34 zpráv z 34.