CC2

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 <ncurses.h>
#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:

void myflash()
{
   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”:

int myflash()
{
   ...
   return(i);
}

Zusätzlich in main() nach endwin():

printf("Der Inhalt von i ist %d\n", i);

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():

int i = myflash();

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!

Toolchain | | C Teil 2: Implementierung & Prototyp

Options: