• Keine Ergebnisse gefunden

Aufgabe 1: Tic-Tac-Toe

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe 1: Tic-Tac-Toe"

Copied!
2
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Übungen zur Vorlesung

GRUNDLAGEN DERINFORMATIKI Studiengang Elektrotechnik

SS 03

AG Betriebssysteme FB3 Kirsten Berkenkötter Ausgabe: 5.6.2003 Besprechung: 13.6.2003

Übungszettel 5

Aufgabe 1: Tic-Tac-Toe

Aufgabe ist es, ein Tic-Tac-Toe Spiel zu programmieren. Als Spielfeld wird ein Arraychar spiel- feld[3][3]genommen, das zu Anfang mit lauter Leerzeichen initialisiert ist. Fuehrt der Mensch einen Zug aus, markiert er sein Feld mit’X’, fuehrt der Computer einen Zug aus, markiert er sein Feld mit’O’.

Vorgegeben ist eine Funktion zum Ausgeben des (aktuellen) Spielfeldes, der als Parameter das Spielfeld-Array übergeben werden muss:

void spielfeld(char array[3][3]) {

//Spielfeld mit Belegung malen printf("\n 1 2 3 \n");

printf(" --- --- --- \n");

printf("1 | %c | %c | %c |\n", array[0][0], array[0][1], array[0][2]);

printf(" --- --- --- \n");

printf("2 | %c | %c | %c |\n", array[1][0], array[1][1], array[1][2]

);

printf(" --- --- --- \n");

printf("3 | %c | %c | %c |\n", array[2][0], array[2][1], array[2][2]);

printf(" --- --- --- \n\n");

}

Die Ausgabe hat z.B. folgendes Aussehen:

1 2 3

--- --- --- 1 | X | | |

--- --- --- 2 | X | O | |

--- --- --- 3 | | O | |

--- --- ---

a) Schreibt eine Funktion, mit der die Spielzüge des Computers gemacht werden. Benutzt dazu Zufallszahlen, um die Zeile und Spalte zu ermitteln, in welcher der Computer seine Spielfigur setzt. Denkt daran, die Spielzüge des Computers auf Korrektheit zu überprüfen, bevor ihr sie wirklich vornehmt.

(2)

void spielzugComputer(char array[3][3]);

b) Schreibt eine Funktion, mit der die Spielzüge des Menschen gemacht werden. Fragt dazu mitscanf die Zeile und Spalte ab, in welche der Mensch seine Spielfigur setzen will. Macht dies solange, bis eine gültige Eingabe vorliegt.

void spielzugMensch(char array[3][3]);

c) Schreibt eine Funktion, mit der überprüft wird, ob jemand gewonnen hat, d.h. in einer Spalte, Zeile oder Diagonalen drei Spielfiguren eines Spielers stehen. Hat der Mensch gewonnen soll eine 0 zurueckgegeben werden, hat der Computer gewonnen, eine1. Hat keiner gewonnen, wird-1zurueckgegeben

int spielende (char array[3][3]);

d) Schreibt ein Hauptprogramm. Zuerst soll das Spielfeld mit Leerzeichen initialisiert und dann ausgegeben werden. Mit Hilfe von Zufallszahlen soll ermittelt werden, wer anfängt: bei einer 0der Mensch, bei einer1der Computer.

Danach erfolgt das eigentliche Spiel. Der Beginner fängt an und macht seinen Spielzug, wor- aufhin das Spielfeld ausgegeben wird. Das gleiche gilt für den Spieler, der dann an der Reihe ist. Es soll solange gespielt werden, bis entweder ein Spieler gewonnen hat, oder die maximale Zahl der Züge gemacht wurde und ein Unentschieden resultiert.

Zu Letzt wird ausgegeben, wer gewonnen hat.

e) Im Moment spielt der Computer ausgesprochen dämlich, da er seine Züge lediglich nach Zufallsprinzip macht. Er erkennt weder, wenn sein Gegner zu gewinnen droht, noch, wenn er selbst gewinnen könnte. Um diesen Missstand zu beheben, soll eine weitere Funktion geschrie- ben werden, die überprüft, ob im nächsten Zug jemand gewinnen könnte.

int kannGewinnen(char array[3][3], int *zeile, int *spalte, char zeichen);

Die Funktion bekommt natürlich das Spielfeld-Array übergeben. Die Zeigerzeileundspaltedie- nen der Rückgabe des Ergebnisses, d.h. sie zeigen an, welches Feld gesetzt werden muss, um zu gewinnen. Der letzte Parameterzeichenunterscheidet, ob auf Gewinn des Computers oder des Menschen im nächsten Zug überprüft werden soll. Hier muss ein ’X’ für den Menschen und ein ’O’für den Computer übergeben werden.

Der Rückgabewert bestimmt, ob der Test erfolgreich war oder nicht. Kann im nächsten Zug der Computer oder der Mensch gewinnen, wird eine0zuruckgegeben, sonst eine-1.

In der FunktionspielzugComputerwird nun zunächst abgefragt, ob im nächsten Zug entweder der Computer selbst oder der Gegner gewinnen kann. Ist dies der Fall, werden die inzeileund spaltezurückgegebenen Werte verwendet. Ansonsten werden wie gehabt Zufallswerte verwen- det:

if((kannGewinnen(array, &zeile, &spalte, ’O’) = -1) && (kannGewinnen(array, &zeile,

&spalte, ’X’) == -1)) {

do {

...

Referenzen

ÄHNLICHE DOKUMENTE

Abstract: Mobile Spiele sind Spiele, bei denen sich die Spieler in ihrer Umwelt physisch bewegen und dabei mobile Geräte nutzen.. Gegenstand unseres Artikels sind Spiel-

Wenn ein Sturm die Flut gegen das Land drückt, staut sich das Wasser an der Küste und kann bei Ebbe nicht ablaufen. Bei der nächsten Flut steigt das Wasser dann wesentlich höher

Den Rechtsaufzeichnungen fällt sodann eine Ausbildungsfunktion zu: Nach- wachsende Generationen können und müssen mit dem so stabilisierten Rechtsbe- stand vertraut gemacht

auch durch haft.. Medienmitt Symposium Im Rahmen Symposium englischer Referaten v für Vertical Expertinnen für die nach Welchen A finden Sie d können Sie FiBL-Kont. >

„Spirito di Basilea – Der Tisch ist gedeckt!“: Unter diesem Titel eröffnet das FiBL gemeinsam mit der Stadt Basel am 7.. August eine Ausstellung im Schweizer Pavillon an der Expo

Im Rahmen einer gemeinsamen Ausstellung mit Zürich und Genf zum Thema „Urban Food Innovations“ thematisiert der Basler Beitrag das urbane Ernährungssystem von Basel und setzt sich

The discussion with the audience is fuelled by an input on the Urban Food Policy Pact that aims at engaging cities for the development of sustainable food

Hierzu finden Sie im Buch von Koch, „Einführung in die Mathematik,“ Springer Verlag, auf Seite 21