Archiwum kategorii 'Download'

W produkcji: Klasyczny snake

Kto nie zna tej wciągającej gry, charakterystycznej dla telefonów nokii bez kolorowego wyświetlacza ? Postanawiając wykorzystać czas w którym jestem chory, rozpocząłem prace nad klonem tej gry, zresztą nie pierwszym. Małe FAQ:

  1. Dlaczego to pisze? Bo mam chwilowo ochotę napisać coś praktycznego w porównaniu zadaniami z archiwów OI.
  2. Jakie są założenia gry ? Założeniem gry jest posiadać wszystkie “fiuczery” jakie posiadał stary dobry Snake.
  3. W czym jest pisana gra ? W języku Vala, przy użyciu bibliotek GLib, Cairo, Gtk.
  4. Jaki jest status implementacji “fiuczerów” ? Snake potrafi się na dzień w którym to pisze poruszać się, jeść i rosnąć.  Pierwszy screenshot:zrzut_ekranu-snake
  5. Czy zostanie opublikowany kod źródłowy gry ? Tak, swojego kodu się nie wstydzę.

PS. To już 100 post na blogu…

Gra w życie – ciąg dalszy zabawy z interfacem

newinterfacePo przeczytaniu artykułu “Styling Buttons and Toolbars with the jQuery UI CSS Framework” postanowiłem wdrożyć zdobytą wiedzę w interface Gry w życie.

Kontrolki UI wyglądają teraz znacznie schludniej i są bardziej zintegrowane z oknami dialogowymi oraz siatką komórek. Kolejną zmianą jest wyeliminowanie okien “Narzędzia” i “Menu główne”  i zastąpienie ich menu “z prawdziwego zdarzenia” (za pomocy skryptu, podobnie jak powyższy artykuł, autorstwa filament group).

Inną niewielką zmianą jest licznik żywych komórek i automatyczna pauza gry w momencie wymarcia wszystkich komórek.

Gra w życie – update

Prosto z mostu: co nowego ?

Przede wszystkim obsługa 3 formatów plików służących do zapisywania układów komórek:

  • Plaintext w którym komórki reprezentowane są za pomocą znaku kropki (nieżywa komórka) i znaku O (duże O jak Ola) do reprezentowania żywych komórek, przykładowo Glider wygląda w nim tak:

    .O.
    ..O
    OOO

  • Life w wersji 1.05 i 1.06 w którym stan jest reprezentowany, w zależności od wersji, jako lista pojedynczych bloków i ich współrzędnych lub jako lista współrzędnych żywych komórek. Format obsługiwany tylko w trybie “do odczytu”.
  • Run Length Encoded, w skrócie rle, najbardziej skompresowany format, ale chyba najpopularniejszy obok Plaintext. Glider w tym formacie wygląda tak:

    x = 3, y = 3
    bo$2bo$3o!

Pozatym:

  • Po rozpoczęciu ewolucji układu, zapisywany jest stan początkowy układu w ciasteczkach przeglądarki. Gra po ponownym uruchomieniu proponuje przywrócenie ostatniego układu początkowego.
  • Narzędzie do wyśrodkowywania wzoru.
  • Kilka zmian w interfacesie: zintegrowana pausa z przyciskiem start, pasek narzędziowy może zostać przeniesiony w dowolne miejsce na ekranie, a także po rozpoczęciu ewolucji znika gdy nie jest potrzebny.

Jeśli ktoś ma uwagi, propozycje lub znalazł błąd w grze proszę o kontakt :)

playlife

Gra w życie

Ostatnio miałem ochotę napisać sobie prostą grę, więc napisałem “Grę w życie”.  Co się ukrywa pod tym tytułem ?

Gra w życie to bez wątpienia najpopularniejszy przykład automatu komórkowego.  Zabawa najprościej mówiąc polega na odkrywaniu nowych form życia w świecie gry. Zadaniem gracza jest tylko ustawienie początkowego układu żywych komórek i … oglądanie jak ewoluują z czasem. Oryginalne zasady mutacji układu wymyślił John Conway w 1970 roku, a brzmią one następująco:

  • komórka pozostaje przy życiu jeśli ma 2 lub 3 żywych sąsiadów, w przeciwnym wypadku umiera albo z samotności albo z przeludnienia
  • komórka rodzi się gdy ma 3 żywych sąsiadów

Zapewniam że mimo tak prostych reguł, braku efektów dźwiękowych i mizernej oprawie graficznej, gra potrafi wciągnąć. Dowodem na to są pojawiające się od początku istnienia gry odkrycia w postaci nowych oscylatorów (czyli układy zmieniające się okresowo), statków (oscylatorów które się poruszają w jakimś kierunku) czy też dział (oscylatorów “produkujących” statki). Wymienione rodzaje form życia są najczęściej celem gracza.

Dwie ciekawostki związane z grą:

  1. Jedna z układów Gry w życie, będącym najprostszym do tej pory odkrytym statkiem, Glider, jest emblematem społeczności hakerskiej.
  2. W roku 2000 Paul Rendell skonstruował układ komórek będący Maszyną Turniga, czyli modelem komputera, który może wykonać dowolny algorytm czy symulować inny komputer!

Od strony technicznej gra została napisana w JavaScripcie z pomocą jQuery, więc wymagana do niej jest tylko dobra przeglądarka. Źródła gry oczywiście są dostępne publicznie, patrz zakładka “O grze”. W grę można zagrać w tym miejscu.

Ana: Kod źródłowy

Słowo się rzekło, oto w ręce ludu oddaje kod źródłowy pierwszego stworzonego przeze mnie języka programowania, noszącego imię Ana.

Do kompilacji wymagane są pakiety flex i bisonc++ (nie mylić z bison++).  Kompilujemy przechodząc w terminalu do katalogu z wypakowanym kodem, po czym wykonujemy polecenie make. Wszelkie uwagi, opinie bardzo mile widziane.

Własny język programowania…

Ostatnio większość wolnego czasu spędzam na tworzeniu własnego języka programowania, ucząc się tej sztuki poprzez praktykę. Teorie czerpie z ostatnio zakupionej książki, wykładów na MIMUW oraz innych części sieci.

Założeniem co do funkcjonalności języka jest obliczanie wyrażeń, w skład których wchodzą operatory arytmetyczne, logiczne, relacyjne itp. oraz   deklaracja zmiennych, instrukcja skoku bezwarunkowego i warunkowego, instrukcja w stylu echo (czy printf, writeln lub podobnej służącej do napisania “Hello World”). Składnia w stylu C.

Niby założenia nie wygórowane: minimalny zestaw instrukcji potrzebny do napisania czegoś bardziej zaawansowanego niż kalkulator na bazie Odwrotnej Notacji Polskiej, ale nie od razu Rzym zbudowano, od czegoś trzeba zacząć.

Po wielu godzinach rozmyślań (głównie w czasie zajęć dydaktycznych w mojej szkole),  wielu zapełnionych kartkach mojego hińskiego notesu (to nie błąd ortograficzny! Notes został tak podpisany przez mojego kolegę z ławki i taka nazwa się przyjęła) i wielu godzinach przy czytaniu i kodzeniu…   UDAŁO SIĘ! Wszystkie przedstawione powyżej założenia języka udało mi się zrealizować.

Język jest interpretowany przez niewielką, pod względem ilości rozpoznawanych instrukcji w porównaniu do przeciętnego procesora, maszynę stosową. Całość została napisana w C++ z użyciem narzędzi Flex++ oraz Bisonc++ (kolejno do wygenerowania leksera i parsera).

Długo szukałem pomysłu na nazwanie języka, lecz doszedłem do wniosku że najwłaściwszą nazwą dla niego będzie “Ana“. Na cześć i chwałe koleżanki z mojej klasy, Ani, która dzielnie słuchała o napotkanych problemach i postępach w pracach.  Dla wyjaśnienia, brak jednego “n”  przypadkowy też nie jest:  to konstrukcje używane powszechnie w innych językach (pętle, funkcje, insturukcja złożona itp).

Kod źródłowy, gdy tylko zostanie uporządkowany, opublikuje w tym miejscu :)

PS. “Hello World” w Anie:

{
echo “Hello World\n”;
}

