28 października 2016

Rysunek Głowomeba

Od ostatniego wpisu o głowomebie minęło już trochę czasu, a gdy odkłada się rzeczy na później coraz ciężej zakończyć rozpoczętą pracę.

Głowomeba czekała i czekała, aż się w końcu doczekała.  Efekt poniżej, wiele lepiej nie będzie bo nie pozwalają na to moje umiejętności.
 
Poniżej umieszczam aktualne foto.




W tej chwili oceniam kompletność rysunku potwora na 95% - nie ma dorysowanej "podłogi" i jakiegoś sensownego tła portalu, z którego wychodzi. 
Rysunek wykonany jest ołówkami na kartce w formacie A4.

27 października 2016

Generator map lekcja 2

Miałem chwilę na przerobienie kolejnego rozdziału tutoriala czyli Marching Squares. Teraz mój kod generuje mapę węzłów, z których będzie można przejść do wygładzania krawędzi pikselowej mapy.

Zrzutów ekranowych nie daję ze względu na to, że wizualnie nic się nie zmieniło. Siadam do części trzeciej.

14 października 2016

Generator map lekcja 1

Na bazie tutoriala do silnika gier Unity i lekcji Cellular Automata napisałem (podobny) generator podziemi w z użyciem Java 1.7 i JavaFX.

Wersja po pierwszej lekcji generuje takie oto mapki jak na załączonych screenach. Po przerobieniu kolejnych lekcji pokażę osiągany postęp.

(Paski widoczne na generatorze to ilość wygładzeń mapy (0-10) i stopień jej wypełnienia białym(0-100))






22 września 2016

W poszukiwaniu palantira

W najbliższym czasie przewiduję rozpoczęcie prowadzenia starożytnej kampanii do MERP tj.W poszukiwaniu palantrira.
Od dawna mnie korciło, aby poprowadzić ten komplet przygód. W tej chwili przegryzam się przez kolejne rozdziały i zapisuje co ważniejsze rzeczy, aby nie kartkować w razie czego książki w czasie gry.
Za dodatkowo źródło wiedzy służy mi "Bestiariusz Tolkienowski" Davida Day

Drużyna będzie czteroosobowa. W tej chwili skład prezentuje się następująco - elfka, człowiek, krasnolud i prawdopodobnie hobbit. Ze względu na to, że nie mieszkamy w tym samym mieście do komunikacji użyjemy Skype i - jak dobrze pójdzie oraz jeśli będę miał czas się przygotowywać - Roll20. Gramy na mechanice kc-towej, a nie na tabelach MERP-a.
Poniżej wklejam mapkę Śródziemia z oznaczonym miejscem startu drużyny - tak to ta mała kropka na wschód od Osgiliath. W miarę postępów kampanii postaram się dodawać kolejne punkciki i krótkie opisy wydarzeń jakie spotkają dzielnych poszukiwaczy przygód.

Życzcie nam wytrwałości i powodzenia w pokonywaniu przeszkód!

12 września 2016

Rysunek - Głowomeba

Dawno mnie tu nie było ale o miejscu nie zapomniałem. Głowomeba- wersja wstępna wielkości mniej- więcej 1/3 A4:
Wersja rozwojowa w formacie A4.

06 sierpnia 2015

Jak nie programować

Czasem bywa tak, że kod, który piszemy, nie jest najlepszej jakości. Wpływają na to różne czynniki - od braku czasu, braku umiejętności po wygodę i brak zastanowienia nad tym co się pisze.
Poniżej prezentuję przykład kodu wyciągniętego z jednego z projektów, w których brałem udział. Zaznaczam - jest to oryginalny kawałek metody z produkcyjnego kodu. Wyciąłem z niego zbędne wywołania do obiektów, aby zachować samo mięsko oraz dodałem odpowiednie formatowanie, aby było widać poziom zagnieżdżenia wywołań.
Próba poprawienia tego co się w tej metodzie działo była niezłym wyzwaniem. Ta pętla for z czterema zagnieżdżonymi pętlami jest po prostu tak niesamowita, że musiałem się nią pochwalić. I nie - nie jest to mój kod :)


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
for (){
 for (){
  if (){
   for (){
    if (){
     for (){
      if (){
       if (){
        tu sie cos dzieje
       } else {
        if (){
         tu sie cos dzieje
        }
       }
      }
      if (ogromny warunek na dwie linie){
       tu sie cos dzieje
      }
     }
    }
   }
  }
 }
 for (){
  if (){
   if (){
    if (){
     return true
    }
   }
  }
 }
}
return to co ustalono w mega for

30 lipca 2015

Generator rzutów koścmi (java)



Na własne potrzeby napisałem kawałek kodu javy, który symuluje rzuty kostkami. Głowna zasada, która mi przyświecała – wywołanie musi być łatwe w użyciu i rozszerzalne.

Standardowo w takich wypadkach tworzymy klasę użytkową ze statycznymi metodami.  W takim wypadku wywołanie wygląda tak:


1
int diceRoll= Dice.k6()


Jest ok, ale nie jest świetne - trudno przypisać odgórnie rodzaj kostki do obiektu wymagającego kostkę zanim nastąpi test.

Wykorzystałem w takim razie możliwość stworzenia enum-a w javie. Sposób wywołania trochę się zmienił:


1
int diceRoll = Dice.k6.roll();

Dodatkowo łatwo zapamiętać w dowolnym obiekcie jakiego rodzaju kości obsługuje.


1
objWithDice.setDice(Dice.k6);

W efekcie powstał enum wywołujący rzuty kością przez refleksję metod klasy ze statycznymi metodami.


Poniżej kod enuma:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
enum Dice {

    k4("k4"), k6("k6"), k8("k8"), k10("k10"), k12("k12"), k100("k100");
    private Logger log = Logger.getLogger(Dice.class.getName());
    private String rollType;

    Dice(String rollType) {
        this.rollType = rollType;
    }

    public int roll() {
        try {
            Method m = Dices.class.getDeclaredMethod(rollType);
            m.setAccessible(true);
            return (Integer) m.invoke(Dices.class);
        } catch (IllegalAccessException | IllegalArgumentException |
                InvocationTargetException | NoSuchMethodException | SecurityException ex) {
            log.log(Level.SEVERE, "Blad losowania dla " + rollType, ex);
        }
        return -1000;
    }
}

klasy, która zawiera rzuty kostką:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class Dices {

    private Dices() {
    }

    public static int k4() {
        int min = 1;
        int max = 4;
        return roll(min, max);
    }

    public static int k6() {
        int min = 1;
        int max = 6;
        return roll(min, max);
    }

    public static int k8() {
        int min = 1;
        int max = 8;
        return roll(min, max);
    }

    public static int k10() {
        int min = 1;
        int max = 10;
        return roll(min, max);
    }

    public static int k12() {
        int min = 1;
        int max = 12;
        return roll(min, max);
    }

    public static int k20() {
        int min = 1;
        int max = 20;
        return roll(min, max);
    }

    public static int k100() {
        int min = 1;
        int max = 100;
        return roll(min, max);
    }

    private static int roll(int min, int max) {
        return new Random().nextInt((max - min) + 1) + min;
    }
}

 oraz testu użycia:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
public class TestUtils {
    private static Logger log = Logger.getLogger(TestUtils.class.getName());
    public static void main(String[] args) {
        int k4= Dice.k4.roll();
        log.log(Level.INFO, "test k4 :" + k4);
        int dice2k6 = Dice.k6.roll() + Dice.k6.roll();
        log.log(Level.INFO, "test 2k6 :" + dice2k6);
        int dice2k10 = Dice.k10.roll() + Dice.k10.roll();
        log.log(Level.INFO, "test 2k10 :" + dice2k10);
    }
}


Działa dobrze, jest łatwe w użyciu i bez problemu można dodać kolejne kości, gdyby ktoś potrzebował.

Do podświetlenia składni użyłem: http://hilite.me/.
Projekcik napisany w Javie w najlepszym dostępnym środowisku programistycznym: IntelliJ IDEA 14

27 lipca 2015

Tuts+

Przeglądając neta znalazłem świetną stronę: http://gamedevelopment.tutsplus.com/ i tak się zacząłem zastanawiać - ile czasu zajmie mi przeczytanie, nie mówiąc o wykorzystaniu, interesujących mnie tematów, które tam znalazłem...

23 lipca 2015

zastój

Ponownie zastój na blogu.
Zajmowałem się ostatnio rysowaniem rąk  i różnych drobiazgów, a także programowaniem. Jak skończę z programowaniem może pokażę co napisałem. O ile będzie co pokazać.
Niestety nie chce mi się pisać, a i też nie mam o czym.

Kowboj z poprzedniego wpisu nie został ukończony. Poprawiłem mu jedyni broń (opierając się - niczym profesjonalista, heh) na zdjęciu odpowiedniego modelu rewolweru oraz wycieniowałem rękawy koszuli. I tyle. Zdjęcia nie mam :)

12 maja 2015

Kowboj

Aktualnie pracuje nad rysunkiem kowboja. Niestety nie mam kiedy go skończyć. W tej chwili mijają ok. 2 tyg od chwili gdy zacząłem go rysować, a nadal jestem w przysłowiowym lesie.

Po tym czasie powstał sam kontur. Poniżej rysunek w wersji zaraz po zbudowaniu postaci i kolejny - po poprawieniu krawędzi.
Czeka mnie jeszcze sporo pracy.
Pierwsza wersja postaci. Zdjęcie robiłem pod dużym kątem stąd taki dziwny układ.

Aktualny stan rysunku. Masa do poprawiania i dorysowania (chociażby muszę użyć linijki żeby broń nie wyglądała fatalnie)