piątek, 29 kwietnia 2011

Boulder Dash - ciąg dalszy

Trochę się ociągałem z kolejnym etapem (brak czasu, a mówiąc dokładniej: Might and Magic 4, Borderlands, Savage Worlds), ale parę rzeczy udało mi się dodać.

Przede wszystkim - ruch "przeciwników". Było z tym więcej roboty, niż z kamieniami, choć wcześniej zdawało mi się, że będzie na odwrót. Przeciwnicy mogą być prawo- lub leworęczni (gdy napotkają ścianę, idą przy niej trzymając jej prawą lub lewą ręką). Jeszcze nie mogą zabić gracza, ani zginąć od kamienia, ale reagują na elementy otoczenia. Przeciwnicy są obiektami, zastanawiałem się, czy kamieni nie zrobić tak samo, ale nie widzę korzyści, które usprawiedliwiałyby poświęcanie na to dodatkowego czasu. I tak taki obiekt nie będzie zawierał wiele więcej ponad informację, że jest kamieniem, fizyka będzie wyglądać tak samo, a że powinna odbywać się "z dołu do góry" (przynajmniej na razie nie widzę innych możliwości), to będą musiały siedzieć w mapie zamiast znaków. Zobaczymy.

Kolejna zmiana to grafika. Wywaliłem te nieszczęsne procedury rysujące i zastąpiłem je obrazkami z pliku PNG. Na razie są niezbyt urodziwe (5 minut w GIMPie), ale mogą wypięknieć (w przypadku procedur byłoby to bolesne). Dałem też możliwość zmiany rozmiaru okna i parę skomplikowanych rachunków, które upewniają się, że zawsze widać tę część planszy, którą trzeba (jestem z tego szczególnie zadowolony - no a przynajmniej z tego jak to działa, bo co do wykonania, to żałuję że nie wpadłem na jakieś bardziej eleganckie rozwiązanie).

Doszła też interakcja gracza z kamieniami i klejnotami - zatrzymują mu się na głowie, kamienie może przesuwać (tylko w poziomie), a klejnoty zbierać. Ale jeszcze nie może zginąć. ;)

W związku z dodanymi elementami otoczenia, pojawiło się parę nowych literek w pliku mapy:
  • '$' to klejnot do zebrania
  • '@' to początkowa pozycja gracza
  • 'n', 'e', 's', 'w' - to przeciwnicy. Litera oznacza początkowy kierunek ruchu. Duży znak to stwor praworęczny, mały - leworęczny. Potwory w grze są reprezentowani przez te paskudne strzałki, aby było widać który gdzie jest zwrócony i której ściany się trzyma - ale pewnie zastąpię te wszystkie warianty jedną ikoną, tak samo jak u bohatera.
Do zrobienia: najważniejsze, co przychodzi mi do głowy, to punkty (za klejnoty), wyjście (czyli możliwość skończenia poziomu) no i oczywiście: "życia" (a zatem i możliwość zgonu). To chyba uczyni tę grę umiarkowanie grywalną, reszta to będą ozdobniki.

Zaobserwowane błędy: pod Windows 7 próba powiększenia okienka wywala aplikację (pod Windows XP i Ubuntu jest ok) - może to jakiś problem tej wersji Pygame, z której korzystam? Powalczę z tym później.



środa, 27 kwietnia 2011

Boulder Dash

Zamiast rozwijać roguelika, zabrałem się za klasycznego Boulder Dasha. Opierając się na tym skrawku, który powstał na potrzeby rogala, dodałem wczytywanie mapy z pliku tekstowego ("#" to ściana, "=" to ziemia do zjadania, "O" (a także "o" oraz "0") to kamień), zaimplementowałem zjadanie ziemi, jakąś prostą fizykę kamieni i już coś się dzieje. Starałem się, aby kamienie spadały tak, jak to działało w oryginale (czyli tak). Nie ma interakcji ludka z kamieniami - ani ich nie przesuwa, ani nie blokuje, ani od nich nie ginie.

Nie ma też animacji ani płynnego ruchu i zastanawiam się, czy warto w to się bawić, czy pierwszą wersję wypuścić z "ruchem skokowym". Nie ma przewijania, a więc mapa nie może być większa niż jest (bo nie zmieści się w oknie).

Jeszcze nie do końca jestem zadowolony z fizyki, bo gdy zrobimy ścianę z kamieni, najpierw wysuwają się te spod spodu, zamiast lecieć te z góry.

Do zrobienia: wywalić wreszcie to proceduralne rysowanie i dać jakieś kafle. I mapę rozwiązać inaczej, niż tablicę napisów (niby fajne, ale za dużo dłubaniny w wymianie znaków) - pewnie kamienie, etc. staną się obiektami, ale jakieś flagi do mapy (typu: zajęty, zarezerwowany) trzeba będzie zachować, żeby fizyka działała jak należy. No a potem reszta ficzerów, których można się spodziewać po boulderze.

