Najnowsze wpisy


BASIC C - język programowania, biblioteka...
Autor: robosy
Tagi: basic   c   c++   programowanie  
20 grudnia 2022, 14:13

 Język programowania BasicC jest w zasadzie nakładka na C umożliwiającą stosowanie składni języka Basic i dająca dodatkowe mozliwości, dzięki czemu programowanie staje sie prostsze.

  Obsługuje bibliotekę SDL, czyli akcelerowana grafika, obsługa zdarzeń, urządzeń wejścia-wyjścia. Możliwość kompilacji dla różnych systemów, w tym Android.

  BasicGEM - prosty graficzny interfejs użytkownika, częściowo wzorowany na GEM z Atari ST. Udostępnia podstawowe elementy: wybierak plików, okno komunikatu, pola wprowadzania tekstu, przyciski, obsługa menu. Demonstracją jego możliwości jest program graficzny NIKIFOR 2 i oparte na nim demo NIKIFOR ATARI KAWAI dostępne na moich stronach, a ich prezentacja na Youtube.

  BasicSND - malutki, ale o niespotykanych możliwościach, system dźwiękowy, wzorowany na GFA Basic z Atari ST i wzbogacony o dodatkowe możliwości. Oprócz podstawowego, wielokanałowego miksera dźwięków samplowanych, posiada generator dźwięków syntezowanych z możliwością kształtowania obwiedni oraz prosty sekwencer. Demonstracyjny program grający losową melodię z użyciem syntetycznych dźwięków jest dołączony do BasicC, a jego prezentację można obejrzeć na Youtube (BasicC sound demo).

  Instrukcja Basic C:
https://pl.wikibooks.org/wiki/BasicC

Strona, na której można pobrać Basic C i inne moje programy:

https://robosy.itch.io/

ROKART – wyścigi samochodzików elektrycznych...
Autor: robosy | Kategorie: komputery 
Tagi: grand prix   retro gry  
10 listopada 2021, 20:28

 Jest to realizacja gry, która miała powstać 30 lat temu na Atari, komputerowa wersja popularnej zabawy w ściganie elektrycznymi autkami. Sterowanie polega tylko na dodawaniu i odejmowaniu gazu klawiszem prawy Ctrl (lub lewy dla drugiego gracza).

 

LinkI do pobrania wersji Windows i Linux:

https://robosy.itch.io/rokart

https://drive.google.com/file/d/1A_a8QxFnzYemhIc4eWz-Wt636yQlx6oY/view?usp=sharing

Proszę o wpłaty w dowolnej wysokości na moje konto. Wpłacający min. 20 zł może otrzymać dostęp do dodatkowych funkcji, takich jak: drugi gracz, przełączanie widoków, wybór ilości okrążeń, szczegółową instrukcję, wersję dla Androida, być może z dodatkowymi torami.

ROKART 2:

Dodane zostały 2 etapy / tory. Są to właściwie oddzielne gry, w każdym jest inna fizyka, inne zasady kolizji i.t.d. 2. etap odbywa się na torze nr 7 z gry Super Sprint wydanej przez Atari. 3. etap to tor 14 z gry Grand Prix Simulator w wersji na Amstrada (choć rozdzielczość i ilość kolorów nie pasuje mi do Amstrada), ten etap, wg mnie, bardziej przypomina wyscig motorówek, auta wpadają w większe poślizgi. Sterowanie jest inne niż w pierwszym etapie, tym razem tylko skręcamy bez sterowania gazem.

Dzięki tej grze można poznać stare klasyki w nowym, znacznie odmienionym, wydaniu.

Prezentacja:

https://youtu.be/66-sh3oAJNw

A tu przykładowy wyścig w nowszej wersji:

https://youtu.be/zMr0aYt6xeg

W planach jest stworzenie kolejnych etapów, np. Tor Poznań.

PONGY – nowa wersja gier Pengo i Tank
Autor: robosy | Kategorie: komputery 
Tagi: pengo   retro gry  
10 listopada 2021, 20:26

Są to właściwie 2 gry.

Pierwsza jest unowocześnioną wersją gry Pengo występującą na różnych komputerach pod różnymi nazwami m. in. Pengy na Atari, Freez’bees na ZX Spectrum i właśnie Pongy na ZX-81. Celem gry jest zabijanie „glutów” poprzez spychanie na nie bloków lodowych. Dodatkowo, by przejść do kolejnego etapu, należy ułożyć 3 „diamenty” w rzędzie obok siebie. Sterowanie strzałkami lub klawiszami Q A O P.

Prezentacja:

https://youtu.be/m03zlLkAIhk

 

