Grrr wrrr brrr!!

O kim ten tytuł? O Polskich siatkarkach, które mnie najzwyczajniej w dwóch ostatnich meczach zawiodły :(

Całe mistrzostwa grały jak maszyny do wygrywania, a mecz półfinałowy oraz mecz o brązowy medal wyglądały prawie tak samo jak gra z kolegami na WF-ie…

Polski blok? Zawodniczki wyskakiwały do bloku, ale faktycznie wybroniły w ten sposób zaledwie kilka piłek. Do tego doszło jeszcze pełno nieszczęśliwych wypadków i nieporozumień wewnątrz naszej drużyny. To wszystko złożyło się ogromną porażkę I nie chodzi mi tu już tylko o to że nie mamy medalu czy o to, że przegraliśmy te mecze. Ja mam żal o to, że w tych ostatnich dwóch meczach coś się u nas zepsuło. Zupełnie jakby je ktoś zaczarował…

Zastanawia mnie powód dla którego nasze Polskie `Złotka` tak mocno obniżyły poziom w tych ostatnich meczach. Może była to trema, albo jakiś inny czynnik losowy. Takie rozmyślania jednak nie zmienią faktu, że na finałowe mecze aż żal było patrzeć.

To tyle. Musiałem to z siebie wyrzucić bo chyba by mnie zjadło od środka :P

The Settlers VI

Ufff, właśnie skończyłem ostatnią misję w Settlersach 6, co oznacza że wróciłem do żywych.

Jeśli chodzi o grę to jest wciągająca co zresztą było widać bo nie było mnie tutaj ;) Ale już skończyłem i teraz mogę spokojnie wrócić do pracy o ile nie wciągnie mnie co innego :P

Składająca się z 16 misji kampania jest ciekawa i kończąc każdą z nich chce się natychmiast grać następną - to prawie jak interaktywny serial :D Pomimo wysokiego stopnia uzależniania - bardzo polecam tą gierkę.

NIC! (w pozostałej roli The Settlers VI)

To, że tytuł posta jest napisany dużymi literami nie oznacza nawet w najmniejszym stopniu, że jest to skrót od czegokolwiek! Po spojrzeniu na moje poprzednie posty doszedłem do wniosku, że trzeba jakiś napisać bez ukrytego w nim 3-literowego skrótu, który rozumie zaledwie kilka osób.

Otóż ten tytuł oznacza totalne NIC!
Czyli, że co? Ano to, że przez cały dzisiejszy dzień nie zrobiłem prawie nic. Dorwałem po prostu grę The Settlers VI i nie mogę się od niej oderwać! Te misje wciągają jak dobry serial. Skończysz jeden odcinek to chcesz obejrzeć następny…

Cudem udało mi się przed chwilą zauważyć, że istnieje przycisk wyjścia z gry. Jeśli chodzi o samą grę, to pomimo wysokiego ryzyka uzależnienia się, bardzo ją polecam. Wprawdzie ciężko nazwać to kontynuacją którejkolwiek części, a już na pewno daleko przesadzonym byłoby stwierdzenie, że ta gra ma coś wspólnego z mechaniką The Settlers lub The Settlers II.

Dodatkowo powiem, że gry takie jak ta - piękne i grywalne - ratują honor coraz nowszych, piękniejszych i coraz mniej grywalnych tworów grup developerskich.

Błąd zidentyfikowany

Dzisiaj rano wpadł mi do głowy pomysł na to co przyczynia się do tego, że okienko traci styl WS_CAPTION. Doszedłem do wniosku, że jest to spowodowane tym kawałkiem kodu:

void ageWindow::setSize( int w, int h )
{
ageVector pos = getWindowPosition();
POINT p = {pos.x, pos.y};
WINDOWINFO info;
GetWindowInfo( hWindow, &info );
ScreenToClient( hWindow, &p );
RECT win = { pos.x, pos.y, w+info.cxWindowBorders, h+info.cyWindowBorders};
MoveWindow( hWindow, win.left, win.top, win.right, win.bottom, true );
}

Taki sam jest efekt kiedy użyję AdjustWindowRect()’a, ale jeśli wywołam samo MoveWindow() to okno zmienia rozmiar tak jak powinno… Gdzie tutaj sens? Na prawde nie wiem co powoduje problemy w tym kodzie, ale zamierzam sie tego dowiedzieć. Pokombinuję jakoś i coś się wymyśli ^^

Napisane w Programowanie. Tagi: . Bez komentarzy

Pong2 czyli stąd do drzewa i fpisdu

Rano pisałem, że nic mi się nie chce. Z tej okazji postanowiłem napisać sobie małą gierkę - Ponga. Wykorzystałem grafikę z mojego poprzedniego tworu i dołożyłem kilka dźwięków, aby rozgrywka nie była aż tak nudna. Chociaż pewnie muzyka i tak tutaj nic nie zmieni…

Tak czy inaczej dobrnąłem właściwie do końca i tutaj czekała na mnie ogromna jak pół słonia niespodziewanka… Otóż okazało się że kiedy uruchamiałem ponga w VS2k5 EE to jego okienko było całkowicie normalne, a kiedy spróbowałem uruchomić exeka żeby sprawdzić ostateczne działanie to okienko wyglądało jakby ktoś mu zapomniał nadać styl WS_CAPTION.