Klawiszologia: strzałki to wiadomo, a poza tym:
R - resetuje mapę (znaczy - wczytuje ją jeszcze raz z pliku)
S - zatrzymuje fizykę, można ją wówczas uruchamiać spacją "krok po kroku" - dobre do obserwacji czy wszystko leci gdzie powinno
Q - wyjście z programu

źródła: https://rapidshare.com/files/459356388/Boulder_01_src.zip
exe: https://rapidshare.com/files/459353979/Boulder_01.zip
(w zipach siedzi "domyślna" mapa, którą można edytować)

wtorek, 26 kwietnia 2011

Rogalik - start

Ok, czas na rogala, czyli to, dla czego powstał ten blog.

Co jest: bardzo mało - chodzenie i... nic ponadto. Labirynt na stałe zaszyty w kodzie. Ale jest szkic, z którego można startować.

Do zrobienia: he, he, he - wszystko. Przede wszystkim: losowe podziemia, AI, walka, itemy, levelowanie. Z rzeczy ważnych: walka dystansowa.

Z ciekawostek: rysowanie obiektów jest proceduralne, ma to swój urok, ale docelowo będzie zastąpione przez normalne kafle z png. Bowiem (póki co) zamiar jest taki, aby Rogal był tilesowy. Ale - kto wie, kto wie - może nastąpi powrót do ASCII.

Źródła: http://sites.google.com/site/gramowanie/rogal.0.0.1.0.py
Exe: http://rapidshare.com/files/459169421/Rogal_0.0.1.0.zip
Screenshot:

Tetris

I - póki motywacja nie zgasła - moje najświeższe dokonanie: Tetris. Kod dużo ładniejszy i mądrzejszy, choć parę rzeczy pewnie dałoby się zrobić lepiej. To co mnie cieszy - zaledwie 150 linijek.

Braki: nie ma licznika punktów (co czyni grę mało grywalną), ani rosnącego stopnia trudności. Rzeczy typu ekran tytułowy, lista rekordów czy podgląd kolejnego klocka, to też byłby pewnie miłe dodatki.

Atuty: kolorowe klocki. :)

Uwagi: dużo czasu zmarnowałem na (nieudolne!) próby napisania procedury do obracania klocków. W końcu poprzestałem na zdefiniowaniu dla każdego klocka jego "obróconych" wersji.

Sterowanie: klawisze strzałek (lewo i prawo to przesuwanie, dół to przyśpieszenie spadania, góra - obrót klocka).

Źródła: https://rapidshare.com/files/459033724/gra_tetris.py
Exe: https://rapidshare.com/files/459069984/Tetriiis.zip
I obrazek:

Strzelanka

I oto - jako wpis inauguracyjny - prościuteńka strzelanka, jaka powstała kilka dni temu w trakcie nauki Pythona. Stworzona bez jakiegoś głębszego przemyślenia, czy konkretnego projektu. Kod jest raczej chaotyczny i przypadkowy. Powstawała na zasadzie "o, to tak można poruszać obiektem w pygame?" i "no to teraz spróbujmy dodać strzelanie". Nie było konceptu ani planowania. Gdybym robił to teraz, NA PEWNO zrobiłbym to inaczej. Ale działa, da się grać i, niech mnie szlag, to JEST grywalne (mój rekord to 6800).

Pojazdem sterujemy klawiszami strzałek lewo-prawo, strzelamy spacją. Reszty można się domyśleć.

Źródła: http://rapidshare.com/files/457507454/gra02.py
Exe: http://rapidshare.com/files/457467717/gra.zip
I obrazek:

poniedziałek, 25 kwietnia 2011

Próba mikrofonu

Zgodnie z tym, co w tytule - ma być to blog o graniu i programowaniu. Przeważnie o programowaniu gier (raczej hobbystycznym i amatorskim). Choć może też się zdarzyć trochę programowania bez grania, tudzież grania bez programowania. Naszło mnie bowiem niedawno, aby nauczyć się Pythona, a jakiż jest lepszy sposób nauczenia się czegokolwiek, jeśli nie przez grę?

Po przejrzeniu paru tutoriali, połowy jakiejś książki i wklepaniu kilku wprawek, postanowiłem pisać na blogu o tym, co z tego mojego programowania wyjdzie. Głównie po to, aby motywować się do dalszej pracy i mieć dziennik postępów.

W tej chwili punktem docelowym jest stworzenie rogalika, ale odstępstwa na pewno będą. Narzędzia: Python (w tej chwili w wersji 2.6.6, bo takiego mam w Ubuntu) i Pygame (w wersji 1.9.1).