Gaming on Raspberry Pi in C++.
- Bereitstellung der Controller inkl. der Ansteuerung. --> CHECK
- Menü. --> CHECK
- Zeichen-Funktionen. --> CHECK
- Beispiel-Spiel. --> CHECK
- Joystick-Kalibrierung. --> CHECK
- Musik für Startbildschirm und Menüs. --> OFFEN.
- Empfohlene Ordnerstruktur: Erstelle im Ordner "Documents" den Ordner "repos" und wechsele in diesen.
cd Documents
mkdir repos
cd repos
- Downloade das Git-Repository und wechsele in den gedownloadeten Ordner.
git clone https://github.com/startbit96/pitendo.git
cd pitendo
- Installiere den Terminal-Emulator "xterm":
sudo apt-get install xterm
- Aktiviere die quadratische Schriftart "square". Hierzu musst du dich in dem Ordner pitendo befinden:
mkdir ~/.fonts
cp res/square.ttf ~/.fonts/
fc-cache
-
Das Projekt wird mittels cmake gelinkt und kompiliert. Gegebenfalls muss cmake heruntergeladen werden und die IDE angepasst werden.
-
Aktivieren von SPI auf dem Raspberry Pi (unter Interface).
sudo raspi-config
- framework: display.h und display.cpp
Diese Dateien stellen grundlegende Zeichenfunktionen sowie eine Klasse für das Erstellen von Menüs analog Haupt- und Pausenmenü zur Verfügung.
- framework: controller.h und controller.cpp
Diese Dateien binden die Controller ein. Es werden Funktionen zur Taster-Drücker-Erkennung sowie zur Positionsauslesung des Joysticks gestellt.
- framework: pitendo_game_engine.h und pitendo_game_engine.cpp
Diese Dateien beinhalten die Game-Engine, welche den zeitlichen Ablauf im Programm steuert (FPS-Einstellung, ...). Außerdem werden hier das Hauptmenü und das Optionsmenü (Pausenmenü) gemanaged.
- Hauptdatei: pitendo.cpp
Diese Datei ist die grundlegende Pitendo-Datei, welche den Pitendo-Start, die Pitendo-Dauerschleife und das Pitendo-Herunterfahren beinhaltet. Außerdem werden an dieser Stelle die Spiele eingebunden.
- Vorlage-Spiel: template.h und template.cpp
Diese beiden Dateien zeigen beispielhaft die Implementierung eines Spiels in Pitendo auf. Es werden die Grundfunktionen definiert, welche jedes Spiel zu stellen hat. Es kann als Vorlage fuer die Entwicklung eines eigenen Spiels genutzt werden. (Bitte hierfür kopieren und umbenennen. Nicht in der ursprünglichen Datei arbeiten.)
Positionen, welche anzupassen sind, sind mit "##### MUSS ANGEPASST WERDEN #####" gekennzeichnet.
- Ermittlung der Terminalgröße als Spielfeldbegrenzer.
pitendeGE->screenWidth
pitendoGE->screenHeight
- Nutzung der Buttons eines Controllers. Möglichkeit 1: Hinterlegen der Funktionen, welche bei Buttondrücken aufgerufen werden sollen. Memberfunktion der Objekte controllerP1, controllerP2:
void setButtonFunctions( void (*buttonFunktionGruen)(void),
void (*buttonFunktionRot)(void),
void (*buttonFunktionGelb)(void),
void (*buttonFunktionBlau)(void),
void (*buttonFunktionStart)(void),
void (*buttonFunktionJoystick)(void));
Ausführen, sofern gedrückt:
void execute();
Möglichkeit 2: Manuelle Abfrage der Button-Zustände. Zugriff über Memberfunktion jedes Buttons. z.B.
controllerP1->buttonGruen->wasPressed()
Vorteil Möglichkeit 1:
- Nutzung der Implementierung
Nachteil Möglichkeit 1:
- Es können keine Memberfunktionen von Objekten verknüpft werden.
- Es müssen Funktionen ohne Rückgabe- und Übergabewert sein (void ()()).
Einsatzmöglichkeit:
- Im Spiel.
Vorteil Möglichkeit 2:
- Individuelle Nutzung.
Nachteil Möglichkeit 2:
- Vermutlich ein wenig mehr Code-Aufwand, da bereits bestehende Implementierung nicht genutzt wird.
Einsatzmöglichkeit:
- In Menüs.
- Nutzung des Joysticks. Zugriff auf Joystick:
controllerP1->joystick
controllerP2->joystick
Digitale Nutzung über Memberfunktion (wurde Ausschlag über Schwellwert festgestellt?):
void getMovement(bool &up, bool &down, bool &left, bool &right);
Analoge Nutzung über Memberfunktion:
void getPosition(float &x, float &y);