Ustawianie WS_CAPTION brutalnie za pomocą SetWindowLong() dawało jeszcze gorsze efekty ponieważ okno pokazywało się i po chwili całkowicie znikało, więc szybko z tego zrezygnowałem.

Powiedziałem sobie wtedy - spokojnie, może to tylko dlatego, że mam M$’ową Vistę. Włączyłem komputer brata na którym zadomowił się stary dobry WinXP i po przegraniu na niego wszystkiego moim oczom ukazała się jeszcze lepsza szopka! Nie dość że nie było belki tytułowej (czego się niestety spodziewałem) to calutka grafika była około 2x większa niż normalnie. Szybko wyłączyłem komputer i przerażony oddaliłem się zjeść kolację.

Po kolacji - ku mojemu ogromnemu zdziwieniu - nic się nie zmieniło! Miałem nadzieję, że mam zwidy z głodu, ale nic z tego…

Nadal nie wiem gdzie jest kot pogrzebany. Tak kot! Psów pogrzebano już tyle, że powinno się postawić Grób Nieznanego Psa… W każdym razie… Gdyby ktoś miał jakiś pomysł skąd te pokemony wyświetlania mogą się brać to chętnie przyjmę pouczenie.

224!

Dzisiaj sprawdziłem statystyki na tej stronce i poraziła mnie ilość odwiedzin. 224. Nie sądziłem, że komuś będzie się chciało to oglądać a tu prosze. Niecałe pięć dni i ponad 200 odwiedzin.

To miłe zaskoczenie :)

Nie chce mi się!

Dzisiaj od rana nie spojrzałem jeszcze na żadną linijkę kodu!

Wiem, że to strasznie, ale nie mam na to nawet najmniejszej ochoty. Chyba dla rozluźnienia napiszę sobie jakąś małą gierkę w 20 minut ;) Może tego Ponga2 którego obiecałem kiedyś na forum? ^^ Przy okazji sprawdzę czy to AGE jest na tyle wygodne w użyciu na ile być powinno, bo w końcu o to głównie chodzi.

Napisane w Bzdury. Bez komentarzy

Postępy

Ciężko będzie to nazwać biblioteką do obsługi sieci. Jest to raczej kilka klas które znacząco skrócą tę obsługę. Do tej pory udało mi się zakodzić całkowicie obsługę połączenia przez protokół TCP, a aktualnie zostaje jeszcze do dopracowania komunikacja przez UDP.

Póki co nie będę starał się uruchomić biblioteki na Linuxie, bo to niepotrzebnie wydłużyłoby czas nad ageNet, ale w Windowsie kompiluje się w VS2k5 EE oraz w Dev-C++ [mingw] więc myślę, że przejście na Linuxa będzie dość łatwe, jak będzie potrzebne :)

ESL - Easy Socket Library

Jako że kompilacja C++ Sockets Library nie udała mi się i nie mam zamiaru dalej się z nią bawić postanowiłem napisać sobie malutką bibliotekę do programowania sieci.  Jej głównymi założeniami są:

  1. Niewielka ilość kodu potrzebna do obsługi sieci
  2. Łatwość w użytkowaniu
  3. Intuicyjność

Dodatkowo planuję jeszcze sprawić aby działała jeszcze na Linuxie co nie powinno być aż takie trudne ponieważ kod zostaje prawie taki sam :)

Do tej pory udało mi się napisać co nieco i sprawdzić działanie owego czegoś - jestem całkiem zadowolony jak na zaledwie kilka godzin pracy. Jutro porobię dokładniejsze testy tego potworka i spróbuję sprawić aby poszło na Linuxie, a potem wreszcie zabiorę się za ageNet! ^^

A teraz idę spać. Dobranoc!

Object Oriented Programming

Czasem zaczynam myśleć, że programiści traktują zasady obiektowości jako święte i bez znaczenia jest czy to co tworzą będzie wygodne w użyciu. Przecież musi być zgodne z regułami OOP!

Ostatnio na forum widziałem gdzieś prawie odrazę dla stosowania zmiennych globalnych - pomimo tego ze 90% obiektów potrzebowała właśnie tej jednej zmiennej.

Chodzi mi o wskaźnik na urządzenie D3D. W temacie poruszany był problem umieszczenia tego w kodzie i jedyne rozwiązania widziane przez autora to:

  • wcisnąć wskaźnik do jednej klasy w sekcji private i chyba uczynić go jeszcze statycznym i zaprzyjaźnić z nią 3/4 innych klas
  • skutecznie przekazywać wskaźnik do urządzenia kolejnym klasom które go wymagają.

Nie trzeba być super programistą żeby domyślić się, że pierwsze rozwiązanie jest raczej naciągane przez duże `N`, a drugie po prostu nie wygodne.

A nie łatwiej/szybciej/elastyczniej jest po prostu dać ten wskaźnik jako zmienną globalną? Ja zastosowałem właśnie takie rozwiązanie w AGE. Zyskałem na tym łatwość w dodawaniu nowych części, które potrzebować będą tego wskaźnika, no i najważniejsze - wygodę. Nie mam miliona wskaźników tylko jeden z którego korzystają wszyscy oraz nie muszę przekazywać tego wskaźnika każdemu nowemu obiektowi z osobna.

IMHO reguły OOP to tylko dobre wskazówki i nie można ich traktować jako wyznacznika tworzenia nowego kodu… Przynajmniej ja nie będę dopóki rozwiązanie zgodne z OOP będzie strasznie niewygodne w późniejszym użyciu.