Generování bludiště grafem v C# .NET

C# .NET WPF Zdrojákoviště Generování bludiště grafem v C# .NET

Program vytvořen do soutěže machr na algoritmy (bohužel bez jakékoliv konkurence) http://www.itnetwork.cz/…480107dcb3df

Soutěž tedy vyhrál :D Kód je v C# .NET + WPF , aplikace generuje bludiště pomocí grafu a jeho vlastností (tedy žádné čtverečky). Je možné nastavit hustotu bludiště a umístění startu a cíle.


Galerie

Program byl vytvořen v roce 2014.

 

Stáhnout

Staženo 80x (81.37 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

  Aktivity (1)

Program pro vás napsal martinsakra
Avatar
Autor programuje v C# a Javě + dělá v Unity3D

Jak se ti líbí článek?
Celkem (2 hlasů) :
4.54.54.54.54.5


 



 

 

Komentáře

Avatar
hanpari
Redaktor
Avatar
hanpari:

Ahoj,
nechci nikoho navádět k nepravostem :), jen by mne zajímalo, proč se tak obtěžovat například ve třídě Maze s vlastnostmi, tj. vypisovat gettery a settery, když se stejně nevyužívají?

Tento kód

private HashSet<Edge> edges = new HashSet<Edge>();
public HashSet<Edge> Edges
{
    get { return edges; }
    set { edges = value; }
}

nefunguje IMHO o nic méně bezpečněji než tento:

public HashSet<Edge> Edges = new HashSet<Edge>();

Ten druhý je ale přehlednější, kratší, rychleji napsaný a dělá totéž.

Jinak moc pěkný prográmek :)

Editováno 18.12.2014 21:01
 
Odpovědět  +1 18.12.2014 21:00
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na hanpari
Jan Vargovský:

Snad v další verzi C#

public HashSet<Edge> Edges {get;set;} = new HashSet<Edge>();

Momentálně nejkratší verze je asi ta tvoje, ale měl bys to i tak napsat takhle

public HashSet<Edge> Edges {get;set;}

a pak vytvořit instanci. Bez vlastností bys nemohl bindovat (nic víc mě momentálně nenapadá), každopádně by tě to mohlo omezovat v budoucím vývoji a stejně bys to přepisoval.

Ale chápu, z velké většiny se tento styl používá jen díky konvencím .NETu. Btw, tu otázku si můžeš klást také u Javy, ta je ale v tomto směru daleko více ukecanější.

EDIT: http://www.itorian.com/…se-this.html tu máš pár dalších věcí proč je používat.

Editováno 18.12.2014 21:21
 
Odpovědět  +1 18.12.2014 21:18
Avatar
hanpari
Redaktor
Avatar
Odpovídá na Jan Vargovský
hanpari:

Já znám teorii, proč se dělají vlastnosti :)

chtěl jsem spíš trochu si ujasnit dvě věci.

1/ v tomhle případě prográmku ad-hoc IMHO mi přišlo, že je zbytečně rozvláčný a jen jsem chtěl znát názor ostatních a autora,
2/ dále, pokud se nepletu, mi nic nebrání vnitřní stav konkrétní vlastnosti změnit pomocí metod Hashsetu přímo, takže i kdyby nakrásně byl setter napsaný jaksepatří, ve skutečnosti tak jakoukoliv kontrolu obejdu.

Ale ten druhý bod je jen takový nezasvěcený náhled, zajímá mne názor lidé, co v Csharp dělají.

 
Odpovědět 18.12.2014 21:42
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na hanpari
martinsakra:

ja to Edges dokonce jednou používám :D , jinak ano v tomhle případě dost možná zbytečné, celkově u kolekci get/set nebo property nemusí být často ideal. Celkově dobrej zvyk mě naučil automaticky psát gettery/settery když dělám v jave nebo property pro C# i když hrozí že je nevyužiju, v tomhle případě kdy jsem ten algoritmus vytvářel za pochodu takže jsem napřed vytvořil maze a netušil co snim budu dělat.
Pak taky možná ty nodes/edge/maze na něco využiju a budu to mít předpřipravený

public HashSet<Edge> Edges {get;set;}

tohle se mi nelíbí rád v té tříde tu konkrétní proměnou vidim )nehledě na to že jakmile je v property potřeba cokoliv dělat/kontrolovat pak se stejně musí proměná dopsat

Odpovědět  +1 18.12.2014 22:50
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
Avatar
hanpari
Redaktor
Avatar
Odpovídá na martinsakra
hanpari:

Ahoj,

teď se probírám tvým kódem ze cvičebních důvodů. Doufám, že nevadí :)

Všiml jsem si jedné věci. Do svého bludiště Maze 2x přiřazuješ pomocí volání MazeLogic.getAc­tualMaze().

Tyhle řádky můžeš zakomentovat a celou tu metodu zrušit.

Do konstruktoru MazeLogic totiž dáváš referenci na své bludiště, takže pokud ho MazeLogic změní, změní se vnitřní stav tvého bludiště.

No, snad nevadí, že se v tom šťourám :)

 
Odpovědět 21.12.2014 7:55
Avatar
martinsakra
Redaktor
Avatar
Odpovídá na hanpari
martinsakra:

Klidně se v kodu hrabej,ale zázrak programování to není.
Ano je tam reference tudíž to není potřeba, ale to víš jenom díky tomu že máš po ruce celej zdrojovej kod + víš že maze neni hodnotový typ, nebo immutable (možná ještě něco jinýho,ale kdo ví), být to jako knihovna/tys viděl jen interface, tak rozhodně používat getXXX a nespolíhat se na to uvnitř, a pak je z toho najednou zvyk

Odpovědět  +1 21.12.2014 17:26
Democracy is two wolves and a lamb voting on what to have for lunch. Liberty is a well-armed lamb contesting the vote.
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 6 zpráv z 6.