Soutěž: Machr na OOP - Prší

C# .NET .NET (C# a Visual Basic) Machr na OOP - Prší American English version English version

Soutěž již skončila

Zadání

Vašim úkolem bude, naprogramovat s využitím principů objektově orientovaného programování počítačovou verzi karetní hry prší. Využijeme pravidla z wikipedie (odkaz) a to pouze klasickou hru, takže si přečtěte odstavce Průběh hry a Speciální karty. Aplikaci dělejte pro více hráčů (ono to ani jinak hrát nejde). Na začátku zadám počet hráčů, pak zadám jméno každého z nich a pak začne hra. Podle pravidel hra vybere náhodného hráče, který začne. V každém tahu každého hráče, vymažete konzoli a vypíšete kolik karet má každý hráč (v reálné hře prostě vidíte, že Franta má už jen jednu kartu a bylo by vhodné mu tam přihodit sedmičku), volitelně vypíšete i 5 následujících, kteří jsou další v pořadí.

Následující: Franta > Josef > Anička > Antonín > Jarka

Pak vypíšete kartu na balíčku. Pokud není přímo číslo karty (po měnění svrškem), tak jen barvu.

Následně vypíšete možnosti tahu. Tzn., že vypíšete všechny možnosti, které očíslujete, a uživatel zadá číslo volby, kterou si přeje provést. Příklad výstupu tahu:

Stav karet ostatních hráčů:
David: 5
Honza: 8
Karel: 2
Franta: 5

Hraje: Franta
Následuje: Michal > David > Honza > Karel > Franta

Přikládáš na: ♥K

Možnosti tahu:
0) líznout si
1) ♦K
   ♦64
2) ♥8
   ♠A
Tvá volba [0-2]: _

Z předchozí ukázka jste asi pochopili, že můžete používat unicode symboly ♠♣♥♦.

Aplikaci můžete vyřešit i s použitím GUI, záleží na Vás. V případě využití GUI je reprezentace hry na Vás a nemusíte se striktně řídit výše uvedenými formáty.

Pro tohoto machra můžete využít pouze jazyka C# a nesmíte využít již hotových řešení. Při odevzdávání odevzdávejte celý projekt, včetně řešení (.sln souboru). Nezapomeňte, že se jedná o machra na OOP. To znamená, že nemusíte vyřešit úplně všechno, ale hlavní je, aby to bylo dobře navrženo. Pro výhru nemusíte splnit všechno, většina bodů bude udělena za dodržení zásad OOP a zásad psaní „čistého kódu“.

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 )
Bratr 63 Stáhnout řešení
magic44 59 Stáhnout řešení
patrik.valkovic 53 Stáhnout řešení
Princ57 47 Stáhnout řešení
Avatar
Michal Žůrek (misaz):

V této soutěži si naprogramuje počítačovou variantu karetní hry Prší pro více hráčů.

Soutěž končí 19.7.2015 14:00:00, tak se nezapomeň zapojit! :-)

Odpovědět  +2 8.7.2015 11:34
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

máte na to trochu víc času. Jednak je toho celkem hodně, jednak mám v tom termínu dovolenou, takže se asi nedostanu k PC na hodnocení dříve. Čas využijte efektivně, dejte si třeba den jen na návrh a detailně to promyslete.

// pokud ke konci budete znechuceni, že jste na to měli málo času, protože Vám kočka sežrala monitor, porouchala se disketová mechanika a podobné výmluvy, tak je ani nepište. :)

Editováno 8.7.2015 11:38
Nahoru Odpovědět 8.7.2015 11:37
Nesnáším {}, proto se jim vyhýbám.
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
MadaraCZech:

Dotaz. Mohu to dělat ve WF, jako v předchozí úloze ? Týden jsem s tím pracoval a zvykl jsem si :D

 
Nahoru Odpovědět 8.7.2015 12:00
Avatar
Nahoru Odpovědět 8.7.2015 12:01
Nesnáším {}, proto se jim vyhýbám.
Avatar
Neaktivní uživatel:

Zas to priondené obmedzenie na C#

