wtorek, 3 sierpnia 2010

Drzewka dzielone na osiem, OBeJoty oraz… Fantasy NFL

screen Dzisiaj troszkę nietypowa notka. Nie dlatego, że napisana po dłuższej nieobecności na blogu (bo to właściwie norma – niestety), ale dlatego, że lwią część notki nie zajmie nic związanego z działalnością developerską, ale z grami “przeglądarkowymi”, a konkretnie – futbolową wersją Yahoo! Fantasy, dotyczącej ligi NFL i składem, którym spróbuję swoich sił w nadchodzącym sezonie. Przy okazji postaram się opisać co i jak w sposób bardzo prosty – być może kogoś uda się zachęcić chociażby do zainteresowania się tą niepopularną w Polsce dyscypliną (choć coś się zaczyna zmieniać w tej kwestii w naszym kraju).

Zacznijmy jednak od spraw silnikowych.

Siłą rzeczy, silnik graficzny powinien zapewniać, iż obiekty dodanie do sceny wyświetlają się poprawnie, podlegają zdefiniowanym efektom, ale przede wszystkim – są bardzo szybko renderowane. A przynajmniej na tyle szybko, na ile to możliwe. Oczywiście, w Scavie nie będzie aż tak szybko – to nie ta półka programistyczna. Tym niemniej, jeżeli przyjdzie silnikowi zmierzyć się z dość dużym obiektem (np. terenem wczytanym z pliku), programista jest w stanie zażyczyć sobie, aby taki czasonieumilacz był renderowany z użyciem drzewa ósemkowego, czyli trójwymiarowej struktury kostki, która rekurencyjnie dzieli się ciągle na osiem mniejszych kostek, dzieląc także wielokąty, z których składa się teren na mniejsze partie. Dzięki potrafimy odrzucić niewidoczne polygony i wyświetlać tylko część. Proste i wygodne, choć nie zaprzeczam, że nie wykorzystałem całego potencjału wykorzystania tego mechanizmu – drzewa ósemkowe są zakładane na obiekty, a nie na całą scenę, w wyniku czego każdy obiekt ma własne drzewo. Jest to o wiele prostsze implementacyjnie w moim przypadku, choć niekoniecznie dobre dla wydajności – widocznie trzeba będzie zrobić potężną refaktoryzację kodu. Jeżeli chodzi o kwestię techniczną – ponieważ zakładam, że nie tylko drzewo ósemkowe się przyda, mamy główną klasę bazową CPartitioningNode (reprezentującą jeden węzeł w takim drzewie), a z niej klasy pochodne COctreeNode (już jest), CLooseOctreeNode (co zaimplementował w swoim silniku Regedit (pozdrawiam)), CBSPNode i inne (miejmy nadzieję, że w przyszłości starczy mi sił na nie).

Drugą rzeczą jest wczytywanie obiektów z plików zapisanych w popularnych formatach, jak na przykład OBJ. Tutaj kluczową kwestią okazało się to, żeby wczytywanie takiego modelu odbywało się swoim rytmem, ale dane tak naprawdę były zapisane w samym meshu, dzięki czemu na danym obiekcie można działać tak samo jak na wszystkich innych. Wydaje się to oczywiste i logiczne, ale w frameworku Yesta tak nie było (zresztą co tam było…), dlatego o tym wspominam. Co więcej, wczytanie pliku odbywa się za pomocą wywołania tej samej metody Import co zawsze, natomiast ważne jest rozszerzenie pliku, gdyż to na jego podstawie algorytm rozpoznaje, którego loadera ma użyć. W planach są oczywiście loadery innych formatów, jak na przykład md2, jednak tutaj pojawia się mały problem projektowy – co zrobić z animacją. Hmm, trzeba będzie znowu popisać sobie na kartce…

Tak czy inaczej, prace idą spokojnym tempem, choć w ostatnim czasie odeszła mi chęć na kodowanie – ze znacznie większa efektywnością wróciłem do gry w Neverwinter Nights oraz Tony Hawk’s Pro Skater 4 – taki urok wakacji.

W porządku, a teraz część eksperymentalna, czyli Yahoo! Fantasy Football Game. Generalnie większość ludzi gra w fantasy na NFL.com, gdyż na Yahoo! sporo ludzi gra tylko do pewnego momentu, a potem zostawia drużynę samą sobie. Pomyślałem jednak, że prościej będzie zacząć od Yahoo!, zwłaszcza, że nie wiem czy mnie to pociągnie.