Gedit FullScreen mode

Napisałem sobie dziś w celach edukacyjnych prosty plugin do Gedita (domyślnego edytora tekstu w środowisku Gnome) przełączyć okno edytora w tryb pełnoekranowy.  W tym celu posłużyłem się już od dawna testowanym przeze mnie językiem Vala (od wersji ok. 0.4.0 kompilatora, obecnie najnowsza  wersja to 0.7.1), o którym być może napisze parę zdań następnym razem ;)

API udostępnionego przez Gedita uczłem się czytając jego źródło, dokumntacje, analizując kod innego plugina i czytając “C plugin howto“. Jeśli interesuje Cię plugin, to udostępniam paczke z jego skompilowaną wersją, źródłem plugina w języku Vala ( jak i jego wersje  skompilowaną do C). Aby zainstalować plugin wystarczy wydać polecenie

make install

Instalacja nie wymaga praw administratora, ponieważ pliki są libfullscreen.so i fullscreen.gedit-plugin kopiowane są do katalogu ~/.gnome2/gedit/plugins/ . Do własnoręcznej kompilacji wymagana jest w miare najnowsza wersja kompilatora Vali, plik z api Gedita dla języka Vala oraz pakiet gedit-dev (powinien być dostępny w twoim repozytorium).

GGArchivesView v0.1

ggarchivesview_screenProgram służący do przeglądania zawartości plików archives.dat czyli plików będących archiwum wiadomości oficjalnego klienta protokołu Gadu-Gadu dla Linuksa i podobnych. Napisany w przeciągu 3 dni, w C++ przy użyciu owoców wiedzy Andrzeja Szombierskiego w postaci napisanej przez niego klasy do obsługi tego formatu (opublikowanej na licencji GPL) oraz gtkmm do budowy interfacu. Program testowany na archiwum z wersji 6 klienta Gadu-Gadu, na Ubuntu 8.04.

Instalacja:

  • Wypakowujemy i przechodzimy do katalogu z źródłem
  • ./autogen.sh
  • ./configure
  • make
  • sudo make install
  • Odpalamy: ggarchivesview

Pobierz źródła GGArchivesView v0.1

smediator.pl

Dzisiaj po południu udało mi się wdrożyć 3 edycje strony smediator.pl. Strona ta jest głównie wizytówką/mini portalem programu w którym miałem przyjemność uczestniczyć (o czym zresztą pisałem), a minowicie “Jestem mediatorem”.

Trzecią edycje pisałem w 99% wg. mojego projektu. Za swój sukces mogę uznać to że udało mi się ją napisać bez użerania się z niebieskim złem “e”, oraz to że niemalże za pierwszym razem przeszła, z sukcesem, przez walidator W3C (zarówno XHTML jaki i CSS).

Technologie itp wykorzystane w projekcie: XHTML 1.0 Strict, CSS 2.1. Od strony graficznej Inkscape oraz GIMP.

Update: Niestety strona została jakiś czas temu zdjęta z serwera :(

W drodze do własnego kompilatora: Mój pierwszy analizator składniowy

Edukacje w kierunku “Teoria języków formalnych” rozpocząłem już w wakacje, po trochu nie spiesząc się, z wymuszoną dłuższą przerwą. Główne źródła informacji to wykłady z przedmiotu “Podstawy kompilatorów” oraz książka “Kompilatory – metody, reguły i narzędzia” czy jakoś tak.

Pochwalić się muszę że do tej pory nauczyłem się pisać analizatory leksykalne (wyrażenia regularne, budowanie, generowanie za pomocą leksa) i analizatory składniowe metodą zejść rekurencyjnych. Jak na razie najbardziej praktycznym przykładem jaki udało  mi się zrealizować jest analizator składniowy wyrażeń arytmetycznych składających się z liczb (zarówno całkowitych jak i wymiernych), operatorów dwuargumentowych i nawiasów (Jeśli ktoś chce kod, to pisać na namiary w panelu obok). Myślę że to dobra droga do stworzenie własnego języka programowania i rzeczy z nim związanych.

Ponadto muszę się przyznać że ta dziedzina informatyki szczególnie przypadła mi do gustu.

Następna strona »