Nahoru Odpovědět  +2 8.7.2015 12:43
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Žůrek (misaz):

tak se ho nauč, není těžký a vyzkoušíš si něco nového.

Nahoru Odpovědět  -2 8.7.2015 12:44
Nesnáším {}, proto se jim vyhýbám.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Hmm, tak to je zajímavý, asi se účastním :)
Jinak taky souhlasím že striktní omezení na C# je poněkud zvláštní, zvláště když se jedná o principy OOP.

Nahoru Odpovědět  +8 8.7.2015 13:14
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Dan Balarin
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
Dan Balarin:

Další na C# to znamená že bych se mohl účastnit i když hry nejsou moje parketa :D Jinak předpokládám že jsou zakázaný externí knihovny, počítá se mezi ně i XNA?

Nahoru Odpovědět 8.7.2015 13:30
"The number one benefit of information technology is that it empowers people to do what they want to do. It lets...
Avatar
Odpovídá na Michal Žůrek (misaz)
Neaktivní uživatel:

Tu nejde o to, že by som mal problém s C# ako takým, ale s tým, že momentálne nemám prístup k počítaču s Windows a na linuxoch to s C#-pom nie je bohviečo zatiaľ, pevne verím, že v blízkej budúcnosti sa to zmení.

Editováno 8.7.2015 13:45
Nahoru Odpovědět  +4 8.7.2015 13:44
Neaktivní uživatelský účet
Avatar
Odpovídá na Dan Balarin
Štefan Pružinský:

Naozaj chceš použiť XNA? Myslel si asi MonoGame... :)
Ja sa bohužiaľ nezúčastním pretože do 26. budem preč... A práve vtedy, keď je taký zaujímavý Machr... ;-(

Nahoru Odpovědět 8.7.2015 13:48
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Dan Balarin
Člen
Avatar
Odpovídá na Štefan Pružinský
Dan Balarin:

MonoGame je už od třetí strany, XNA je od Microsoftu takže pokud budou zakázaný externí knihovny tak je větší šance na uznání s XNA než MonoGame... Jinak bych to taky řešil v MonoGame

Neaktivní uživatel: Pokud vim tak na linuxu se dá dělat v MonoDevelop ne? popř. Visual Studio ve Winu ovšem ten prý hrozně padá.

Nahoru Odpovědět 8.7.2015 13:55
"The number one benefit of information technology is that it empowers people to do what they want to do. It lets...
Avatar
Odpovídá na Dan Balarin
Štefan Pružinský:

XNA sa už nevyvíja... Samotný Microsoft odkazuje vývojárov na MonoGame... :)

Nahoru Odpovědět 8.7.2015 13:57
Najefektívnejším spôsobom debuggingu je modlitba. :)
Avatar
Michal Žůrek (misaz):

XNA i Monogame zakázáno. Zaměřte se na OOP, ne na to že je to pěkně animované a podobné věci, to Vám pak bude akorát líto že jste s tím strávili tolik času a nejsou za to body. Když už chcete dělat GUI, tak nějaké jednoduché v WF nebo WPF.

Nahoru Odpovědět  +2 8.7.2015 14:00
Nesnáším {}, proto se jim vyhýbám.
Avatar
Dan Balarin
Člen
Avatar
Odpovídá na Štefan Pružinský
Dan Balarin:

lol, to jsem netušil... evidentě máme stejně smůlu :D

Nahoru Odpovědět  +1 8.7.2015 14:02
"The number one benefit of information technology is that it empowers people to do what they want to do. It lets...
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
MadaraCZech:

Takže když budu mít pěkné GUI s animacemi, tak za to nedostanu ani bod ?

 
Nahoru Odpovědět 8.7.2015 14:07
Avatar
Odpovídá na MadaraCZech
Michal Žůrek (misaz):

pár bodů dostaneš, ale výhru/prohru to nezvrátí.

Nahoru Odpovědět  ±0 8.7.2015 14:08
Nesnáším {}, proto se jim vyhýbám.
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
MadaraCZech:

