Autor Wątek: Generowanie zamkniętych przestrzeni do map  (Przeczytany 7287 razy)

Offline maro

  • Użytkownik

  • +2
# Kwiecień 13, 2015, 21:22:41
Cytuj
2. Lekka nutka patriotyzmu... mój program i tak nie będzie na tyle przydatny, żeby używał go cały świat, więc niech Polacy czują, że mają coś "od swojego". Chociaż z drugiej strony może sam dołki kopię pod swoimi skoro, jak widać, wolicie angielskie nazwy ;)

To nie patriotyzm, to obfuskacja...
Gdy dostaję kod, który nie jest po angielsku (wyłączając komentarze), to nie ma znaczenia czy jest po niemiecku, włosku, polsku, czy białorusku - jest tak samo (imho) nieczytelny.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xender

  • Użytkownik

  • +2
# Kwiecień 13, 2015, 22:41:32
Ja słowo strażnik wyniosłem z tego http://en.wikipedia.org/wiki/Guard_%28computer_science%29. Ale chyba faktycznie predykat bardziej pasuje.
Hmm, ja się z guardami spotkałem w Erlangu, ale tam miały specyficzne znaczenie - nie tyle określały, czy program może "iść dalej", co stanowiły element/dopełnienie pattern matchingu argumentów wywoływanej funkcji do odpowiedniej deklaracji.

Np. żeby zaprogramować silnię , można było utworzyć 2 funkcje - fact(n) z guardem n==0, która zwraca 1, i dalej fact(n) bez guarda, która zwracała n * fact(n-1).
Oczywiście zamiast guarda w tym wypadku można było po prostu zadeklarować fact(0) - ale dla bardziej złożonych warunków taki pattern matching nie wystarcza i guardy są potrzebne.

(Oczywiście w prawdziwym kodzie należałoby taką funkcję fact przepisać na rekurencję ogonową...)

To akurat nie jest Java, ale C#. Jeśli ktoś używa np. Unity (to jest coraz większa grupa), to będzie mógł użyć jako biblioteki.
No ok.
Pytanie, jak z wydajnością.
To bardziej kwestia sprofilowania tego wzdłuż i wszerz, niż użytego języka programowania (przyjmując, że używana VM C# jest odpowiednio wydajna, np. ma JIT itp.)

Poza tym zostaje jeszcze możliwość odpalania .exe z argumentami i przechwytywania wyniku - teraz tak tego używam w grze do testów.
Unix-style! ^ ^
To chociaż o kompatybilności z Mono pamiętaj. :P

A tak w ogóle to kod jest prosty, więc może na koniec pomyślę o przepisaniu do C++ (chociaż jakość tego będzie raczej mizerna, bo na co dzień nie piszę w C++). Będzie okazja do przetestowania np. https://cscpp.codeplex.com/ :D
To jest transpilator C# na C++/CX.
C++/CX to jakiś "wynalazek" M$ i nie jest kompatybilne z C++.
Przenośne w rozumieniu "działa na wszystkich wersjach Visty". :D

Ale dwie rzeczy ciągle trzymają mnie przy języku polskim w moich domowych projektach:
1. Lubię to, że od razu widzę, które funkcje/klasy/itd. są moje, a które nie.
A jakie to ma znaczenie?
Jestem otwarty na argumenty, ale IMO to nawet nie powinno mieć znaczenia (w sensie, że jeśli ma, to coś może być źle).

2. Lekka nutka patriotyzmu... mój program i tak nie będzie na tyle przydatny, żeby używał go cały świat, więc niech Polacy czują, że mają coś "od swojego". Chociaż z drugiej strony może sam dołki kopię pod swoimi skoro, jak widać, wolicie angielskie nazwy ;)
Nie widzę związku z patriotyzmem.

To, czy program (bardziej biblioteka) będzie przydatna, zależy od wielu czynników, ale przejrzyste nazewnictwo jest jednym z ważniejszych.
Ty lepiej wiesz, co siedzi w środku, ale z tego co ja widzę, nie ma większych przeszkód, by ten program miał być powszechnie używany.
Popadanie w  "i tak nie będzie popularne, więc zrobię byle jak" to popadanie w "samospełniającą się przepowiednię".

Jeśli zdecydujesz się na otwarcie źródeł, i resztę rzeczy też zrobisz dobrze (architektura kodu, wydajność, stylistyka...), to taki program może być cennym wpisem do portfolio.
Tutaj wydaje mi się, że polskie identyfikatory będą raczej widziane jako brak profesjonalizmu, więc też Ci nie posłużą.

To nie patriotyzm, to obfuskacja...
Gdy dostaję kod, który nie jest po angielsku (wyłączając komentarze), to nie ma znaczenia czy jest po niemiecku, włosku, polsku, czy białorusku - jest tak samo (imho) nieczytelny.
Czasem bywa po chińsku albo japońsku.
Z ichnimi znakami.

Ja lubię te znaki, lubię też Unicode, ale kodu źródłowego to won ze wszystkim spoza drukowalnego podzbioru ASCII! :P

(EDIT: musiałem wspomnieć u drukowalności, bo mój kolega raz w stringu w shesll-skrypcie walnął bajt ASCII dla escape. Jak dla mnie to 10x gorsze, niż nawet kanji w kodzie -_- :P)
« Ostatnia zmiana: Kwiecień 13, 2015, 22:45:42 wysłana przez Xender »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 14, 2015, 14:19:12
Cytuj
Ja lubię te znaki, lubię też Unicode, ale kodu źródłowego to won ze wszystkim spoza drukowalnego podzbioru ASCII! :P
Właśnie dokładnie z tego względu (też?) nie lubię Pythona.

Offline Xender

  • Użytkownik

# Kwiecień 14, 2015, 15:38:55
Właśnie dokładnie z tego względu (też?) nie lubię Pythona.
Wcięcia są jak najbardziej drukowalne, handluj z tym.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 14, 2015, 15:54:21
Wcięcia są jak najbardziej drukowalne, handluj z tym.
Powiadasz? No to mi wyjaśnij czym w wydruku różnią się cztery spacje, tabulator i centymetr kwadratowy marginesu? :P

Offline Xirdus

  • Redaktor

# Kwiecień 14, 2015, 17:01:53
Krzysiek K.: ale tu nie chodzi o to czy coś jest drukowalne czy nie, tylko czy należy do drukowalnych znaków ASCII. To mniej więcej tak samo jak to, które kraje leżą w Europie a które nie ;)

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 14, 2015, 17:18:04
Cytuj
Krzysiek K.: ale tu nie chodzi o to czy coś jest drukowalne czy nie, tylko czy należy do drukowalnych znaków ASCII.
No właśnie. A tabulacja nie jest drukowalnym znakiem ASCII, tylko kontrolnym.

Offline Xender

  • Użytkownik

# Kwiecień 14, 2015, 18:37:57
@Krzysiek K. - A gdzie ja napisałem, że tab jest drukowalny?
Napisałem, że wcięcia są drukowalne - są widoczne na wydruku.

To, czy przy przepisywaniu z wydruku do komputera wybierzesz tab czy 4 spacje nie ma dla interpretera znaczenia.

Od marginesu różni się tym, że margines jest (hurr durr) stały.


Swoją drogą, jak chcemy ponarzekać, to w Linuxie (kernelu) panuje obrzydliwa konwencja używania taba jako zamiennika 8 spacji przy wcinaniu.
Ktoś chciał wciąć 15 kolumn? Tab i 7 spacji.
Ty chcesz wciąć 15 kolumn? Musisz zrobić tak samo, to oficjalne wytyczne [braku] stylu.
A potem patrzę, jak wszystko się roz... przy tabie ustawionym na 4. Masakra...
Czasem myślę, że programiści C to jednak tryglodyci...

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

  • +3
# Kwiecień 14, 2015, 18:44:09
Cytuj
Swoją drogą, jak chcemy ponarzekać, to w Linuxie (kernelu) panuje obrzydliwa konwencja używania taba jako zamiennika 8 spacji przy wcinaniu.
Przecież nie od dziś wiadomo, że Linux powstawał w Notatniku. ;)

Offline Xender

  • Użytkownik

