Fairtris 2: The Ultimate Challenge

Fairtris 2: The Ultimate Challenge
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
8

screenshot-20240316213016.png

Release dla Windows 64-bitFairtris_2.0.0.20_release.zip

Repozytoriumhttps://github.com/furious-programming/Fairtris-2-UC
Fairtris 2: wikihttps://github.com/furious-programming/Fairtris-2-UC/wiki


Fairtris 2: The Ultimate Chllenge to kolejne odsłona gry Fairtris, tym razem już nie w formie narzędzia do testowania różnych mechanik i generatorów, a jako normalna gra wideo. Silnik pozostał ten sam, ale został unowocześniony, dodałem sporo usprawnień i poprawek (w tym łatek błędów), a także otrzymał nową szatę graficzną, zdecydowanie ładniejszą niż ta poprzednika — graficzny skok z NES do SNES.

Nowa wersja niemal całkowicie zrywa z kompatybilnością z NES-em, usunięte zostały niemal wszystkie ficzery, które istnieją w Nintendo Tetris®, a pozostały tylko te dające najlepszą responsywność sterowania oraz najwięcej zabawy. Fairtris 2 nie posiada ograniczenia co do długości rozgrywki, takiego jak wersja na NES-a — największa wspierana szybkość opadania klocków została nieco obniżona, aby dało się grać w nieskończoność. Dzięki temu możesz grać tak długo jak tylko potrafisz.

Zgodnie z nowymi osiągnięciami graczy klasycznej odsłony, dodałem wsparcie zglitchowanych palet kolorów dla stosu i klocków, które używane są na poziomach od 138 do 255. Ostatecznym wyzwaniem jest dojście do poziomu 255 i jego pobicie, które zostanie nagrodzone niespodzianką. Dojście do poziomu 256 zajmuje około półtorej godziny jest bardzo trudne, szczególnie przez bardzo nieprzyjazne zglitchowane kolory klocków na niektórych poziomach.

Mechanika sterowania została ujednolicona i wybrane zostały tylko najlepsze funkcje, a także dodana jest opcja ustawienia szybkości automatycznego przesuwania klocków, dostępna w ustawieniach gry. Nowy Fairtris w dalszym ciągu wspiera siedem różnych algorytmów losujących kolejne klocki, więc każdy może wybrać sobie taki, który mu się podoba i daje najlepszą zabawę.

Okno gry może działać w trybie desktopowym i być mniejsze od ekranu, może też działać w trybie desktopowego fullscreenu (na dowolnym ekranie) oraz w ekskluzywnym fullscreenie, dającym najlepszą wydajność (niestety tylko na głównym ekranie). Grę można obsługiwać z poziomu klawiatury i gamepadów, a także zmienić mapowanie klawiatury/gamepada, w ustawieniach gry.


Jeśli potrzebujesz dowiedzieć się więcej, zobacz readme oraz wiki projektu w GitHub. Znajdziesz tam opisy dotyczące poszczególnych ekranów gry, sterowania oraz jej zawartości.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
Spine
Link do repozytorium nie działa.
flowCRANE
Repozytorium niedawno zostało ustawione jako prywatne.
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6619
1

Pierwsze uruchomienie było bolesne - zniknął mi kursor myszki i okno z grą nie chciało się pokazać.
Musiałem menadżerem zadań wyłączyć aplikację.
Za drugim razem się uruchomiło normalnie na full screenie.


🕹️⌨️🖥️🖱️🎮
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Dziwne — nic złego nie powinno się dziać. Fullscreen, jeśli się odpala, to zawsze na głównym ekranie i zawsze w natywnej rozdzielczości. A co jeśli jeszcze raz rozpakujesz archiwum, np. do innego katalogu i odpalisz? Znowu pierwsze uruchomienie będzie wadliwe?


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6619
1

Problem się wtedy pojawia ponownie.

screenshot-20240316235717.png

Jak odpalę menu start i najadę na ikonkę Fairtrisa na pasku zadań to miniaturka okna mruga.
Ale klikanie na ikonkę nic nie daje, gra się nie pokaże.


🕹️⌨️🖥️🖱️🎮
edytowany 1x, ostatnio: Spine
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Prosiłbym o jeszcze jeden test — wypakuj grę, usuń plik settings.ini i odpal grę. Jeśli odpali się normalnie (obstawiam, że tak będzie) to będzie to oznaczało, że domyślne dane w pliku ustawień są popsute i powodują ten problem.

W sumie to w ogóle nie powinienem tego pliku dołączać do release'u, bo gra sama go tworzy, jeśli go nie ma i w takim przypadku skorzysta z ustawień domyślnych i z domyślnego mapowania (takiego samego jak w tym pliku konfiguracyjnym).


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6619
1