To nedává smysl. Pokud by měl někdo za kód 50 bodů a já 49, tak bych body dostat nemohl, jelikož by to výhru / prohru zvrátilo. :D :D

 
Nahoru Odpovědět 8.7.2015 14:11
Avatar
MadaraCZech
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
MadaraCZech:

Budu to chápat jako "když budeš mít čas navíc, můžeš to udělat"

 
Nahoru Odpovědět  +1 8.7.2015 14:17
Avatar
Odpovídá na MadaraCZech
Michal Žůrek (misaz):

jistě, ale jak moc je to pravděpodobné?

Nahoru Odpovědět 8.7.2015 14:18
Nesnáším {}, proto se jim vyhýbám.
Avatar
Adam Ježek
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
Adam Ježek:

I na linuxu se dá, třeba monodevelop. A pokud máš dost výkonu, tak by šel Windows ve Virtualboxu

Nahoru Odpovědět  +1 8.7.2015 16:33
Programátor dělá co může. Počítač co chce. | Pokud mi dáš mínus, tak prosim, napiš proč!
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

Taky se připojuji k protestu proti C# :D

Je to sice fajn jazyk, ale proč by si to každý nemohl udělat v objektovém jazyku, který mu vyhovuje? Delphi, Java, C++?

Myslím, že rožšíření možných jazyků by zdejším Machrům prospělo ;)

Nahoru Odpovědět  +7 9.7.2015 10:17
Chyba je mezi klávesnicí a židlí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Neaktivní uživatel
David Čápka:

Nevím jaký má smysl stěžovat si tady na zadání soutěže (konkrétně omezení na C#). Soutěže dělá komunita ve svém volném čase, pokud tě nezaujme, tak si na ni nestěžuj a nech to být, neznečišťuj její vlákno, nekaž náladu lidem, co do toho vkládají svojí energii a čas. Machři jsou omezení na konkrétní jazyky vzhledem k faktu, že soutěže probíhají v diskuzním fóru, které je takto rozdělené a tím jednotlivá fóra jazyků podporují. C# tu je absolutně nejpopulárnější, jestli se ti z nějakého důvodu nelíbí, počkej si na soutěž s jiným jazykem, bude jich tu ještě spoustu. Simple as that.

Nahoru Odpovědět  +16 9.7.2015 10:40
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Neaktivní uživatel:

Hej všimol som si, že tu je akékoľvek prejavenie nespokojnosti s niečím "ťažký hriech" ale myslím, že môj názor, že "Machr na OOP" by nemal byť viazaný na konkrétny jazyk, je správny. Samozrejme nemusíš s tým súhlasiť, je to len môj názor, kľudne to môžeš zmazať ak sa ti zdá, že to kazí náladu. Nikoho prácu neznehodnocujem, ale keď sa mi niečo nepozdáva tak to napíšem.

Nahoru Odpovědět  +5 9.7.2015 18:21
Neaktivní uživatelský účet
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Neaktivní uživatel
hanpari:

Hm, na devbooku vím jen o jednom člověku, který by dokázal jakžtakž spravedlivě vyhodnotit kód ve dvaceti různých jazycích. Jinak je pochopitelné, že zadavatel soutěže bude raději hodnotit jazyk, který zná nejlépe.

 
Nahoru Odpovědět  +1 9.7.2015 18:40
Avatar
Odpovídá na hanpari
Neaktivní uživatel:

Pri OOP nejde o implementáciu v konkrétnom jazyku, tam ide práve o ten návrh. To či to dotyčný spraví v C# alebo v C++ by malo byť jedno, ale opakujem je to len môj názor, jazyk je len nástroj.

Nahoru Odpovědět  +4 9.7.2015 18:46
Neaktivní uživatelský účet
Avatar
František Boháček:

Prší se hraje s maryášovými kartami, kde nejsou hodnoty 2, 3, 4, 5, 6, proč máš v ukázce 4? Je to chyba, nebo to je schválně a jestli je to schválně, co to má značit?

 
Nahoru Odpovědět  +1 10.7.2015 12:45
Avatar
Odpovídá na František Boháček
Michal Žůrek (misaz):

To záleží. Já jsem to vždycky hrál s kartami kde byli zařazeny i 2,3,4,5,6, ale můžeš je klidně vyřadit. Naprogramuj to s balíčkem, jakým uznáš za vhodné.

Nahoru Odpovědět 10.7.2015 12:47
Nesnáším {}, proto se jim vyhýbám.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Btw pokud to bude správně podle OOP tak by neměl být problém další karty tam kdykoliv přidat ;-)

Nahoru Odpovědět  +2 10.7.2015 12:48
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Nahoru Odpovědět 10.7.2015 12:49
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

Pár bonusových bodů bude za volitelný výběr zdali chcete do balíčku karet zařadit i 2,3,4,5,6.

Nahoru Odpovědět 10.7.2015 12:55
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Michal Žůrek (misaz)
František Boháček:

Já jen, že jsi psal, že to máme udělat podle wiki, kde jsou napsané ty karty mariášové a když si najdeš hrací karty:

mariášové karty - sada obsahuje 32 karet německého typu, s hodnotami 7, 8, 9, 10, spodek, svršek, král, eso. Vznikne z whistové sady, z níž jsou odebrány karty nízkých hodnot.

Zjistíš, že tam ty malé nejsou.. Zmátlo mě to, takže díky za vysvětlení

Jinak, je pravda, že by to neměl být problém, ale tak říkal podle wiki, lepší je se zeptat, zvlášť, když o těch malých na wiki nic není

 
Nahoru Odpovědět 10.7.2015 12:58
Avatar
Odpovídá na Michal Žůrek (misaz)
František Boháček:

A jak by to pak bylo s balíčkem? To by bylo místo 32 karet 52?

 
Nahoru Odpovědět 10.7.2015 13:00
Avatar
Nahoru Odpovědět 10.7.2015 13:04
Nesnáším {}, proto se jim vyhýbám.
Avatar
Insane Qurd
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Insane Qurd:

Ahoj, jak mám znázornit svrška? (pokud to dělám bez GUI)

Editováno 10.7.2015 15:43
Nahoru Odpovědět 10.7.2015 15:42
It's impossible to say it's impossible.
Avatar
Insane Qurd
Redaktor
Avatar
Insane Qurd:

Už to mám

Nahoru Odpovědět 10.7.2015 17:03
It's impossible to say it's impossible.
Avatar
magic44
Redaktor
Avatar
magic44:

Chtěl jsem se zeptat: na wiki v "Průběh hry" se zmiňují pravidla pro hru s přebíjením i bez něho. Já už to mám udělané s přebíjením, ale chtěl jsem se ujistit, jestli to tak opravdu je :D.

Ještě jeden dotaz na kritickou situaci: v balíčku už nejsou žádné karty a v odkládacím balíčku je pouze jedna karta (ta poslední zahraná). Co udělat, když si chce hráč v této situaci líznout? :) Zahlásit, že nejsou karty a nechat ho stát?

Nahoru Odpovědět 10.7.2015 17:05
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Odpovídá na magic44
Ondřej Štorc:

No asi by jsi mu ani neměl dovolit lízat....

Nahoru Odpovědět  +1 10.7.2015 17:22
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
magic44
Redaktor
Avatar
Odpovídá na Ondřej Štorc
magic44:

No takze, když nebude mit ani co zahrát, tak ho proste preskocit?

Nahoru Odpovědět 10.7.2015 17:47
Moudrý člověk nechce být lepší než ostatní, ale lepší, než byl sám včera.
Avatar
Nahoru Odpovědět 10.7.2015 19:23
Nesnáším {}, proto se jim vyhýbám.
Avatar
Lukáš Křehula
Redaktor
Avatar
Odpovídá na magic44
Lukáš Křehula:

Kam si myslíš, že se ztrácí karty, jakmile je zahraješ? Pokud zahraješ kartu, tak tu minulou vrchní kartu dej zpátky do balíčku. Ve hře bude stále 52 karet (nebo 32, pokud používáš mariášové)

Editováno 10.7.2015 19:27
 
Nahoru Odpovědět  ±0 10.7.2015 19:27
Avatar
Odpovídá na Lukáš Křehula
Michal Žůrek (misaz):

Teoreticky mohou mít hráči všech 52 (32) karet v rukou a velmi teoreticky u jednoho hráče existuje možnost že nebude mít co líznout ani co zahrát, ale je to velmi nepravděpodobné.

Nahoru Odpovědět 10.7.2015 19:36
Nesnáším {}, proto se jim vyhýbám.
Avatar
coells
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
coells:

Je pouze velmi nepravděpodobné se do toho stavu ve hře dostat.
Pravděpodobnost, že s balíčkem o 32 kartách při držení 8 karet nemáš co zahrát, je 0.6%.
To není závratně malá pravděpodobnost.

 
Nahoru Odpovědět 12.7.2015 12:26
Avatar
Odpovídá na coells
Michal Žůrek (misaz):

oni můžou hrát stylem, že hráč A má 31 karet a hráč B má 1 kartu.

Nahoru Odpovědět  +1 12.7.2015 14:41
Nesnáším {}, proto se jim vyhýbám.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
patrik.valkovic:

Pomalu se blížím do konce a zatím využívám celkem 70 tříd....zdá se mi to až masochistické :D

Editováno 12.7.2015 16:37
Nahoru Odpovědět  +2 12.7.2015 16:36
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
qwertyW
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
qwertyW:

jo, zase to může být i naopak, takže ta pravděpodobnost bude +- podobná...

Nahoru Odpovědět 12.7.2015 18:17
Programuji, tedy jsem.
Avatar
D0ll0k
Člen
Avatar
Odpovídá na patrik.valkovic
D0ll0k:

70? :-O ja mam 5 trid a hodlam jeste udelat tak dve. Asi si rikam jestli delam spravne OOP...

Nahoru Odpovědět  +1 12.7.2015 20:06
Ten, co se snaží "programovat"
Avatar
Michal Žůrek (misaz):

7 nebo 70, vyhrát se dá s obojím.

Nahoru Odpovědět  +1 12.7.2015 20:19
Nesnáším {}, proto se jim vyhýbám.
Avatar
Nahoru Odpovědět 12.7.2015 20:22
Nesnáším {}, proto se jim vyhýbám.
Avatar
MrPabloz
Člen
Avatar
Odpovídá na D0ll0k
MrPabloz:

Podle mě, maximum tříd na tohle je 10, takže je zbytečné mít jich 70. U OOP neplatí pravidlo, čím víc tříd tím lepší OOP :) Má se do dělat s rozumem a má to mít nějaký smysl, ne tam naflákat vše, co koho napadne :)

Nahoru Odpovědět  +1 12.7.2015 20:27
Harmonie těla a duše, to je to, oč se snažím! :)
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na D0ll0k
patrik.valkovic:

Psal jsem že využívám. Nahlásil mi to tak Code Metrics - tedy započítávají se tam i Link<> a StringBuilder a tak :)
Sám jsem jich samozřejmě vytvářel mnohem míň ;-)

Nahoru Odpovědět  +1 12.7.2015 20:28
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
D0ll0k
Člen
Avatar
Odpovídá na patrik.valkovic
D0ll0k:

Tak to pak jo. Já myslel, že jsi vytvořil 70 tříd :D.

Nahoru Odpovědět  +3 12.7.2015 20:30
Ten, co se snaží "programovat"
Avatar
NouF
Člen
Avatar
Odpovídá na David Čápka
NouF:

Ty jsi už celkem naštvaný co? Ty by jsi měl fungovat jako motor pro ostatní. Motor dobré nálady, bez dobré nálady to tu můžeš zavřít :) A hlavně nezavítej.

 
Nahoru Odpovědět  +2 13.7.2015 2:47
Avatar
D0ll0k
Člen
Avatar
D0ll0k:

Do háje! Já si smazal celý projekt :-(

Nahoru Odpovědět 19.7.2015 13:46
Ten, co se snaží "programovat"
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na D0ll0k
David Novák:

Pro příště používej nějaký Dropbox.. Nebo ideálně git (ale ten je trochu náročnější)..

Kromě zálohy budeš mít i jednotlivé verze ;)