Druga jest wersją tej gry, w której pingwinem sterujemy tylko 1 klawiszem – prawy Ctrl. Dodatkowo, wzorem klasycznych gier typu Tank Combat, dodany został pływający czołg, z którym nasz pingwin toczy pojedynki. Wystrzał następuje w momencie zmiany kierunku pingwina. Na raz można użyć tylko jednej torpedy. Prawdopodobnie będzie możliwość pojedynku 2 graczy.

Prezentacja:

https://youtu.be/C_N7_EJo0Ds

 

Proszę o wpłaty w dowolnej wysokości na moje konto. Wpłacając min. 20 zł można otrzymać wszystkie wersje gry, na system Windows, Linux, Android.

Linki do pobrania Tanker Pongy dla Windows:

https://robosy.itch.io/tanker-pongy

https://drive.google.com/file/d/1s0kPRGHKX_tWvOD17W2RNySqnCmeZzhS/view?usp=sharing

PROGRAMOWANIE GIER – fizyka, równania...
Autor: robosy | Kategorie: komputery 
10 listopada 2021, 20:25

  Chcąc by gra działała prawidłowo na różnych komputerach programista musi brać pod uwagę m. in. różnicę w szybkości działania nie tylko samych komputerów, ale też np. różne częstotliwości odświeżania ekranów zależne od monitora oraz wybranego trybu graficznego.
  Kwestię kontroli szybkości działania programu omawiałem w ostatnim odcinku kursu programowania gier na przykładzie gry ZX-Rajd, zwłaszcza w opisie filmu. W tym artykule wyjaśnię w jaki sposób można sprawdzić szybkość działania gry i jak dostosować ją do danego komputera w oparciu o doświadczenia w pisaniu gier Holka i Ping-Pong w języku RC-Basic.
  Pierwszą metoda jest wykorzystanie funkcji synchronizacji z odświeżaniem ekranu, w RC Basic jest to komenda Update. Poniżej fragment kodu, który umieszczamy po tej komendzie w głównej pętli gry:

klatki=klatki+1
If hz>60 and Timer-cz < 1200/60 and klatki >= Round(60/(hz-60)) then
  klatki=0
  update
end if
cz=Timer

Powoduje to ograniczenie szybkości gry do 60 klatek na sekundę poprzez wywoływanie dodatkowych komend Update, które powodują wstrzymanie działania programu do momentu otrzymania kolejnego sygnału synchronizacji pionowej ekranu. Hz to częstotliwość odświeżania ekranu, w RC Basic można ją odczytać stosując komendę GetDesktopDisplayMode. Nawet jeśli jest wyższa niż 60 (i <= 120), gra będzie działać z prędkością około 60 klatek / s (lub hz / 2, jeśli hz> 120).
W Holce zastosowałem trochę zmodyfikowana wersję:

If hz>60 and Timer-cz < 20 and klatki mod (Round(60/(hz-60))+1) = 0 then
      Update
End If
cz=Timer

„klatki” oznaczają zmierzoną ilość klatek na sekundę. Można to wyznaczyć np. tak:

If Timer – czas >1000 then
      czas=Timer
      klatki=0
End If
klatki=klatki+1

Można też wykorzystać funkcję podającą ilość klatek, w RC Basic jest to funkcja FPS, ale w moim przypadku nie podawała dokładnej wartości. Nie udało mi się dowiedzieć w jaki sposób ta funkcja działa.
  Innym sposobem kontroli szybkości jest wykorzystanie współczynnika, przez który mnożymy szybkość w naszych obliczeniach ruchu. Parametr ten jest standardowo stosowany w symulacjach ruchu ciała, na które działają siły, np. grawitacji, zwykle oznaczany przez dt. Oznacza on krok czasu o jaki „przeskakujemy” w każdym kroku programu (pętli), im mniejsza wartość tym symulacja jest dokładniejsza, ale wolniejsza. Podstawowe równania ruchu stosujące metodę Eulera wyglądają tak:
s=s+v*dtv=v+a*dt
Są one zgodne z wzorami znanymi z fizyki, gdzie: s – droga, v – prędkość, a – przyspieszenie. Równania te można rozbić na składowe odpowiadające współrzędnym wektora prędkości i przesunięcia. Metodę tę stosowałem w opisywanych wcześniej programach Orbity i Symulator Jazdy. W grze Ping-Pong równania opisujące ruch piłki wyglądają tak (dwa wymiary):

xp=xp+vpx*dt    ‚ zmiana położenia w poziomie w zależności od prędkości*krok czasu
yp=yp+vpy*dt    ‚ zmiana położenia w pionie
vpy=vpy+9.5*dt-vpy*dt/15+ob*vpx/15*dt ‚ +grawitacja-opór+podkręcenie
vpx=vpx-vpx*dt/15 ‚ opór powietrza