Na czysto wypakowane do folderu o innej nazwie.
Usunąłem settings.ini i odpala się tak samo zbugowane.
Ale za drugim razem odpala się normalnie.


🕹️⌨️🖥️🖱️🎮
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

To jeszcze jeden test…

Wypakować archiwum, otworzyć plik settings.ini, zmienić linijkę VIDEO=1 na VIDEO=0, czyli wyłączyć ekskluzywny tryb wideo. Okno gry powinno się pojawić na głównym ekranie, lewy górny róg w punkcie 0,0, jako małe okienko bez obramowania.

Spine napisał(a):

Ale za drugim razem odpala się normalnie.

Obstawiam, że plik konfiguracyjny przy drugim uruchomieniu ma inną zawartość niż podczas pierwszego uruchomienia. Dobrze by było wiedzieć które dane się zmieniają pomiędzy pierwszym a drugim uruchomieniem.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
abrakadaber
abrakadaber
  • Rejestracja:ponad 12 lat
  • Ostatnio:7 miesięcy
  • Postów:6610
1

U mnie działa OK, win 10 (aktualny)


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.
flowCRANE
Dzięki za feedback. U mnie też wszystko gra na aktualnym Win10.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Ogólnie gra wstaje w ten sposób, że tworzy okno o zerowym rozmiarze i niezdefiniowanej pozycji. Dzięki temu, funkcja SDL_CreateWindow nie pokazuje okna w ogóle (w końcu ma zerowy rozmiar), nic na ekranie nie miga. Potem przychodzi czas na odczyt danych z pliku konfiguracyjnego — w nim jest numer ekranu, współrzędne X i Y, enum z rozmiarem okna oraz flaga aktywacji ekskluzywnego trybu wideo. Jeśli nie ma konfiga, to dane są ustawiane na domyślne wartości. Wtedy też wołana jest metoda, która zajmuje się ustawieniem rozmiaru i pozycji okna, na podstawie danych z konfiga/domyślnych oraz odpalany jest ekskluzywny fullscreen (ten zawsze na głównym ekranie).

Tutaj za bardzo nie ma czego zepsuć, dlatego dziwi mnie twój przypadek @Spine, bo nigdy wcześniej się z czymś takim nie spotkałem. Ani w przypadku tej gierki, ani silnika do Kidsów. Może SDL z czymś nie potrafi sobie poradzić.


PS: a tak w ogóle to współrzędne okna z konfiga są ignorowane. Rozmiar okna jest ładnie ustawiany, ale okno zawsze jest centrowane na głównym ekranie. Podczas inicjalizacji okna, do ustawienia rozmiaru i pozycji okna używam metody przeznaczonej też do zmiany rozmiaru/pozycji okna (np. w ekranie opcji gry), a ona po zmianie rozmiaru, centruje okno na ekranie. Tak więc trzeba zrobić w sumie to samo, ale bez centrowania.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6619
1

No ja to odpalam na Win11.
Wysłałem Ci filmik na priv.


🕹️⌨️🖥️🖱️🎮
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:4 minuty
  • Postów:2066
1

u mnie działa, ale czas juz spac


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
1

@Spine: zauważ, że kiedy najedziesz mychą na przycisk aplikacji, to miniaturka jakoś dziwacznie miga i pokazuje 5fps, czyli coś ssie przepotężnie. Nie wiem dlaczego po chwili okno pojawia się jako małe (rozmiar 2x natywnego bufora), bo powinno być na pełen ekran (ekskluzywny fullscreen).

SDL nie umie u ciebie odpalić ekskluzywnego fullscreena, okno ustawiane jest na małe, zamiast na pełen ekran. Drugi odpał ładuje pewnie inne dane z konfiga, przez co gra nie próbuje już włączyć ekskluzywnego fullscreena i startuje normalnie.

Jeśli możesz, sprawdź co znajduje się w konfigu po pierwszym uruchomieniu i zamknięciu. Możesz wrzucić jego zawartość do posta tutaj — to w końcu żadna tajemnica. Dzięki temu mógłbym prześledzić przepływ sterowania podczas rozruchu i być może znaleźć coś ciekawego. 😉


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
1

Znalazłem błąd z zapamiętywaniem pozycji — w sumie bzdurka, poszło gładko.

https://github.com/furious-programming/Fairtris-2-UC/commit/9b91511cbdae80515ba1244d71a93cfe377b474e


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6619
1
furious programming napisał(a):

