Co potrafi AGE?

Stworzyłem podstronę zawierającą informacje o ważniejszych umiejętnościach AGE: http://moriturius.wordpress.com/age/
Oczywiście nie jest to spis wszystkich rzeczy jakie tam wklepałem kiedyś pewnie wrzucę tutaj dokumentację i będzie można sobie pooglądać co tam natworzyłem jednak póki co musicie się zadowolić tym ;)

Jeśli macie jakieś uwagi czy może macie pomysł na to co jeszcze by się przydało to napiszcie ^^

Napisane w Bzdury. Bez komentarzy

Sztuka - Programowanie

Od kiedy napisałem mój pierwszy program minęło już trochę czasu (~8 lat), ale nigdy nie zapominam jaką radość sprawiło mi, kiedy zmusiłem komputer do posłusznej współpracy. Przez te wszystkie lata każdy kolejny program - nawet jeśli był najprostszy - sprawiał mi taką samą radość. Kiedy teraz o tym myślę zdaje mi się, że programowanie jest dla mnie bardziej sztuką niż narzędziem. Oczywiście moje podejście do tej sprawy wydawało mi się naturalne i nie sądziłem, że można do tego podchodzić bezdusznie i rzeczowo. Odkryłem jednak drugą stronę lustra… Na uniwersytecie. Tutaj wszyscy, których spotkałem traktują programowanie jako zwykłe narzędzie pomocne do wykonywania ich pracy. To smutne.

Odkąd poszedłem na studia, uświadomiłem sobie także, że jeśli programowanie to zapisanie algorytmu rozwiązującego problem 8 hetmanów w jakimś języku programowania to ja nie lubię programować. Ja lubie tworzyć kod. Pisanie go, tak aby wyglądał przejrzyście w pliku zródłowym, działał szybko i poprawnie - to jest to co na prawdę sprawia mi radość. Co ten kod będzie robił nie jest aż tak ważne - choć niewątpliwie nie jest bez znaczenia :) Dlatego nigdy nie brałem udziału w konkursach programistycznych bo jedyne co mają wspólnego z prawdziwym programowaniem to Język Programowania - cała reszta to w większości zwykła matematyka.

Wielu moich znajomych z roku, którzy pierwszy raz zetknęli się z programowaniem mają negatywne odczucia co do tego. Trudno się im dziwić jeśli sam wykładowca nie podchodzi do tematu zbyt entuzjastycznie. Rozumiem, że może nie wszystkim się to podobać, ale przecież jeśli zdali maturę z Matematyki to znaczy, że maja w mniejszym lub większym stopniu zdolności ścisłego myślenia, a tyle przecież wystarczy, żeby pojąć o co w tym całym programowaniu chodzi.

Wracając jednak do głównego tematu czyli programowania jako sztuki to jest tutaj - dla tak myślącego programisty - pewna straszliwa niedogodność. Wezmy najpierw takiego artystę malarza. To co stworzy, będą potrafili ocenić specjaliści oraz zwykli zjadacze chleba - spodoba im się albo i nie. Inny artysta. Aktor. Jego gra jest oceniana przez specjalistów oraz zwykłych widzów. Co ma jednak powiedzieć biedny artysta-programista? Może napisać coś co będzie działało super szybko do tego będzie łatwo rozszerzalne o nowe funkcje itd., ale tak długo jak wyniki działania będą wyświetlane w konsoli - nie uzyska on zbyt wielkiego uznania laików. Specjaliści oczywiście będą sie tym zachwycać i podziwiać, a inni tylko popatrzą i powiedzą “Ale Ci informatycy to są dziwni! Zachwycają się takim badziewiem.”. Tutaj jednak należy bardziej współczuć biednym matematykom bo, o ile programiści mogą stworzyć zapierający dech w piersiach efekt graficzny to matematycy rzędami kwantyfikatorów, liczb i znaczków własnej produkcji żadnego szału na widzu nie zrobią ;) To mnie trochę podbudowało :P

Nie lubię grać w nowe gry?

Ostatnio pomyślałem, o grach. Zastanowiłem się trochę nad tym w jakie gry lubię grać, a jakie przyciągnęły moją uwagę tylko na chwilę. Wnioski jakie wyciągnąłem są zawarte już w tytule. Nie wiem co robią twórcy nowych gier że aż tak bardzo mnie do nich zniechęcają. Być może są to proporcje cen do długości rozgrywki? Zakładając, że nie przeszedłem The Settlers 2 i The Settlers 6, gdybym miał do wyboru - kupić “dwójkę” za 19zł i rozgrywać jedną mapę ładnych parę godzin, a czasem nawet i dni, oraz kupić “szóstkę” za 40-60zł (strzelam bo nie wiem ile kosztuje) i przejść ją w 3 dni - oczywiście kupiłbym The Settlers 2.