Nahoru Odpovědět 19.7.2015 13:48
Chyba je mezi klávesnicí a židlí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na D0ll0k
Jan Vargovský:

VS má určitě někde backup.

 
Nahoru Odpovědět 19.7.2015 13:49
Avatar
D0ll0k
Člen
Avatar
Odpovídá na David Novák
D0ll0k:

Já ho měl v záloze, jenže byl společně s projektem v jedné složce, kterou jsem smazal, když jsem si potřeboval uvolnit místo na disku.

Nahoru Odpovědět 19.7.2015 13:50
Ten, co se snaží "programovat"
Avatar
D0ll0k
Člen
Avatar
Nahoru Odpovědět 19.7.2015 13:52
Ten, co se snaží "programovat"
Avatar
D0ll0k
Člen
Avatar
D0ll0k:

Tak nic, nevadí. Pro příště použiju dropbox.

Nahoru Odpovědět 19.7.2015 14:01
Ten, co se snaží "programovat"
Avatar
Odpovídá na D0ll0k
Neaktivní uživatel:

Pre budúcnosť sa nauč nejaký cvs (git) napríklad, bez toho sa proste v praxi nerobí nič. Ďalšia vec sú kvalitné zálohy, buď lokálne alebo cloud. VS by mal mať zálohy, treba pogooglit, pripadne existujú programy, ktoré dokážu obnoviť zmazané súbory. :) (napríklad recuva)

Nahoru Odpovědět  +1 19.7.2015 14:04
Neaktivní uživatelský účet
Avatar
Insane Qurd
Redaktor
Avatar
Insane Qurd:

Ahoj, omlouvám se, ale nestihl jsem to uploadovat, jelikož jsem neměl ještě nainstalovaný WinZip, chápu, že je to moje chyba, ale jinak bych to stihl, pokud byste to ještě pár sekund po konci uznali, přidávám soubor.

https://www.dropbox.com/…/mau-mau.zip?dl=0

Nahoru Odpovědět  +1 19.7.2015 14:08
It's impossible to say it's impossible.
Avatar
Nahoru Odpovědět 19.7.2015 14:16
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

Začínám hodnotit, už se těším jak si vaše aplikace obstojí s bodem:

Třída Karta je připravena k implementaci do hry Solitaire

:)
Nahoru Odpovědět 19.7.2015 14:17
Nesnáším {}, proto se jim vyhýbám.
Avatar
Insane Qurd
Redaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
Insane Qurd:

Něco tam, ale taky nemám... :( Aspoň, že to je objektově :D

Editováno 19.7.2015 14:24
Nahoru Odpovědět 19.7.2015 14:23
It's impossible to say it's impossible.
Avatar
Michal Žůrek (misaz):

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

Bratr - 63 bodů
Tvé řešení má dobře navrženou většinu tříd i přesto to má par much. V třídě karta máš read-only vlastnost oznaceni. Dobře je že zápis informací o sobě se obstarává nějak inteligentně v třídě a zároveň mimo hlavní logiku, ale neřeší se to read-only vlastností ale přepsáním metody ToString. Výhodou pak je, že služby, které očekávají nějaký inteligentní popis, budou používat právě ten ToString, zkus si vložit instanci té třídy do okna Watch při ladění aplikace a uvidíš, že se do popisku bude používat právě ToString, což usnadní procházení různých věcí, když je jich více – třeba když chceš nahlížet do balíčku karet, ti ten náhled z ToString usnadní spoustu práce s rozklinkáváním jednotlivých karet.

Trošku divné je, že o porovnávání karet se stará balíček. Správně by to měla být záležitost karet a ideálně přetíženého operátoru.

Moc ani nevidím význam attributu puvodniKarty v třídě balíčku. Balíček by měl možnost mít přeci si kdykoliv všechny karty doplnit znova sám, tak jak to dělá konstruktor. Resp. On by to ani neměl dělat konstrutkor, ale metoda, kterou bude konstruktor volat.

Hodně se mi líbilo označování stavu hry, informace o esu, měnění, nuceného lízání, atd.

Co se mi ale vůbec nelíbí je metoda VyberModifikator v třídě karty. Má to dvě mouchy. První je switch. Switch by se v objektové aplikaci používat neměl. Lze to vyřešit tak, že hře dáš nějaké pole pouzijModifikatory a každá karty modifikátory projde, modifikátor si řekne, jestli je ten vhodný pro danou kartu. Tzn, že modifikátory budou mít např. metodu JsemVhody, která vrací bool, jako parametr bude brát kartu a v obsahu bude podmínky if (karta.cislo == 7), tak vrátí true, naopak false (ono se dá napsat i single-line). Výhodu to bude mít v okamžiku, kdy modifikátoru bud více a budeš je chtít třeba vypínat nebo zapínat. Idea je taková, že kdybych chtěl naimplementovat ♠K, tak teď budu muset nejen vytvořit ten modifikátor, ale upravovat i ten switch, což je špatně. Tím se dostávám k druhé mouše a to že kvůli té metody se třída Karty v podstatě stává závislou na hře prší. V okamžiku kdy bych ji chtěl použit v jiné hře, opět musím zasahovat do toho switche, což je špatně.

I přes drobné chybky v kódu ti hra funguje velmi dobře.

magic44 - 59 bodů
Jako jednoho z mála tě napadlo, že když děláš hru, tak ten nejpodstatnější objekt bude asi samotný Game. Nicméně v samotné třídě Game pak jsou drobné „divnosti“. Možná ještě než začnu tím, že tě upozorním na délku řádku. Třeba řádek 50 (v souboru Game.cs) se mi ani za normálních okolností nevlez do okna Visual Studia na Full HD monitoru. Existuje doporučení, že řádek kódu by neměl přesáhnout 80 znaků. Nemusíš to dodržovat striktně, ale přeci jen řádek 50 má 234 znaků, tak by to chtělo trochu zredukovat. Kód by to chtělo taky trochu komentovat, vůbec netuším, k čemu tam jsou konstanty VALUE_OF_SEVEN, VALUE_OF_EMPTY_CAR­D. Pak jsem se taky pozastavil nad typy některých proměnných, proč je hráč celé číslo? Sem tam mícháš do angličtiny češtinu. Většina kódu je v angličtině a pak se tam objeví proměnná typKaret (správně cardsType).

Samotná hra by také neměla přímo komunikovat s uživatelem, obecně celé Questions.GetIn­stance().Answe­rInRange je špatně. Metody mají parametry a komunikovat s uživatelem má něco co to všechno obsluhuje. Pokud bych chtěl spustit hru na serveru, narazím u toho na dost závažný problém, který to víceméně znemožní.

Chválím, že informace o kartě vracíš přes přepsané ToString. Místo equals šel přetížit operátor, ale to už je jen drobnost.

Velmi dobře je navržen balíček, se kterým jsem neměl sebemenší problém, sice i zde by mu neuškodil komentář nad metodami a vysvětlení konstanty COUNT_OF_COLORS. Nicméně skutečně implementace napodobuje reálný balíček. Jako jeden z mála jsi balíček skutečně zamíchal.

Vůbec se mi nelíbí rozpoznávání speciálních karet. Switch by se neměl používat, protože jakákoliv změna v speciální kartě víceméně musí zasahovat i do switche a to je špatně. Podívej se na řešení od SilverFox, který má toto pěkně vyřešené.
Hra ti fungovala velmi, dobře, v této části si neztratil jediný bod.

patrik.valkovic - 53 bodů
Řešil jsi to strašně robustně, napomáhají to mu i testy, což je samozřejmě dobře. Nicméně kolem jednoduché hry je toho strašně moc okolo, úplně zbytečně.

Neprogramovali jsme komplexní IS, ale jednoduché prší. Ale máš to vymyšlené do detailu, kdybych hru nasadil na síti, heslo by se hráči určitě hodilo.

Trošku problém je u znuvupoužitelnosti některých objektů, třeba karty, která je vázaná na stav karty a ten je enumerace, která obsahu prší-specifické stavy, což v jiných hrách může být dost problém.

Tvůj kód obsahuje zbytečně moc všeho, všechno má úplně zbytečně rozhraní. Je to sice pěkné, ale orientace v kódu je na bodu mrazu, v hodnotících kritériích mám věci, které bych bez Visual Studia a nástrojů jako Go to Definition, Find all references a podobných prostě nenašel.

Hra ti celkem funguje, ♠K si ani nemusel implementovat, máš za to bonusové body. Na druhou stranu zase mělo fungovat vkládání Q na libovolnou „barvu“, takže tam si je zase ztratil.

Princ57 - 47 bodů
Tvůj kód je už na první pohled moc roztahaný. Metoda ChooseStartin­gPlayer má za sebou komentář, který říká, že dělá něco jiného než její název tvrdí. Karty skutečně mícháš, což je dobře.

Dobré je, že hru lze spustit na jedno volání, trochu horší je, že hra si díky toho musí sama vypisovat informace do konzole. Pokud bych hru chtěl spustit třeba po síti, byl by to problém.

Super je, že v kódu nikde nepoužíváš switch.

Hra ti funguje dobře, až na to že měnit dámou lze na libovolné kartě.

Inoue Yūki - 23 bodů

Začni tím, že to rozdělíš do více tříd, třeba karta, Balíček karet atd…. Hra ti funguje tak na půl slova, kód je všechen v jednom souboru (o 450 řádcích) a ještě jsi to ani nestihl odevzdat v termínu.

Placku tedy získává SilverFox. Gratuluji :)