Jeśli możesz, sprawdź co znajduje się w konfigu po pierwszym uruchomieniu i zamknięciu. Możesz wrzucić jego zawartość do posta tutaj — to w końcu żadna tajemnica. Dzięki temu mógłbym prześledzić przepływ sterowania podczas rozruchu i być może znaleźć coś ciekawego. 😉

Zawartość taka sama jak przed uruchomieniem:

screenshot-20240317044124.png


🕹️⌨️🖥️🖱️🎮
KA
  • Rejestracja:prawie 21 lat
  • Ostatnio:5 dni
  • Postów:700
0

Ah gowniany windows zablokowal mi uruchamianie "nierozpoznanej" aplikaji :) Potem powalcze :)


Kto nigdy nie zrobił var dupa niech pierwszy rzuci kamień.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
1
Spine napisał(a):

Zawartość taka sama jak przed uruchomieniem:

Dzięki za sprawdzenie. W takim razie nie mam powodu myśleć, że kod gry jest temu winny. Gdyby był, to w przypadku błędu poleciałby wyjątek i pojawiłby się komunikat na ekranie (tym bardziej, jeśli SDL zwróciłby błąd). Jeśli pierwsze uruchomienie jest zepsute, a każde kolejne jest dobre, mimo braku zmian w pliku ustawień, to całkiem możliwe, że Windows coś kombinuje i przy pierwszym uruchomieniu nieznanego pliku po prostu go skanuje i blokuje mu fullscreen. W końcu w momencie bootowania coś mocno ogranicza wydajność procesu gry, stąd przez kilka sekund 5fps.

karpov napisał(a):

Ah gowniany windows zablokowal mi uruchamianie "nierozpoznanej" aplikaji :) Potem powalcze :)

Ale z czym chcesz walczyć? Dialog o nierozpoznanej aplikacji (bez podpisu cyfrowego) trzeba potwierdzić, klikając w odpowiedni link w tym okienku — system pozwoli normalnie uruchomić program. 😉


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
4

Przerobiłem kod gry na wieloplatformowy — niewiele przy tym roboty było. 😉

  • stronę pomocy (czyli wiki w GitHub) otwiera się teraz funkcją OpenURL zamiast ShellExecute,
  • kod obsługi progressbara na przycisku paska zadań jest wykluczony dyrektywami {$IFDEF WINDOWS},
  • klasa zegara, do pobierania częstotliwości i licznika ticków CPU używa funkcji z SDL-a,
  • dla innych platform niż Windows, ustawienia oraz najlepsze wyniki zapisywane są w katalogu preferencji użytkownika.

I to tyle — pół godziny roboty i kod niezależny od platformy.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
M4
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 miesiące
  • Postów:67
0

Pobrałem i zagrałem. Fajna, podoba mi się gra, szczególnie idea uniezależnienia od OS poprzez rozwiązanie licznika ticków. Btw, ponad dwadzieścia lat temu napisałem tetrisa na D5. Klocki były tworzone w oparciu o DrawGrid, sama definicja klocków była zapisana w zwykłym pliku tekstowym.


flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0
machinebyte4 napisał(a):

[…] szczególnie idea uniezależnienia od OS poprzez rozwiązanie licznika ticków.

To nie do końca tak. Framerate jest stały (60 lub 50fps), dlatego że jest klon gry z NES-a, główne mechaniki (system przesuwania i rotacji, aktualizacja stosu i liczników itd.) zostały z niego przeportowane i tak powstał pierwszy Fairtris. Ogólnie pisząc, pierwsza wersja była w praktyce portem gry na NES-a, ale trochę do niej dodałem — w tym ulepszyłem sterowanie i dodałem ciemny motyw jako drugi. Fairtris 2 bazuje na tym samym silniku.

Liczenie ticków jest obowiązkowe, aby utrzymać stały framerate, nie renderować klatek-duplikatów i ogólnie zużywać minimalną ilość czasu CPU. Użycie delty nie wchodzi w grę, interpolowanego renderowania też nie, bo to niczego nie da, a tylko zużycie zasobów wzrośnie. Nie można też uniezależnić framerate'u od odświeżania ekranu, bo będą widoczne skoki podczas grania na dużej szybkości opadania klocków. Screen tearing w ogóle nie jest widoczny w przypadku tej gry, więc najłatwiej było wyłączyć VSync i napisać taki zegar jaki jest. To daje timing zgodny z NES-em i wysoką responsywność, dzięki czemu hardkorowi gracze nie mają problemów z graniem.

Btw, ponad dwadzieścia lat temu napisałem tetrisa na D5. Klocki były tworzone w oparciu o DrawGrid, sama definicja klocków była zapisana w zwykłym pliku tekstowym.

