SAI || Sommersemester 1997 || Systemnahe Software II || Übungen

Übungen zu Systemnahe Software II
Blatt 3 (12. 05. - 22. 05. 1997)


Aufgabe 3 (15 Punkte)

Zur Vorbereitung für die im übernächsten Übungsblatt beginnende Projektarbeit sollen Sie zunächst an einem kleineren Beispiel die curses-Bibliothek kennenlernen. Diese C-Bibliothek realisiert Abstraktionen für Anwendungen, die etwa wie der Editor vi ein ASCII-Terminal (oder -Fenster) zur bildschirmorientierten Ein- und Ausgabe nutzen wollen. Sie greift auf eine umfangreiche, in jedem UNIX-System enthaltene Datenbank mit Terminal-Beschreibungen zurück, um auf portable Weise für jedes noch so exotische Gerät optimierte Steuersequenzen zu bestimmen.

Schreiben Sie in C ein Modul, mit dem man eine bestimmte Klasse von Brettspielen auf dem Bildschirm darstellen kann: Zwei Spieler setzen abwechselnd einen Stein ihrer Farbe auf eine noch freie Stelle in einer quadratischen Matrix. Es gibt also nur zwei Sorten von Spielsteinen und eine relativ übersichtliche Menge von Spielfeldern. Typische Vertreter solcher Spiele sind z.B. Tic Tac Toe, Reversi und Gobang. Die Größe des Brettes sollte variabel etwa zwischen 2x2 und 11x11 Feldern konfigurierbar sein. Irgendwo auf dem Bildschirm sollen kurze Statusmeldungen ("Weiß am Zuge" etc.) angezeigt werden können.

Implementieren Sie die folgenden Funktionen:
gb_reset(n) leeres Brett der Größe nxn anzeigen
gb_goto(x,y) Cursor auf bestimmtes Feld positionieren
gb_set(x,y,col) Feld mit Stein der Sorte col besetzen,
col = 0,1,2 bedeutet leeres Feld / "schwarz" / "weiß"
gb_status(s) Text s als Statusmeldung anzeigen

Bei Koordinatenangaben läuft die erste Koordinate von links nach rechts, die zweite von unten nach oben, jeweils beginnend mit Eins. Züge auf Koordinaten außerhalb des Brettes werden ignoriert.

Ergänzen Sie das Anzeigemodul zu einem Programm, das Eingaben von der Tastatur bearbeitet, sodaß Sie die verschiedenen Funktionen testen können. Das Programm soll auf Tastendrücke sofort reagieren, ohne auf die Return-Taste zu warten.

Hinweise:

Vergessen Sie nicht -lcurses bei den Flags für ld.

Die wichtigsten Funktionen für die Benutzung von curses sind:
initscr Initialisierung
noecho, cbreak, nonl Tasten ohne Echo und einzeln bearbeiten
endwin Aufräumarbeiten, vor Termination unbedingt aufzurufen
(für Abbruch per Break-Taste an Signalbearbeitung denken)!

Mehr dazu können Sie in den Übungen, im UNIX-Manual (man curses) oder z.B. in A.-T. Schreiner, "Systemprogrammierung in UNIX, Teil 2" erfahren. Auch die Web-Seite "http://web.cs.mun.ca/~rod/ncurses/ncurses.html" könnte für Sie interessant sein.


SAI || Sommersemester 1997 || Systemnahe Software II || Übungen

Martin Hasch, Mai 1997