Editováno 19.7.2015 18:09
Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět  +1 19.7.2015 18:08
Nesnáším {}, proto se jim vyhýbám.
Avatar
Michal Žůrek (misaz):

Pro informaci: Interně jste mohli získat 680 bodů, což se přepočítalo trojčlenkou na 100 bodové maximum.

OOP                     51 bodů
Přehlednost kódu        6 bodů
Funkčnost aplikace      34 bodů
Bonusové body           9 bodů

Uživatelské rozhraní nedělal nikdo, ale kdyby ho někdo udělal, tak za to dostal maximálně 2,9 bodů, které by byli započteny v bonusových.

Nahoru Odpovědět 19.7.2015 18:16
Nesnáším {}, proto se jim vyhýbám.
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Michal Žůrek (misaz)
patrik.valkovic:

Nechceš i ukázat jednotlivé body, podle kterých jsi hodnotil? ;-)

Editováno 19.7.2015 19:15
Nahoru Odpovědět 19.7.2015 19:15
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
IT Man
Redaktor
Avatar
Nahoru Odpovědět 19.7.2015 19:20
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Nahoru Odpovědět 19.7.2015 19:21
Nesnáším {}, proto se jim vyhýbám.
Avatar
Inoue Yūki
Redaktor
Avatar
Nahoru Odpovědět  +3 19.7.2015 19:25
Avatar
Dan Balarin
Člen
Avatar
Dan Balarin:

Gratulace Bratr :)

Michal Žůrek (misaz): dá se tohle počítat jako uživatelský prostředí? Jen ze zvědavosti :) jinak já se neúčastnil jelikož jsem to nedokázal uvést do hratelnýho stavu... :/

btw: SilverFox měl myslim taky míchání balíčku a jestli ne tak sorry ale řikal jsem mu to :D :D

Nahoru Odpovědět 20.7.2015 1:05
"The number one benefit of information technology is that it empowers people to do what they want to do. It lets...
Avatar
Odpovídá na Dan Balarin
Michal Žůrek (misaz):

za GUI se to moc považovat nedá, protože to nemá prvky GUI. Když už děláš GUI, tak by to chtělo třeba pěkně graficky vykreslit kartu a to se ti v konzoli asi moc dobře nepovede.

Nahoru Odpovědět 20.7.2015 11:37
Nesnáším {}, proto se jim vyhýbám.
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 71 zpráv z 71.