Ale czym jest tak naprawdę to Fantasy Game? Jak wiemy, w Ameryce Północnej działa parę większych sportowych lig – NBA (moja ulubiona (ta pierwsza) i także zastanawiam się nad uczestnictwem Fantasy NBA, ale to wymaga o wiele więcej zaangażowania), NHL, NFL (czyli nasz przypadek), MLB, MLS i inne. Każdy uczestnik tworzy drużynę i czeka na przydział do ligi (chyba że zapisuje się do konkretnej prywatnej). W większości wypadków kulminacyjnym momentem sezonu (a zarazem pierwszym większym punktem) jest draft, w którym pobieramy zawodników do naszej drużyny – draftować można bezpośrednio (trzeba być obecnym przy komputerze w danej chwili, aby wybierać poszczególnych graczy) lub ustawić swój ranking i zdać się na AutoPick (opcja, którą wybrałem, komputer sam pobierze zawodników zgodnie z ich dostępnością i naszym ustalonym rankingiem). Później, jeżeli już mamy drużynę, czekamy na sezon (ten realny), na każdą kolejkę (w przypadku NFL, gdyż w przypadku NBA i NHL drużyny rozgrywają więcej meczów i dlatego wymagane jest większe zaangażowanie) ustawiamy skład z naszych zawodników (których możemy później wymieniać, wyrzucać, podpisać itd.) i modlimy się. W każdej kolejce gramy z innym uczestnikiem danej ligi i wygrywa ten, którego zawodnicy na prawdziwych boiskach uzyskają więcej punktów (według punktacji w danej lidze). Słowem – musimy wykazać się zmysłem menedżerskim i tak ustawić nasz skład, aby zawodnicy, których wybraliśmy, w realnej kolejce NFL zagrali jak najlepiej i dostarczyli nam jak najwięcej punktów.

Jak widać, jest to świetna zabawa, choć zabiera sporo czasu (szczególnie w przypadku NBA, gdzie codziennie rozgrywane są mecze) i nerwów (gdy naszym graczom nie układa się rozgrywka). Jest to jednak raj dla managerów, którzy narzekają na brak adrenaliny.

Jeżeli chodzi o zasady futbolu amerykańskiego – polecam parę linków:

Tutaj mała uwaga – pewnie w większości z Was ten sport kojarzy się z jajowatą piłką, potężnymi zawodnikami w zbrojach i hełmach, którzy nawalają się między sobą tworząc istny chaos na boisku, na którym w dodatku ktoś narysował dziwne linie co 10 jardów. Tak naprawdę futbol amerykański to piękny przykład na grę zespołową, gdzie każdy blok partnera z drużyny ma znaczenie, a taktyka musi zostać perfekcyjnie zrealizowana, aby zdobywać kolejne jardy oraz – co istotniejsze – touchdowny (przyłożenia) czy pozycje do rzutów wolnych. Tutaj nieważne jest to, że ktoś jest piekielnie szybki i zwrotny – bez wsparcia całego zespołu nic nie znaczy, gdyż pamiętajmy, że po drugiej stronie, w formacji defensywnej czekają już ludzie, którzy tylko czekają, aby dorwać zawodnika z piłką. Nie da się ukryć – to sport wybitnie kontaktowy (zresztą podobnie jak koszykówka, choć tam przynajmniej nikt specjalnie nie rzuca przeciwnikami o ziemię).

W naszej grze Fantasy nie wybieramy całego składu, a jedynie 15 zawodników – quarterbacka (mózg formacji ofensywnej, podający piłkę do przodu, odpowiedzialny za przeprowadzenie całej umówionej zagrywki), dwóch running backów (dostają piłkę niemal do rąk i biegną z nią do przodu omijając obronę i wykorzystując bloki partnerów), trzech wide receiverów (biegnący do przodu i łapiący piłki rzucane przez quarterbacka), tight enda (członek tzw. linii ofensywnej, ale wyróżniający się tym, że może łapać piłki od quarterbacka), kickera (kopacz, jak nietrudno się domyślić, kopiący piłkę wznawiając grę oraz zdobywając punkty (tak, to on kopie pomiędzy te dwa wysokie słupki)), formacji defensywnej (tutaj traktowanej jako jeden zawodnik, wychodzi ona na boisko wtedy, kiedy atakuje przeciwnik) oraz pięciu zawodników na rezerwę. Oto krótki opis, tego, co mi się udało wydraftować w ciągu 15 rund na podstawie utworzonego wcześniej rankingu – troszkę naiwnego, ale zabawa to zabawa).

Moim numerem jeden (5. w całym drafcie) okazał się Shonn Greene z New York Jets (180 cm/102 kg), drugoroczny running back, który co prawda jest bardzo ryzykownym wyborem, ale w Jets, którzy bardzo dużo biegają, powinien mieć świetny statystycznie sezon (a o to chodzi w Fantasy), mimo przyjścia do zespołu legendy, LaDainiana Tomlinsona. Greene w minionym sezonie w 108 próbach biegu osiągnął 540 jardów (5,0 na próbę), zdobywając dwa touchdowny (dobiegł z piłką do końcowej linii przeciwnika, co jest warte 6 punktów) i trzy razy tracąc piłkę (gdy stracił ją upadając). Świetnie zaprezentował się w playoffach, gdzie zaliczał ponad 100-jardowe występy. Niestety, nie udało się zdobyć ani rewelacyjnego Chrisa Johnsona ani równie dobrego Adriana Petersona.

Na drugi ogień (16. w ogólności) nieoczekiwanie z rankingu wpisał się Miles Austin, wide receiver Dallas Cowboys (188 cm/97 kg), który też nieźle sobie poczynał w zeszłym sezonie – 81 odbiorów piłki, 1320 jardów (tu się wliczają zarówno jardy, które pokonała piłka przy podaniu do zawodnika jak i sam bieg z nią), 11 touchdownów. To wynik ukierunkowania zespołu z Dallas (i jego quarterbacka, Tony’ego Romo) na grę podaniami. Austin w końcu zaczął być głównym ogniwem zespołu.

Trzecim w kolejności (25. w ogóle) stał się Matt Schaub, quarterback Houston Texans (196 cm/108 kg), na którego mocno liczę. Na tyle mu ufam, że nie jest mi tak bardzo żal tego, że nie udało się zdobyć Peytona Manninga czy Drew Breesa. Schaub to MVP ostatniego Meczu Gwiazd (Pro Bowl) oraz lider paru statystyk w poprzednim sezonie. Zdobył 4770 jardów, 29 touchdownów (czyli 29 razy podał na touchdown) przy skuteczności podań 68%. Na nieszczęście, jego podania były przechwytywane 15 razy, a sam Matt był sackowany (powalany przed podaniem piłki) 25-krotnie, choć to akurat bardziej wina formacji ofensywnej Texans.

Czwarty (36.), Pierre Thomas z New Orleans Saints (180 cm/97 kg) to biegacz, którego pamiętam z finału Super Bowl wygranego przez Saints z bardzo ładnego przyłożenia bodajże na początku trzeciej kwarty. W Nowym Orleanie rywalizuje o pozycję running backa z Reggie Bushem, ale jednak wydaje się bardziej pewnym punktem zespołu. 793 jardy przy 147 próbach (średnia 5,4 jarda), 6 touchdownów biegowych, 2 touchdowny po podaniach (tak, biegacze też mogą łapać – Thomas z podań zdobył 302 jardów) i dwie straty (tzw. fumble). Statystycznie wydaje się lepszy od Greene’a, ale od tego ostatniego oczekuję znacznego postępu w drugim sezonie.

Na piątej pozycji (45.) zameldował się ekscentryczny skrzydłowy Cincinatti Bengals, Chad Ochocinco (186 cm/87 kg), który wraz z przybywającym do zespołu gwiazdorem Terrellem Owensem powinien stworzyć najlepszy duet skrzydłowych w NFL. Ciekawe tylko, czy uda się pogodzić w jednym teamie zawodników o tak mocnych charakterach (a jeszcze paru się w Cincinatti takich znajdzie). Jeżeli tak, to może być świetny sezon dla Bengals. Jego statystyki to 1047 jardy przy 72 odbiorach i 9 przyłożeń.

Szósty z kolei (56.) to weteran na pozycji tight-enda – Tony Gonzales z Atlanta Falcons (196 cm/109 kg). Nie udało się polowanie na Antonio Gatesa ani Dallasa Clarka, ale i tak jestem zadowolony z tego zawodnika. W minionym sezonie zdobył 867 jardy przy 83 odbiorach, notując także 6 przyłożeń. Wydaje się niewiele, ale kariera tego zawodnika była znacznie bogatsza, więc można spodziewać się solidnego poziomu (choć pewnie nie fajerwerków).

Siódmy (a w ogólności 65.) pojawił się Dez Bryant z Dallas Cowboys (188 cm/98 kg), debiutant, który nie ma chyba nawet podpisanego kontraktu (może się mylę), ale powinien dać parę punktów, gdyż zapowiada się na całkiem dobrego skrzydłowego. Zwłaszcza, że w Dallas grają sporo podaniami, więc piłki starczy. W razie czego wstawi się na tę pozycję kogoś z rezerwowych, kto dostarczy więcej punktów.

Na ósmej pozycji (76.) pojawiła się w końcu formacja defensywna w postaci obrońców Philadelphii Eagles. Nie jest to może wymarzony wybór, ale mogłem trafić gorzej, a obrona Eagles jest jedną z lepszych w lidze (12. w poprzednim sezonie). Minimalnie lepiej bronią grę dołem (bieganie) aniżeli górą (podania). Do wyróżniających się zawodników z tej formacji należą: Trent Cole (prawy defensive end – 191 cm/121 kg), Asante Samuel (cornerback – 178 cm/83 kg) oraz Brodrick Bunkley (defensive tackle – 188 cm/138 kg).

Na dziewiątej pozycji (w ogólności 85.) pozwoliłem sobie na prywatę, a mianowicie najlepszego (moim skromnym zdaniem), a przynajmniej najsilniejszego kopacza w NFL, a przy okazji najlepiej opłacanego, czyli (tadam) Sebastiana Janikowskiego z Oakland Raiders (188 cm/112 kg). Kopacz z Wałbrzycha w zeszłym sezonie trafił z odległości 61 jardów (1 jard = 0,91 m), co jest bodajże czwartym najlepszym rezultatem w historii ligi. Bardzo silne kopnięcie powiązane jest z dość dobrą skutecznością (89,7%) oraz honorowym miejscem najlepiej punktującego zawodnika historii klubu z Oakland.

Następnie mamy graczy rezerwowych, dlatego tylko ich wymienię (być może z krótkim opisem).

10. (96.) Eli Manning, quarterback New York Giants (brat Peytona – 193 cm/101 kg), 4021 jardów, 62,3% skuteczności, 27 touchdownów, 14 przechwytów, 30 sacków.

11. (105.) Marion Barber, running back Dallas Cowboys (180 cm/98 kg), 214 prób, 932 jardy (średnia 4,4), 7 przyłożeń, dwie straty.

12. (116.) Johnny Knox, wide receiver Chicago Bears (183 cm/83 kg), 45 odbiorów, 527 jardów, 5 przyłożeń. Rozwija się, to drugoroczniak, podobnie jak Greene.

13. (125.) Santonio Holmes, wide receiver New York Jets (180 cm/86 kg), 79 odbiorów, 1248 jardów, 5 przyłożeń (kandydat do zastąpienia Bryanta w pierwszym składzie).

14. (136.) Formacja defensywna Dallas Cowboys, 9. miejsce w poprzednim sezonie (prawdopodobnie lepiej na tym wyszedłem aniżeli na Eagles, choć to wybitnie zależy od przeciwnika), zdecydowanie lepiej bronią akcje biegowe niż podania. Najbardziej znani zawodnicy to linebacker DeMarcus Ware (dla niego tę formację chciałem zdobyć – jeden z najlepszych defensorów w lidze, 193 cm/118 kg), nose tackle (masywny gracz na środku trzyosobowej wersji linii defensywnej) Jay Ratliff (193 cm/136 kg) i cornerback Terence Newman (178 cm/87 kg).

15. (145.) Anthony Fasano, tight-end Miami Dolphins (193 cm/115 kg), 31 złapanych piłek, 339 jardów, 2 przyłożenia.

Cóż, automat tak mi wybrał (choć według moich zaleceń) i mogę jedynie naprawić coś poprzez wymiany i podpisanie wolnych agentów. Czasu mam jednak co niemiara, bo do 9. września, kiedy zaczyna się nowy sezon – do tego czasu mogę spokojnie się zastanowić nad wszystkim. Jeżeli kogoś zanudził ten fragment o futbolu amerykańskich, to gorąco przepraszam. To była pierwsza taka notka, pewnie nieostatnia, ale na pewno będzie ich bardzo mało (chyba, że sobie życzycie więcej). Nadal jest to w końcu devblog.

Pozdrawiam i dziękuję – SceNtriC

0 komentarze: