1.03.2016

Organizacja kodu w aspekcie systemu operacyjnego

Na samym początku przebudowy kodu, wszystkie funkcje, zmienne, struktury zależne bezpośrednio od biblioteki systemowej (lub ramy systemowej, w moim przypadku od SDL'a) umieściłem w oddzielnym katalogu "framework_dependent". Każdy inny moduł, z poza tego folderu, będzie już odnosił się tylko do kodu samej gry, lub silnika gry, z możliwością odwołania się pośredniego do spraw czysto systemowych, poprzez odpowiednio zuniwersalizowane nazwy zdefiniowane w pliku nagłówkowym "framework_dependent/fw.h" i poprzez zmienne globalne z "globals.h". Wszystkie nazwy zmiennych globalnych zapisuje z dużej litery.
Przy wstępnym obmyślaniu mapy powiązań plików nagłówkowych z logiczną strukturą kodu, zauważyłem jeden aspekt organizacyjny. Mianowicie unikanie, wszędzie tam gdzie to jest możliwe, dyrektywy #include w plikach nagłówkowych znacznie zmniejszyło częstotliwość występowania konfliktów deklaracji.

Nazwy typów, funkcji i zmiennych, które są zależne od systemu (lub od biblioteki ramowej, oprócz tych najbardziej pierwotnych np. uint32, uint8), piszę dużymi literami, ze znakiem "_" na początku. Są to nazwy, które informują w sposób zuniwersalizowany (w miarę możliwości) o zadaniu, z którym są związane.
Główna funkcja odpalająca cały program znajduje się w "main.cpp", poza katalogiem "framework_dependent" i obecnie wygląda nastepująco:
int main( int argc, char** argv ) {
  _FRAMEWORK_INIT();
  initGame();
  _FRAMEWORK_LOOP();
  _FRAMEWORK_END();
  return 0;
}

Pętla główna w "framework_dependent/loop.cpp" odnotowuje sam fakt wystąpienia zdarzenia (systemowego, sprzętowego, lub związanego z mechaniką samej gry) i umieszcza tą informację na tablicy globalnej. Pętla ta jest zainicjowana w taki sposób, że reaguje jedynie na zdarzenia klawiatury, zamknięcie okna i zdarzenia zdefiniowane przez programistę. Ten zabieg pozwala zmniejszyć obciążenie procesora, w przypadku gdy na ekranie nic się nie dzieje, lub gdy gracz nie wykonuje w danej chwili żadnej akcji na urządzeniu sterującym. Gra nie generuje żadnych dodatkowych obliczeń w tle.

Brak komentarzy:

Prześlij komentarz