Najnowsze doniesienia o moim szablonie do gier! Trochę więcej przygotowań i edukacji w zakresie wskaźników spowodowało popchnięcie "progressu" do przodu i zacząłem wczoraj wznawianie prac w "raylib". Co konkretnie się udało zrobić i na jakiej zasadzie zostawiam w środku artykułu.

SZABLON W RAYLIB I STARCIE ZE WSKAŹNIKAMI

Kilka dni temu doszedłem wreszcie do rozdziału w książce tłumaczącego bardzo starannie jak "widzieć" i jak rozumieć znaczenie wskaźników. Uczę się programowania już niezły szmat czasu, już niejeden trudny zapis widziałem na własne oczy, ale temat wskaźników w języku C spowodował u mnie naprawdę niezły mętlik w głowie. Musiałem przy tym trochę posiedzieć, żeby to zrozumieć. Zwłaszcza te łańcuchy znaków, które jak wiemy, są w rzeczywistości wskaźnikami do typu "char". Została mi już końcówka tego rozdziału, natomiast jeszcze wczoraj postanowiłem spróbować podstawić inne wpisy kopiujące łańcuchy do tablic. No i udało się zrobić postęp w "raylib"!

Cały problem polegał na próbie skopiowania łańcucha tylko do odczytu pobierającego liczbę znaków jako długość łańcucha do tablicy, która posiadała miejsce na łańcuchy mające sztywno ustaloną długość (70 znaków)! Wcześniej, naruszenie ochrony pamięci wydawało mi się absurdalne, no bo co to za błąd przy kopiowaniu łańcucha do łańcucha? Niby żaden jednak po wstępnym, ale gruntownym przestudiowaniu tych wskaźników teraz rozumiem na czym polegał problem. Jeśli chciałem tworzyć w "raylib", konieczne było zrozumienie.

raylib

"raylib" wymaga wiedzy z zakresu manualnego zarządzania pamięcią oraz obsługi wskaźników!

ROZWIĄZANIE PROBLEMU

Zadeklarowana przeze mnie tablica składa się z kilku łańcuchów o długości 70 znaków. Gdy utworzyłem zmienną lokalną typu "const char *", długość tego łańcucha była obliczana przez kompilator! Pętla "for" wykonywała kopiowanie tego łańcucha do odpowiedniego miejsca w tablicy. W chwili kopiowania miałem "segmentation fault". Pomogło dopiero jawne przypisanie długości łańcucha czyli zamiana na "const char X[70]" w szablonie "raylib". Prawdopodobnie różne długości tablic znaków "gryzły się" ze sobą i w którymś momencie nastąpiło przejście do adresu wykraczającego poza adres tablicy, nie wiem tylko czy u tego pojedynczego łańcucha, czy w tablicy (tłumaczyłem wczoraj jak język C traktuje tablice). Ponad dwa tygodnie przerwy od prac celem skupienia się na literaturze, ale udało się!

CZY TO KONIEC WSZYSTKICH PROBLEMÓW?

Oczywiście, że nie! Pozostaje jeszcze zbudowanie całej reszty. Powyższy problem dotyczył menu statystyk, a pozostaje jeszcze do zrobienia system zapisu i odczytu, menu odznaczeń, system zdobywania odznaczeń oraz kilkanaście innych rzeczy, które mam u siebie zanotowane. "raylib" i tak bardzo mnie wyręcza od skomplikowanych rzeczy bez których handryczyłbym się nawet z utworzeniem samego okna gry do końca tego roku i jeszcze dalej. Tak czy siak, wracam do początku jednocześnie uzupełniając wiedzę o C. A na zachętę, wycinek ekranu prezentujący okno szablonu wyświetlającego menu informacji.


Na koniec, pragnę wszystkim złożyć najserdeczniejsze życzenia z okazji Wielkiej Nocy! To nie jest tak, że ja nie obchodzę żadnych świąt, tylko dopiero teraz znalazłem okazję na to, aby zachować te resztki przyzwoitości. Zdrówka życzę bo jest ono najważniejsze, szczególnie gdy na zewnątrz szaleje pandemia.