SnakeASCII, czyli kultowy "wąż" w specyficznej tekstowej formie

0

Od razu jeśli da się ustawić czcionkę, to pasowało by też rozmiar.
Domyślna czcionka konsolowa pokazuje tylko jeden rozmiar, w którym wysokość jest równa szerokości. Jest to 8x8, ale to jest za małe.
Była by możliwość ustawienia np. 16x16?

0

Zobaczę co da się zrobić, ale muszę znaleźć multiplatformowe rozwiązanie; Dlatego też wykorzystanie funkcji z bibliotek Windows odpada;

Póki co jedynie rastrowy font poprawnie wyświetla, a inne (np. Lucida Console) już krzaczy.

1
furious programming napisał(a):

Zobaczę co da się zrobić, ale muszę znaleźć multiplatformowe rozwiązanie; Dlatego też wykorzystanie funkcji z bibliotek Windows odpada.

Tu niestety nastąpił moment w którym musisz wydzielić kod, który nie będzie wieloplatformowy (taki kod jest obecny w każdej większej wieloplatformowej aplikacji).
Na każdej platformie będzie inaczej, być może nie zadziała to nawet na wszystkich Windowsach.

Proponuję $IFDEF Win32 -> http://wiki.lazarus.freepascal.org/Multiplatform_Programming_Guide

0

No tak, na pewno nie uda się napisać jednego kodu na kilka platform; Już teraz trzeba rozróżniać platformę, aby ustalić kodowanie znaków w konsoli (dla Windows) lub dołączyć menedżer łańcuchów (dla Uniksów);

Czytałem podany przez Ciebie artykuł, ale jeszcze sporo będę miał do przeczytania, aby program działał poprawnie na różnych platformach;


Edit: Czyli wychodzi na to, że kodowanie znaków było wcześniej poprawne, a problem wyświetlania kszaków zamiast znaków ramki to po prostu użyty w konsoli niestandardowy i nierastrowy font... :]

0

To jak z githubem? ;P

1

Heh, póki co SnakeASCII leży odłogiem... Ale to nie znaczy, że projekt umarł;

Póki co jest zrobione praktycznie wszystko, co pozwala na sterowanie wężem, łapanie złotka, obsługiwane są poziomy ładowane z plików TreeStructInfo, czas mierzony jest poprawnie i rysowane są różnego rodzaju teksty; Jednak to jeszcze mało - oprócz pojedynczej gry, w której liczone są złotka i czas, nic więcej się nie dzieje; Trzeba jeszcze trochę popracować, żeby gra była grywalna (ciekawe plansze i kilka trybów gry), dawała możliwość współzawodniczenia (rankingi) itd.; No i można zmienić nieco ładowanie planszy do pamięci, dzięki nowym metodom tokenizowania elementów - będzie prościej i bezpieczniej;

Aby w grę można było młucić co najmniej na różnych wersjach Windows - muszę zrobić własny font rastrowy i jakoś ustawić go w konsoli (trzeba się dowiedzieć jak to zrobić za pomocą WinAPI); Najważniejsza rzecz to przerobienie klasy TGame, tak aby zestaw tych samych metod pozwalał obsługiwać kilka trybów gry (przygoda, zbieranie złotka na czas, granie jak najdłużej itd.);

Gra ma już ponad 4kLoC, a mimo to jeszcze dużo do zrobienia; Wrzucę źródła na GitHub, jak tylko dorobię powyższe :]

3

Tak jak wspomniałem wyżej projekt nie umarł - dziś kolejna ciekawa aktualizacja :]

Wyżej wymienione zmiany nie zostały jeszcze wprowadzone, a niektórych wprowadzać póki co nie będę; Jednak wzamian za to, dodałem bardzo ciekwą funkcję, mianowicie przechodzenie przez "drzwi", w celu pojawienia się w innych drzwiach; Efekt wprowadzenia tej funkcji na zrzucie poniżej:

doors_in_action.png
czerwonym fontem zaznaczone są miejsca drzwi - to nie element interfejsu gry;

Możliwość "teleportowania" głowy węża do innych drzwi zaimplementowana jest tak, że wewnątrz ich można skręcić w bok i zabić węża; Same drzwi zrobione są w ten sposób, że mogą łączyć z dowolnymi innymi; Dzięki temu wchodząc w drzwi o (wirtualnym) numerze 1, możemy wyjść z tych z numerem 2, ale wchodząc w drzwi z numerem 2, możemy wyjść w innych niż z numerem 1; To daje możliwość dodawania do planszy nieparzystej ich ilości, byle większej niż 2 (wiadome - jedne nie mają gdzie przenieść); Drzwi może być wiele, a do tego jeśli każde będzie prowadzić do zupełnie innych - rozgrywka może być ciekawa;

To w sumie druga dość skomplikowana funkcja, jaką miałem przyjemność implementować (pierwsza to bramki w ciele węża, w miejscach, w których było złotko); Jeśli o tę funkcję chodzi, to w sumie tyle;

Natomiast pozbyłem się jednego - obsługi i rysowania trawników; Nie podobał mi się efekt, jaki uzyskać można z literek; Dlatego też wszystko z kępkami związane, zostało usunięte z kodu projektu;

Inna rzecz to ogólnie poprawiony kod w większości modułów, dzięki czemu z ponad 4kLoC zszedłem do niecałych 3kLoC; Oczywiście kod nadal jest okomentowany, także nowe instrukcje; Działa tak samo szybko jak wcześniej, więc jestem zadowolony;

Sterowanie pozostaje bez zmian:

klawisze strzałek | sterowanie wężem, krótki tryb turbo
Spacja | trwały tryb turbo
P | pauza
R | reset
Esc | wyjście z gry


Aktualne źródła projektu jak zwykle dodaję (póki co tylko) do załączników posta, tak samo jak wersję do grania, bez konieczności kompilowania projektu w Lazarusie (czy tam FPC); Kod nadal jest otwarty, więc zainteresowani mogą się częstować; Gdyby ktoś chciał zmienić np. szybkość węża - w katalogu levels\ znajduje się plik planszy o nazwie 0.tsinfo; Zawiera on drzewo TreeStructInfo, więc kto ogarnął ten format, to powinien znaleźć atrybut pod ścieżką Snake\Speed i zmienić literkę na którąś z przedziału od A (najwolniej) do E (najszybciej); Wielkość liter jest obowiązkowa; Wszystkie dostępne wartości dla atrybutów podane są w pliku levels\Readme.txt, więc można się pobawić;

Następne zmiany to już zapewne przeróbka klasy TGame, aby dać możliwość grania na różnych trybach, a co za tym idzie także klasę TPainter, aby coś więcej bazgrała po ekranie konsoli; Tak więc do następnej aktualizacji :]

PS: Gdyby komuś wyświetlało krzaki, to trzeba ustawić dla konsoli jakiś font rastrowy.

0 użytkowników online, w tym zalogowanych: 0, gości: 0