Podobnie sprawy się mają jeśli chodzi o kontynuacje innych wielkich tytułów takich jak na przykład Heroes Of Might And Magic, który zrobił przecież ogromną karierę. HoM&M 3 było moim zdaniem najlepszą wersją i do dzisiaj gram sobie z bratem i siostrą czasami ^^. Później była HoM&M 4, która miała tylu zwolenników co wrogów. Przypuszczam, że zwolennikami byli Ci, który nie grali wcześniej w żadną inną wersję. Ja miałem ogromne trudności aby się przekonać do “czwórki” jednak wystarczyło spojrzeć na nią nie jak na Heroesów, a jak na zupełnie nową grę - wtedy była nawet fajna.

Jeśli chodzi o HoM&M 5, które pojawiło się z wielkim hukiem niczym sylwester - nie podchodzi mi. Grafika jest bardzo ładna, grywalne w miarę też to jest, kampania całkiem ciekawa… Ale coś mnie w tej grze denerwuje i nie jestem w stanie stwierdzić co… Dodatkowo kamera, która zawsze patrzy dokładnie w przeciwną stronę do tej w którą chcę jechać… A ja chciałbym po prostu pograć, zamiast oglądać ładne tekstury…

Ostatnio w modzie są również super wypasione graficznie gry MMORPG. Wiele z nich dostępnych jest w internecie nawet za darmo. Są cudowne - grafika dla oczu jest niczym miodek dla Kubusia Puchatka, ale to oczywiście tylko jeden z wielu klocków z jakich składa się gra. Pozostałe klocki są jednak trochę przygaszone, stare albo po prostu brzydkie. Dźwięki czasem są ładne i dopasowane czasem nie. Grywalność? W MMORPG jest to zależne w większości od graczy więc chytrze pominę ten temat nieuchronnie dążąc do najważniejszego - Fabuły.

Na tym klocku gry autorzy rzadko skupiają się na dłuższą chwilę. Większość zadań czekających na potencjalnego gracza jest bardzo ambitna: “Idź do X, przeklep potwory typu Y i pozbieraj z nich przedmioty Z w ilości Ź” (na szczęście żyjemy w Polsce więc nie zabrakło mi literek ;) ). Takie podejście do gry RPG jest [ while(true && !readerBored ) { ] bardzo [ } ] uproszczone. Jak można cokolwiek z takimi zadaniami w ogóle nazywać RPG? IMO typ MMORPG powinien się nazywać “MMO_KOX_POSTACI”. Jak takie ‘coś’ ma się do takich produkcji jak Baldur’s Gate czy Icewindale? Gdzie są zadania, w których trzeba było wysilić minimalnie czaszkę aby poskładać wszystko do tzw. kupy? Zadania, które pomimo tego, że trwały długo były ciekawe, w przeciwieństwie do zadań znanych z nowiutkich produkcji.

Ponarzekałem trochę, już mi lepiej. Najbardziej przerażające jest to, że wszyscy widzą jak jest i nikt nic z tym nie robi. Dlaczego? Bo na MMO_KOX_POSTACI można zarobić! Nikt nie przejmuje się zidiocaniem społeczeństwa.

Izometryczna zmora

Nie pisałem dość długo [pozdrowienia dla Xiona ;) ] ponieważ ostatnio zamiast tworzyć AGE postanowiłem go użyć. Może nie do stworzenia gry, ale chciałem stworzyć kawałek kodu obsługujący renderowanie mapy izometrycznej. Niewiele w tym, może udziału ma samo AGE, ale jest dość pomocne i całkiem wygodne (nie chwaląc się rzecz jasna :P).

Teraz już przejdę do sedna tego posta - izometrii. Mapę w pamięci opisałem jako tablicę obiektów CTileList wielkości size_x * size_y. CTileList to lista grafik leżąca na aktualnej pozycji ( nazwa bardzo średnio trafiona - później zmienię ;) ). Na samym dole jest zazwyczaj grafika podłoża (np. trawa, piasek, drewniana podłoga) natomiast na pozostałych w przyszłości będą wszelkie inne rzeczy jak roślinność, budynki czy co innego tam może jeszcze być.

Gdzie ta zmora?

Gdzie? Otóż w rysowaniu. W internecie jest dostępnych kilka artykułów na temat izometrii jednak żaden z tych, które znalazłem nie mówi o rysowaniu fragmentu mapy izometrycznej w sposób wydajny ładnie i przejrzysto. Dlatego od kilku dni w wolnych doświadczalnie pracuję nad różnymi sposobami rysowania tych rombów. Jak coś mądrego wymyślę to chętnie się podzielę ;)

Następny post - jak będę miał czas - napiszę o tych sposobach, które już odkryłem znalazłem albo zasłyszałem ;)

AGE ShowCode ^^

Do tej pory właściwie nie pokazałem ani kawałka kodu przykładowego użycia AGE, a przypuszczam, że byłaby to w jakimś sensie reklama ;) Dlatego też postanowiłem zademonstrować jak wygląda przykładowy kod służący do wczytania zasobów z dysku, stworzeniu sprite’a i wyświetleniu go na ekranie.

Mam nadzieję, że kod jest wystarczająco skomentowany, żeby nie było wątpliwości co robi dana część ^^

#include <age.hpp>

#pragma comment( lib, "age_d.lib" )

class ageMain : public ageTask
{
	ageSprite sprite;
public:
	// konstruktor ustawia nazwe zadania
	ageMain(): ageTask("main") {}

	void init()
	{
		// wczytanie tekstury wczesniej zaladowanej
		// przez loadResources("data/rest.txt")
		sprite.setTexture( age::getTexture("spriteTexture") );
		// ustawia hotspot obrazka na srodek
		sprite.setHotspot( HS_CENTER );
	}

	void exec()
	{
		// wyswietl sprite'a na pozycji [100,100] w kolorze zielonym
		// obroconego wokol Hotspotu o 2 radiany i powiekszonego 4 razy
		sprite.draw( ageVector( 100, 100 ), 0xFF00FF00, 2.0f, 4 );
	}
};

int main()
{
	if( age::init( AGE_INIT_VIDEO | AGE_LOG ) )
	{
		// zaladuj zasoby
		age::getResManager()->loadResources("data/res.txt");
		// dodaj nowe zadanie
		age::getTaskManager()->addTask( new ageMain );
		// wejdz do petli glownej
		age::mainLoop();
	}
	return 0;
}
Napisane w Bez Kategorii. Tagi: . Komentarzy: 5 »

Linux on board

Postanowiłem po raz kolejny zainstalować sobie linuxa. Oczywiście moją ulubioną dystrybucję: OpenSUSE. Postanowiłem napisać trochę kodu w Linuxie bo prawdę mówiąc robiłem tego na prawdę niewiele.

Sama instalacja przebiegła bezproblemowo (nie licząc błędu odczytu z CD bo był brudny ;) ). Po instalacji na sam początek postanowiłem zainstalować sterowniki do bezprzewodowej karty sieciowej w moim Acerze Aspire 5610Z. Nauczony doświadczeniem, że sterowniki MadWiFi są ZŁE i nie działały poprzednio więc nawet nie sprawdzałem czy nowa wersja wspiera już moją kartę. Od razu ściągnąłem ndiswrappera (służącego do instalacji Windowsowych sterowników do kart WiFi na Linuxie) oraz same sterowniki do karty.

Miałem pewne niedogodności związane np. z brakiem g++, którego zapomniałem zainstalować ;), ale w końcu udało mi sie zainstalować ndiswrappera oraz wrzucić do niego sterowniki. Potem załadowanie go do modprobe’a i gotowe ^^

Brzmi prosto jednak wszystko to zajęło mi pół dnia - łącznie ze ściąganiem kiklku programów (m.in Eclipse) oraz ich konfiguracją.

Tyle zachodu tylko po to aby napisać “Hello World”… ;)

Konsola z komendami

Stworzyłem póki co zaledwie kilka komend, które działają i robią to co powinny robić. Postanowiłem po prostu zrobić listę command handler’ów w konsoli i dodawać je za pomocą metody registerCommandHandler().

Poniżej screen z konsoli po wykonaniu kilku komend:

Interpretacja komend z konsoli

Zastanawiam się teraz na tym jak zorganizować interpretację komend. Myślałem nad zastosowaniem wzorca projektowego “Łańcuch Odpowiedzialności”. Wtedy wystarczyłoby tylko pododawać odpowiednie CommandHandler’y do konsoli i to cała filozofia :) Jak na razie jest to jedyny sensowny pomysł. Jeśli ktoś zna jakiś lepszy to proszę się pochwalić :P

Oczywiście nowo dodawane komendy musiałyby dostać się na początek łańcucha, co umożliwiłoby nadpisywanie komend domyślnych, które wprowadzę AGE (o ile jakieś wprowadzę :P).