W grze parametry możemy dobrać intuicyjnie, eksperymentalnie. 9.5 to przyspieszenie grawitacji, które w tym modelu działa tylko w pionie, w rzeczywistości wynosi ok. 9.81 m/s^2, obniżyłem je, by zniwelować niedokładności wynikające z dość dużego kroku czasu. Krok czasu wynosi 10/60, gdzie 60 to częstotliwość odświeżania ekranu komputera, na którym tworzyłem grę, a zarazem ilość klatek na sekundę. Współczynnik oporu powietrza to 1/15. Ob to „siła podkręcenia”, ma ona wpływ głównie na prędkość pionową, w tym uproszczonym modelu tylko na nią (w czasie lotu) i jest proporcjonalna do prędkości poziomej lotu, przyjmuje wartość od -pi do pi i też jest dzielona przez 15.
Mając taki model musimy pamiętać o uwzględnianiu współczynnika dt wszędzie, gdzie jest to konieczne (głównie w obliczeniach związanych z prędkością obiektów). Szybkość symulacji (gry) możemy regulować zmieniając wartość tego parametru.
Aby gra działała podobnie na komputerach o różnej szybkości działania musimy odpowiednio dostosować do nich parametr dt, w tym przypadku do ilości generowanych klatek na sekundę, w naszym przykładzie jego wartość ma wynosić 10/ilość klatek. Pozostaje więc tylko ustalić faktyczną ilość tych klatek. Niby prosta sprawa – można zastosować metody omówione wcześniej lub np. dodać w głównej pętli następujący fragment:

dt=(Timer-czas)/100
czas=Timer

Spowoduje to dopasowanie parametru dt w każdym przebiegu pętli, np. 60 razy na sekundę, poprzez obliczenie czasu wykonania danego przebiegu. Tak częsta aktualizacja powoduje jednak problem związany z tym, że komputer może się „zaciąć” np. z powodu działania innego programu, co znacznie wydłuży czas wykonania danego przebiegu pętli, a to spowoduje tak znaczną zmianę parametru dt, że gra zachowa się niepoprawnie. Poprzedni przykład powoduje aktualizację co sekundę, ale to nadal może być za często.
Najprostszym sposobem jest przyjęcie, że ilość klatek jest taka sama jak częstotliwość odświeżania ekranu, ale w przypadku wolnych komputerów to nie musi być prawdą i może spowodować wielokrotne spowolnienie gry.
Na szczęście w Ping-Pongu uruchomiłem  na początku demonstracyjną grę komputer-komputer, po zakończeniu której obliczany jest czas działania gry, ilość klatek i do tego dostosowywany parametr dt. Odbywa się to poprzez zapisanie do zmiennej CZAS aktualnego czasu (funkcja TIMER) przed główną pętlą gry:
czas=Timer
a zaraz po zakończeniu pętli aktualizowana jest wartość parametru dt w poniższy sposób:
dt=(Timer-czas)/100/klatki

Pojedynczy set trwa zwykle conajmniej kilka sekund, co już jest czasem na tyle długim, by w znacznym stopniu wyeliminować wspomniany problem. Być może jeszcze lepiej by było sumować czas i ilość klatek kilku lub wszystkich gier…

PING-PONG – nowa retro gra – oryginalny...
Autor: robosy | Kategorie: komputery 
Tagi: retro gry   commodore   zx-81   zx spectrum   atari   amiga   tenis stołowy  
10 listopada 2021, 20:23

  Zapraszam do wypróbowania nowej gry sportowej w stylu retro, prawdopodobnie pierwszy (i jedyny, mam nadzieję) taki symulator tenisa stołowego. Duży nacisk został postawiony na wierne odwzorowanie fizyki ruchu piłki, uwzględnione są chyba wszystkie aspekty z tym związane włącznie z podkręcaniem, odbiciem od kantów stołu i siatki. Jest możliwość gry z komputerem lub w dwie osoby. Sterowanie myszką, joystickiem lub klawiaturą. Jako ciekawostka – „sztuczna inteligencja” gracza komputerowego zawarta jest w 2 linijkach kodu, cały kod gry zajmuje ok. 16 KB, język RC Basic.

 

  Wersja shareware (uproszczona, ale w pełni grywalna) dostępna będzie w moim POBIERAKU. Gra działa w systemie Windows, będzie też wersja na Androida oraz Linux (w razie potrzeby). Instalacja jest analogiczna do wcześniej opisywanej gry Holka, takie same są też zasady korzystania z gry – wplata conajmniej 20 zł upoważnia do otrzymania pełnej wersji gry.

 

  Tradycyjnie zachęcam do zgłaszania uwag dotyczących gry.

 

  Prezentacja na YT:

https://youtu.be/BN9bqC65i5A

 

 

 

  Tymczasowy link do pobrania dema gry:

 

https://drive.google.com/file/d/11Ro8RP_RsqkYZUAEd7mivlXS8CJaiWmi/view?usp=sharing