Można i tak — u mnie akurat definicje klocków znajdują się w tablicy zaszytej w kodzie (siedem typów klocków, po cztery orientacje każdy). Jest to identyczna implementacja jak w przypadku Tetrisa na NES-a od Nintendo. Z tą różnicą, że mając takie dane w kodzie, nie ma problemu z utratą pliku z danymi klocków lub nieprawidłową jego zawartością.

Jeśli jesteś zainteresowany tym jak reprezentowane są klocki i jak działa ich system rotacji, to polecam artykuł Applying Artificial Intelligence to Nintendo Tetris — w nim znajdziesz masę informacji na temat tego, jak działał Tetris na NES-a i jak działa Fairtris.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
M4
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 miesiące
  • Postów:67
0

Framerate jest stały (60 lub 50fps), dlatego że jest klon gry z NES-a, główne mechaniki (system przesuwania i rotacji

Ach, ok, teraz rozumiem. Odnosiłem ten timing do mojego "sposobu" opartego na TTimer, ale ja w tamtych czasach (cos koło 2000 roku) nie miałem widełek klona NES-a opartego na SDL czyli OpenGL, tylko siermiężną grafikę a o SDL wtedy nawet nie słyszałem 😀


edytowany 1x, ostatnio: machinebyte4
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Ale nadal do precyzyjnego odmierzania czasu były dostępne funkcje QueryPerformanceFrequency i QueryPerformanceCounter. Zresztą Fairtris też ich używa (pod Windows), bo funkcje SDL_GetPerformanceFrequency i SDL_GetPerformanceCounter są wrapperami na wymienione funkcje z Win32 API.

Tyle tylko, że wcale nie ma obowiązku odmierzania czasu w ten sposób — w małych gierkach (i nie tylko) spokojnie można się ograniczyć do GetTickCount, czyli do milisekundowej precyzji. Taką właśnie zapewnia TTimer i do prostych zastosowań wystarczy.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
winuser
Z tego co pamiętam gettickcount miał rozrzut +/- 10ms co najmniej. Czy coś się w tym temacie zmieniło o rząd wielkości w dół? Testowane nascie lat temu jeszcze na windows xp oraz bodajże pentium 4
flowCRANE
Dobrze pamiętasz, choć niska precyzja była domyślna i tylko ze względu na oszczędzanie energii. Precyzję można było (i nadal można) zmienić, za pomocą funkcji timeBeginPerion i sfinalizować za pomocą timeEndPerion. Te funkcje umożliwają pobranie wartości minimalnej i maksymalnej, które można wykorzystać do zmiany częstotliwości pracy schedulera. Minimum to 1ms, maksimum raczej nie jest istotne.
flowCRANE
Używałem tuch funkcji w WinXP, teraz raczej nie są potrzebne, a nawet jeśli, to tym zajmuje się SDL.
winuser
Rzeczywiscie teraz sobie sprawdzilem i przypomnialem :D W ogole QueryPerformanceFrequency i reszta byly juz dostepne w Windows 2000 wiec naprawde szeroka kompatybilnosc.
flowCRANE
Na Unixach jest to lepiej zrobione, bo mają nanosleep z precyzją nanosekundową (w praktyce mikrosekundową). Nie trzeba cudować i spin locków robić, aby zamrozić wątek i zwolnić CPU np. na 2.5ms`.
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Jeszcze dwie rzeczy trzeba było zmienić, aby projekt dało się skompilować i uruchomić na innych platformach.

Natywny uchwyt okna (typu HWND) na innych platformach jest zbędny, więc trzeba go było otoczyć dyrektywami. On jest używany tylko na Windows i tylko do aktualizacji stanu progressbara przycisku na pasku zadań — ten progressbar pokazuje jaką część czasu klatki gra zużywa na jej wygenerowanie. Im krótszy pasek postępu, tym mniej czasu CPU gra wymaga do działania.

No i jak zwykle zapomniałem o zastąpieniu separatorów ścieżek na wieloplatformowe. Codebase pierwszego Fairtrisa był pisany z myślą o Windows, więc separatory były hardkodowane (znaki \) — zamieniłem je na stałą DirectorySeparator, która zawiera separator natywny dla danej platformy.

Pierwwze testy wykazały, że projekt się kompiluje, uruchamia się i działa poprawnie. Teraz tylko pasuje sprawdzić czy kluczowe funkcje również działają i to w sumie tyle, jeśli o portowanie chodzi — resztę ogarniają wieloplatformowe RTL, FCL, LCL i SDL.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Boski
  • Rejestracja:prawie 6 lat
  • Ostatnio:12 dni
  • Postów:131
0

Tak z ciekawości, builda rozsyłasz gdzieś po tetrisowych społecznościach? Zbierasz informacje typu ile osób pobrało/gra?

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
1
Boski napisał(a):

Tak z ciekawości, builda rozsyłasz gdzieś po tetrisowych społecznościach?

Założyłem wątek tutaj (oraz wpis na blogu) oraz na forum Lazarusa, gdzie przy okazji zajmujemy się przystosowaniem kodu źródłowego do innych platform. Dodatkowo, mam kontakt z ludźmi z polskiej sceny klasycznego Tetrisa, którym też dałem znać o istnieniu nowej wersji. Repozytorium jest publiczne i powoli łapie gwiazdki. Coś tam wspomniałem też na Discordzie SDL-a. Wieść się powoli rozniesie, ale nie chcę żeby mnie ktoś o spamowanie oskarżał, dlatego nie przesadzam.

Jakiś sensowny marketing nie jest tutaj potrzebny, bo to mały, poboczny projekt, robiony głównie dla zabawy i odpoczynku od mojego głównego projektu. Przy okazji mogę poćwiczyć kontakt z użytkownikami, łapanie feedbacku i wprowadzanie łatek i poprawek, a to bardzo cenne doświadczenie.

Zbierasz informacje typu ile osób pobrało/gra?

Ani ja, ani gra nie zbiera(m) takich informacji — to za mały projekt, aby się tym zajmować. Szkoda, że GitHub nie prowadzi statystyk pobierania release'ów (tak jak choćby SourceForge), bo nawet byłbym zainteresowany. Pierwszy Fairtris został też wydany w Snap Store i tam są proste statystyki pobrań — na dole strony jest kolorowa mapka, ale bez liczników (szkoda). No ale to Linuks, który na desktopach ma znikomą popularność (~4%), w stosunku do Windows (~72%) i macOS (~15%) (źródło).


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Opublikowałem nowy release — Fairtris 2.0.1

Obejmuje łatkę błędu związanego z zapamiętywaniem pozycji okna, od teraz używa OpenGL jako backendu, dorzuciłem też kilka mniejszych poprawek, przystosowując źródła do innych platform. Z punktu widzenia gameplay'u nic się nie zmieniło, wszystko jest wedle założeń. Zmieniłem też wersjonowanie — od teraz używam major.minor.patch, bez numeru buildu.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Dodałem jeszcze skrót Alt+Enter jako aktywacji i dezaktywacji ekskluzywnego trybu wideo.

Wywaliłem klasę TNavigation, po obsługiwała funkcje specjalne tylko w formie pojedynczych klawiszy. Żeby dodać wsparcie Alt+Enter czy jakichkolwiek innych wieloklawiszowych skrótów, trzeba by kombinować, ale prościej było po prostu wywalić tę klasę, a odwołania do jej właściwości zamienić na odwołania do klawiszy z Input.Keyboard.Device[Scancode], w której znajdują się aktualne stany wszystkich klawiszy. Tak więc trochę kodu odpadło, zrobiło się przejrzyście. W kolejnym release ww. skrót będzie już dostępny.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 1x, ostatnio: flowCRANE
Yarilo
  • Rejestracja:prawie 8 lat
  • Ostatnio:3 miesiące
  • Postów:50
0

A kiedy wersja mobilna?

Manna5
  • Rejestracja:prawie 6 lat
  • Ostatnio:dzień
  • Lokalizacja:Kraków
  • Postów:635
2

Czemu miałaby w ogóle być?


flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 minut
  • Lokalizacja:Tuchów
  • Postów:12152
0

Nigdy nie będzie wersji mobilnej — ta gra przeznaczona jest do grania kontrolerem (od biedy klawiaturą) i wymaga wysokiej precyzji inputów oraz bardzo dobrego timingu. Niektóre ruchy wykonuje się z precyzją co do kilku klatek, a niektóre do jednej klatki — powodzenia przy macaniu ekranu.

Prędzej dodam możliwość grania myszką, niż paluchami. 😉


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 3x, ostatnio: flowCRANE
Spine
  • Rejestracja:prawie 22 lata
  • Ostatnio:około 2 godziny
  • Postów:6619
0

@furious programming: ale do telefonu też można podpiąć kontroler/klawiaturę. Więc można wspierać Androida przynajmniej, żeby się dało grać kontrolerem/klawiaturą. Platformy mobilne to nie tylko ekran dotykowy :]


🕹️⌨️🖥️🖱️🎮
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)