# Kwiecień 14, 2015, 22:10:28
No, panie Redaktorze, trochę offtop się zrobił, trzeba by posprzątać wątek... :P

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 14, 2015, 22:39:45
Raczej derail niż offtop. Na sam temat algorytmów w tym wątku może były ze dwa posty.

Offline matheavyk

  • Użytkownik

  • +3
# Czerwiec 10, 2015, 04:55:15
Na temat algorytmów było niewiele, to prawda. Niestety, bo liczyłem na jakieś ciekawe nowe drogi, którymi mógłbym podążać przy tworzeniu mojego generatora. Ale to nic :)

Mam dla was kilka newsów:
1. Zdecydowałem się, tak jak radziliście, wydać w przyszłości mój kod jako bibliotekę w C# i osobno w C++. W C# praca jest zakończona, w C++ daj Boże, żeby nie było żadnych trudności ;p
2. Architekturę poprawiłem tak, że będzie super łatwo używać (MapGenerator.CreateMap...() ), a jednocześnie łatwo będzie rozszerzyć o własne metody tworzące, gdyby ktoś chciał.
3. Zgodnie z waszymi radami cały kod jest po angielsku.
4. @Xender, zamiast guard jest już predicate ;)
5. Jak zwykle przepraszam za to, że nie pokazuję żadnego kodu, ale terminu realizacji (dość odległego) z poprzednich postów dotrzymam.
6. Poprawiłem trochę moją brzydką stronkę, dodałem lepsze obrazki, bo tworzone bezpośrednio z wyników działania generatora map, dodałem ilustracje do dwóch pozostałych metod. Zapraszam do przejrzenia, jeśli komuś się nudzi i nie ma na co zmarnować 30 sekund ;p http://scratchgames.ja24.net/generatormap/
7. Moja praca na studia zawierać też będzie opis tych czterech użytych algorytmów - umieszczę go tutaj, kiedy tylko będzie skończony i opublikowanie go będzie legalne :)

Offline Xender

  • Użytkownik

  • +1
# Czerwiec 10, 2015, 12:29:44
No teraz to fajniej to wygląda.
Powodzenia. :)

Nie wiem, na ile pewnie czujesz się w C++ z templatkami i innymi magicznymi rzeczami.
Jakbyś miał z tym problem przy rewrite, daj znać.

Offline matheavyk

  • Użytkownik

  • +4
# Czerwiec 13, 2015, 22:35:43
Taka mała ciekawostka [Unity][WebGL]:
http://scratchgames.ja24.net/prezentacjageneratora/

Można sobie w przeglądarce odpalić generator map i pogenerować, a także przetestować jak się po wygenerowanej mapie ludzikiem chodzi. Sterowanie ludzikiem: strzałki, spacja, c (zmiana kamery).
"Otwórz plik .txt" <-- ten przycisk nie działa w WebGL, przepraszam że go nie usunąłem.

Zrobione to jest w Unity webGL (preview), więc możliwe, że komuś nie będzie działać i prawdopodobnie nie będzie to moja wina. Na firefoxie zazwyczaj wyskakuje jakiś błąd na początku, ale wystarczy nacisnąć "ok" i działa normalnie.

Byłbym bardzo wdzięczny, gdybyście mogli przetestować, czy u was działa :)
« Ostatnia zmiana: Czerwiec 13, 2015, 22:37:40 wysłana przez matheavyk »

Offline Xender

  • Użytkownik

  • +1
# Czerwiec 14, 2015, 19:04:49
Brawo!

U mnie (Firefox) działa, po dopuszczeniu domeny i WebGL w Noscripcie (fajnie, że nie zaciąga JS z mnóstwa różnych serwerów i jakichś dodatkowych analiticsów).
Błąd wyskakuje, ale działa pomimo tego.

Generalnie: dobra robota.

Tak się powinno prezentować takie projekty - niezła strona (możnaby ją trochę dopieścić, ale jest ok) i demo, w dodatku z przykładową grą.


Mam nadzieję, że jeśli dojdzie do publikacji źródeł, dokumentacja będzie miała równie wysoką jakość co demo. :)