CC2

Teil 4

Wir werden anhand eines Spiels, d.h. “ASCII-Dash”, die folgenden Techniken und Begriffe kennenlernen:

  • Code Lesen und Verstehen
    • Game-Loop, Game-State und Enums (anhand des Game Loops von ASCII-Dash in dash/dash.cpp)
    • Datenkapselung (anhand des Sound Modules ascii-gfx/gfx/sound.h)
      • Nur lokale und modul-lokale Variablen (vergleiche statische Variablen)
      • Vermeidung von Seiteneffekten
      • Setter- & Getter-Funktionen für Zugriff auf Modulebene

Wir programmieren Folgendes zusammen:

  • Ein Beispiel für Getter-Funktionen
    • Getter for frame counter resp. total elapsed time
game.cpp:

// static module variables
static const double fps = 10; // game constant
static double elapsed = 0; // game state

// in game loop: compute actual elapsed time
elapsed += 1/fps;

// getter implementation
double get_elapsed()
{
   return(elapsed);
}

game.h:

// getter prototype
double get_elapsed();

main.cpp:

printf("elapsed time: %fs\n", elapsed); // not working, bad style
printf("elapsed time: %fs\n", get_elapsed()); // working, no side-effects

Praktikum:

Die nötigen handwerklichen Grundkenntnisse zur Realisierung eines Computerspiels haben wir nun kennen gelernt:

  • Tool-Chain
  • Prozeduren, Funktionen und Funktionale Dekomposition
  • Modularisierung und Datenkapselung
  • NCurses Game-Loop and Game-State

Wir können nun im weiteren Verlauf der Lehrveranstaltung anfangen, mit NCurses ein kleines eigenes Spiel zu programmieren und werden dabei die kennengelernten Techniken anwenden.

Sie sollen Sich nun für eine konkrete Spielidee entscheiden, die Sie dann entsprechend umsetzen werden. Die Wahl des Spiels ist vollkommen frei. Hier einige Beispiele zur Orientierung und als Ideengeber:

Spieleideen

Probieren Sie nun Ihre favorisierten Spiele aus!

D.h. installieren Sie einen C-64 Emulator wie z.B. Vice
und probieren Sie z.B. ein Spiel aus wie z.B. Boulder-Dash, Pacman, Tron, Tetris, Rally-Speedway oder …! Die meisten Spiele lassen sich per Drag&Drop starten. Die Endung .T64 steht für ein Tape, die Endung .D64 für eine Diskette. Die Spiele lassen Sich normalerweise alle mit dem Joystick spielen. Da wir keinen haben, legen wir den Joystick z.B. auf die Tasten asdwx (Keyset definieren und abspeichern).

Empfohlene Emulatoren-Installation:

  • Man lädt sich hier ein passendes Paket herunter.
  • z.B. für Windows:
  • für Linux:
    • sudo apt-get install vice
    • Start → x64 oder x64sc
    • ROMs fehlen noch: kernal chargen basic d1541II
      • Diese besorgt man sich wie folgt:
  • für Mac:
    • Es gibt auch für den Mac vorcompilierte Pakete → nach “vice mac dmg” googlen
    • ROMs fehlen evtl. noch (siehe unter Linux)
    • Alternative: brew install vice
  • Online:

Wenn man den VICE installiert und gestartet hat, dann hat man anfangs den Programm-Editor der Programmiersprache BASIC vor sich. Man kann damit z.B. folgendes BASIC-Programm eingeben:

10 PRINT "HELLO"
20 GOTO 10

Das Program wird mit LIST angezeigt, mit RUN gestartet und mit der Taste Esc angehalten.

Damit hat alles angefangen, aber nun zurück zu Ihrem Spiel:

Sie können bei der Umsetzung Ihres eigenen Spiels in 2-er Teams arbeiten.

Größere Teams sind erlaubt, wenn Sie Git oder SVN als Code-Verwaltung verwenden (z.B. via github oder sourceforge) - wobei letzteres nur empfohlen ist, wenn es in Ihrem Team ein Mitglied gibt, das sich zutraut, Ihnen den Umgang mit der Code-Verwaltung beizubrigen.

Stellen Sie zu Ende des Praktikums dann Ihre favorisierte Spieleidee und Ihr Team vor! Umentscheiden ist selbstverständlich auch später noch möglich. Es geht hier lediglich um einen Startpunkt! Die Umsetzung wird auch nicht benotet, d.h. es geht ums “Learning by Doing”!

Weitere Techniken und Beispiele, die Sie dabei unterstützen, folgen in der Vorlesung. Unterstützung bei der Implementierung Ihres Spiels erhalten Sie kontinuierlich in den folgenden Praktika.

Und wie Sie am besten im Team zusammenarbeiten können, das können Sie in den Best Practices nachlesen.

Protokoll:

Beschreiben Sie mit Ihren eigenen Worten die Begriffe Repository, Datenkapselung, und Getter-Funktionen in Ihrem Ãœbungsprotokoll!

Fragen fürs Protokoll:

  • Wozu benötigt man Datenkapselung?
  • Wieso sind globale Variablen verboten?
  • Was ist der Sichtbarkeitsbereich von lokalen und modul-lokalen Variablen?

Beschreiben Sie, welche Spiele Sie ausprobiert haben (Screenshots) und was für ein Spiel Sie implementieren wollen. Bitte geben Sie im Protokoll Ihre Programmierpartner an.

C Teil 3 | | C Teil 5

Options: