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)

26 marca 2015

Eva

Minęło kilka dni i udało mi się narysować kolejny rysunek. Tym razem trafiłem na zdjęcie Evy Green i z użyciem moich umiejętności mozolnie przeniosłem je na papier. Oczywiście cudów się nie spodziewałem.
Minusy
Moja Eva wyszła szersza w barkach i w głowie. Rozsypały mi się ramiona i nie wyglądają tak dobrze jak powinny. Twarz (gdyby była węższa) w miarę przypominałaby oryginał. Ponownie uciekły mi oczy. Nie wiem dlaczego, ale nie mogę znaleźć złotego środka, który pozwoli mi na poprawienie tego elementu. Część cieni jest zbyt delikatna - nie widać ich dobrze na zdjęciu.
Tak po prawdzie większość błędów widać dobrze dopiero po zestawieniu zdjęcia i obrazku ze sobą. Jak mam przed sobą oryginał nie jest tak źle :).

Plusy
Powoli wiem co to cieniowanie (poza tym kopiując ze zdjęcia widać od razu co i gdzie cieniować). W porównaniu z poprzednimi rysunkami lepiej wyszły proporcje twarzy i ciała. Jednak rewelacji nadal nie ma.
Tak czy inaczej - ćwiczę dalej.


Wasut wrzucił kilka, nad wyraz słusznych, uwag do rysunku i pewną drobną pomoc, która pokazuje jak bardzo rysunek rozjechał się z rzeczywistością. Dzięki!

19 marca 2015

Żabka

Najnowszy rysunek.
Dalej mam problemy z doborem proporcji - twarz wyszła zbyt okrągła zamiast pociągła, ale mimo to postać jest podobna do oryginału. Szyja wyszła za długa.

Niestety, jako że nie mam czasu, aby zrobić rysunek za jednym podejściem, robiłem go dwa-trzy dni. W efekcie kartka, na której powstała, trochę się zużyła (łącznie z zachlapaniem jej wodą).
Sam rysunek jest wielkości połowy kartki a4 wzdłuż.
Prawdę powiedziawszy, gdyby rysunek troszkę pociągnąć photoshopem (tam gdzie trzeba wydłużyć, tam gdzie trzeba - skrócić) byłby co najmniej dobry.

Tak czy inaczej - mi się podoba :).


Rysunek referencyjny:

_ooo_dO-Ob_ ooo_

Ostatnio nie miałem zbyt dużo czasu, aby stworzyć nowe wpisy z rysunkami (i z czymkolwiek innym). Nie znaczy to jednak że nic nie robię. Powstało kilka mniej lub bardziej ciekawych rysunków i postaram się je zamieścić w najbliższej przyszłości.