Teil 1
← Toolchain | ● | C Teil 2: Implementierung & Prototyp →
Wir werden anhand der ASCII-Graphik Bibliothek NCurses, die folgenden Begrifflichkeiten kennenlernen:
- Editor Compiler Linker
- Buildsystem CMake
- Versionskontrollsystem Subversion/Git
- main() Prozedur
- Anweisungsblöcke mit {}
- Prozeduren und Funktionen
- Lokale Variablen
- Einrücken
- return()
ASCII-Dash basiert auf der Bibliothek NCurses. Daher muss diese erst installiert werden!
NCurses Installation
Im Folgenden sind die Schritte beschrieben, die zur Installation von NCurses notwendig sind (Achtung: die Schritte sind nur zur Verdeutlichung, sie sind bereits durch das Installations-Script ausgeführt worden):
Auf Ubuntu 16.04 - 22.04:
- Voraussetzung: GCC und CMake
- sudo apt-get install libncurses5-dev
- Optional für Sound mit SDL:
- sudo apt-get install libsdl1.2-dev libsdl-mixer1.2-dev
- Optional für Joystick mit SDL:
- sudo apt-get install joystick
Auf Mac:
- Voraussetzung: XCode command line tools und CMake
- NCurses ist Bestandteil von BSD → keine weitere Installation notwendig
- Sound wird nicht unterstützt, es sei denn, SDL ist installiert
- Alternativ: Ubuntu in VirtualBox benutzen
NCurses Test
Zum Testen bitte dieses kleine Programm übersetzen (wir verwenden aus Bequemlichkeit gleich den C++ Compiler und kein ANSI C):
main.cpp:
#include <unistd.h>
int main()
{
initscr();
clear();
flash();
refresh();
endwin();
return(0);
}
Obiger Source-Code auf Source-Forge:
Obigen Source-Code lädt man sich entweder von obiger Plattform herunter oder editiert und speichert ihn mit einem Plain-Text-Editor wie kate oder emacs, atom, brackets, “Visual Studio Code” etc., also z.B. auf dem Terminal mit dem Befehl:
kate main.cpp &
Die Prozeduren initscr(), clear(), flash() und endwin() sind Bestandteil der NCurses API (Application Programmers Interface). Der Rest ist Standard C.
Zum Übersetzen benötigte CMake Build-Datei:
→ CMakeLists.txt
Zum Übersetzen benötigt man also die beiden obigen Dateien cmake.cpp und CMakeLists.txt im selben Arbeitsverzeichnis!
Dann kann man den Quellcode im Terminal übersetzen und ausführen:
cmake . make ./main
Man sollte nun das Terminal kurz aufblitzen gesehen haben.
NCurses Prozedur
Quellcode editieren, so dass er zusätzlich vor main() die folgende Prozedur enthält:
{
int i;
const int n = 3;
for (i=0; i<n; i++)
{
flash();
refresh();
clear();
refresh();
sleep(1);
}
}
Und in main() “myflash” anstelle von “flash” aufrufen!
Nun blitzt es dreimal.
NCurses Funktion
Ändern von myflash() von einer Prozedur in eine Funktion mit Rückgabetyp “int” und Rückgabewert “i”:
{
...
return(i);
}
Zusätzlich in main() nach endwin():
Das geht natürlich nicht, da “i” eine lokale Variable ist, die nur in myflash bekannt ist. Wir brauchen eine weitere lokale Variable in main():
Was wird ausgegeben und wieso?
ASCII-DASH
Falls noch nicht erledigt, ASCII-Dash herunterladen und ausprobieren:
svn export http://svn.code.sf.net/p/ascii-dash/code/ ascii-dash
Ãœbersetzen von ASCII-Dash im Sourceverzeichnis auf der Kommandozeile:
cd ascii-dash cmake . make && ./main
Wenn der Joystick z.B. in der VirtualBox nicht funktioniert:
./main --nojoy
Praktikum:
Reproduzieren Sie die das Aufblitzen des Bildschirms mit Hilfe von NCurses wie in der Vorlesung! Spielen Sie ASCII-DASH bis zu mindestens Level 2!
Protokoll:
Beschreiben Sie mit Ihren eigenen Worten die obigen Fachbegriffe in Ihrem Ãœbungsprotokoll.
Nehmen Sie in Ihr Protokoll einen Screenshot Ihres Codes auf, der das Aufblitzen bewirkt!
Nehmen Sie in Ihr Protokoll einen Screenshot von Level 2 von ASCII Dash auf!
Hausaufgaben:
Keine!