|
1 | 1 | \lesson{Tic Tac Toe - Teil 1} |
2 | 2 |
|
3 | | -Nachdem wir jetzt lange dröge und unspannende -- und zum Teil einfach |
4 | | -un\emph{sinnige} -- Lektionen und Beispiele hatten, wollen wir uns als Ende von |
| 3 | +Nachdem wir jetzt lange dröge und unspannende Lektionen und Beispiele hatten, wollen wir uns als Ende von |
5 | 4 | Kapitel 1 einer ein wenig spannenderen Aufgabe widmen -- wir wollen ein |
6 | 5 | einfaches Spiel programmieren. Wir haben dazu Tic Tac Toe ausgewählt, da es |
7 | 6 | relativ überschaubare Spiellogik besitzt. Ein- und Ausgabe, werden wir über die |
8 | 7 | Konsole machen. |
9 | 8 |
|
10 | 9 | In \texttt{vorkurs/lektion17} findet ihr eine Datei \texttt{tictactoe.o}. Diese |
11 | | -könnt ihr nicht in eurem Editor öffnen - sie enthält von uns bereitgestellte, |
| 10 | +könnt ihr nicht in eurem Editor öffnen -- sie enthält von uns bereitgestellte, |
12 | 11 | bereits vorkompilierte Funktionen, die ihr nutzen könnt, um einen Anfang zu |
13 | 12 | haben. Wir werden sie später Stück für Stück ersetzen. |
14 | 13 |
|
|
26 | 25 |
|
27 | 26 | \texttt{tictactoe.o} definiert euch insgesamt folgende Funktionen: |
28 | 27 | \begin{description} |
29 | | - \item[frage\_feld\_nummer] |
30 | | - Nimmt ein Array von \texttt{int}s der Länge 9 entgegen und gibt einen |
31 | | - \texttt{int} zurück. |
| 28 | + \item[frage\_feld\_nummer] |
| 29 | + Nimmt einen Vektor mit 9 \texttt{int}s entgegen und gibt einen \texttt{int} zurück. |
32 | 30 |
|
33 | | - Gibt auf der Konsole eine Frage nach der Feldnummer aus |
34 | | - (durchnummeriert von 0 bis 8), liest eine Feldnummer von der Nutzerin |
35 | | - ein und gibt diese zurück. Die Funktion stellt sicher, dass die |
36 | | - Feldnummer zwischen 0 und 8 liegt und dass das Feld noch nicht besetzt |
37 | | - ist (sonst wird noch einmal nachgefragt). |
38 | | - \item[gebe\_feld\_aus] |
39 | | - Nimmt ein Array von \texttt{int}s der Länge 9 entgegen und hat als |
40 | | - Rückgabetyp \texttt{void} (was für „keine Rückgabe“ steht). |
| 31 | + Gibt auf der Konsole eine Frage nach der Feldnummer aus (durchnummeriert von 0 bis 8), liest eine Feldnummer von der Nutzerin ein und gibt diese zurück. |
| 32 | + Die Funktion stellt sicher, dass die Feldnummer zwischen 0 und 8 liegt und dass das Feld noch nicht besetzt ist (sonst wird noch einmal nachgefragt). |
| 33 | + \item[gebe\_feld\_aus] |
| 34 | + Nimmt einen Vektor mit 9 \texttt{int}s entgegen und hat als Rückgabetyp \texttt{void} (was für „keine Rückgabe“ steht). |
41 | 35 |
|
42 | | - Gibt das gegebene Feld auf der Konsole aus. Dabei werden die 9 Felder |
43 | | - von oben links nach unten rechts von 0 beginnend durchnummeriert. Das |
44 | | - 9-elementige Array stellt also das Feld dar. Eine 0 in einem |
45 | | - Arrayelement bedeutet, dass das Feld leer ist, eine 1 bedeutet, dass |
46 | | - sich dort ein Kreuz befindet und eine 2 bedeutet, dass sich ein O dort |
47 | | - befindet. Andere Werte werden mit einem \texttt{?} dargestellt. |
48 | | - \item[gewinnerin] |
49 | | - Nimmt ein Array von \texttt{int}s der Länge 9 entgegen und hat als |
50 | | - Rückgabetyp \texttt{int}. |
| 36 | + Gibt das gegebene Feld auf der Konsole aus. Dabei werden die 9 Felder von oben links nach unten rechts von 0 beginnend durchnummeriert. |
| 37 | + Der 9-elementige Vektor stellt also das Feld dar. |
| 38 | + Eine 0 in einem Vektorelement bedeutet, dass das Feld leer ist, eine 1 bedeutet, dass sich dort ein \textbf{X} befindet und eine 2 bedeutet, dass sich ein \textbf{O} dort befindet. |
| 39 | + Andere Werte werden mit einem \textbf{?} dargestellt. |
| 40 | + \item[gewinnerin] |
| 41 | + Nimmt einen Vektor mit 9 \texttt{int}s entgegen und hat als Rückgabetyp \texttt{int}. |
51 | 42 |
|
52 | | - Prüft, ob in diesem Zustand des Feldes bereits eine der Spielerinnen |
53 | | - gewonnen hat. Die Funktion gibt 0 zurück, wenn noch niemand gewonnen |
54 | | - hat, 1, wenn die Spielerin X gewonnen hat und 2, wenn die Spielerin O |
55 | | - gewonnen hat. Sollte das Spiel unentschieden ausgegangen sein, wird |
56 | | - eine 3 zurück gegeben. |
| 43 | + Prüft, ob in diesem Zustand des Feldes bereits eine der Spielerinnen gewonnen hat. |
| 44 | + Die Funktion gibt 0 zurück, wenn noch niemand gewonnen hat, 1, wenn die Spielerin \textbf{X} gewonnen hat und 2, wenn die Spielerin \textbf{O} gewonnen hat. |
| 45 | + Sollte das Spiel unentschieden ausgegangen sein, wird eine 3 zurück gegeben. |
57 | 46 | \end{description} |
58 | 47 |
|
59 | | -Der zweite Teil, den ihr zur Benutzung der Funktionen braucht ist das Linken |
60 | | -(was genau das bedeutet, wird später noch erklärt). Dies ist fürs Erste sehr |
61 | | -einfach: Ihr gebt einfach dem \texttt{g++} Befehl zusätzlich zu eurer |
62 | | -\texttt{.cpp} Datei noch \texttt{tictactoe.o} als zusätzliche Inputdatei an. |
| 48 | +Der zweite Teil, den ihr zur Benutzung der Funktionen braucht ist das Linken (was genau das bedeutet, wird später noch erklärt). |
| 49 | +Dies ist fürs Erste sehr einfach: Ihr gebt einfach dem \texttt{g++} Befehl zusätzlich zu eurer \texttt{.cpp} Datei noch \texttt{tictactoe.o} als zusätzliche Inputdatei an. |
63 | 50 |
|
64 | 51 | \inputcpp{tictactoe.cpp} |
65 | 52 |
|
66 | 53 | \textbf{Praxis:} |
67 | 54 | \begin{enumerate} |
68 | | - \item Ergänzt \texttt{tictactoe.cpp} um Deklarationen für die anderen |
69 | | - beschriebenen Funktionen aus \texttt{tictactoe.o}. Ein Array als |
70 | | - Parameter könnt ihr in genau der gleichen Notation angeben, wie ihr es |
71 | | - euch in einer Funktion als Variable definieren würdet. |
72 | | - \item Das Grundgerüst eines Spiels ist die \emph{input-update-display}-loop. |
73 | | - Dies ist eine Endlosschleife, in der zunächst der \emph{input} der |
74 | | - Spielerin abgefragt wird. Anschließend wird der interne Spielzustand |
75 | | - aktualisiert (\emph{update}). Zuletzt wird der neue Spielzustand |
76 | | - angezeigt (\emph{display}). Der anfängliche Spielzustand wird vor |
77 | | - dieser loop hergestellt (\emph{setup}). |
| 55 | + \item |
| 56 | + Ergänzt \texttt{tictactoe.cpp} um Deklarationen für die anderen beschriebenen Funktionen aus \texttt{tictactoe.o}. |
| 57 | + Einen Vektor als Parameter könnt ihr in genau der gleichen Notation angeben, wie ihr es euch in einer Funktion als Variable definieren würdet. |
| 58 | + \item |
| 59 | + Das Grundgerüst eines Spiels ist die \emph{input-update-display}-loop. |
| 60 | + Dies ist eine Endlosschleife, in der zunächst der \emph{input} der Spielerin abgefragt wird. |
| 61 | + Anschließend wird der interne Spielzustand aktualisiert (\emph{update}). |
| 62 | + Zuletzt wird der neue Spielzustand angezeigt (\emph{display}). |
| 63 | + Der anfängliche Spielzustand wird vor dieser loop hergestellt (\emph{setup}). |
78 | 64 |
|
79 | | - \texttt{tictactoe.cpp} zeigt dieses Grundgerüst. Ergänzt den input- und |
80 | | - den display-Teil mithilfe der gegebenen Funktionen. Ergänzt auch den |
81 | | - setup-Teil; ihr braucht für den Spielzustand einerseits das Array, |
82 | | - welches das Spielfeld fassen soll, andererseits eine Variable für die |
83 | | - Spielerin, die gerade am Zug ist und eine Variable, die das im |
84 | | - aktuellen Zug eingegebene Feld speichert. Vergesst auch nicht, dass ihr |
85 | | - das Feld zu Beginn mit 0en vollschreiben müsst, um es zu |
86 | | - initialisieren. |
87 | | - \item Nun müssen wir noch den Update-Teil ergänzen. Hier solltet ihr in das |
88 | | - von der aktuellen Spielerin gewählte Feld mit deren Nummer füllen, |
89 | | - testen, ob jemand gewonnen hat und wenn ja, die Siegerin ausgeben und |
90 | | - euer Programm beenden (denkt daran, dass das Spiel auch unentschieden |
91 | | - ausgehen kann). Sonst sollte die aktuelle Spielerin gewechselt werden. |
| 65 | + \texttt{tictactoe.cpp} zeigt dieses Grundgerüst. |
| 66 | + Ergänzt den input- und den display-Teil mithilfe der gegebenen Funktionen. |
| 67 | + Ergänzt auch den setup-Teil; ihr braucht für den Spielzustand einerseits den Vektor, welcher das Spielfeld fassen soll, andererseits eine Variable für die Spielerin, die gerade am Zug ist und eine Variable, die das im aktuellen Zug eingegebene Feld speichert. |
| 68 | + Vergesst auch nicht, dass ihr das Feld zu Beginn 9 0en enhalten muss. |
| 69 | + \item |
| 70 | + Nun müssen wir noch den Update-Teil ergänzen. |
| 71 | + Hier solltet ihr in das von der aktuellen Spielerin gewählte Feld mit deren Nummer füllen, testen, ob jemand gewonnen hat und wenn ja, die Siegerin ausgeben und euer Programm beenden (denkt daran, dass das Spiel auch unentschieden ausgehen kann). |
| 72 | + Sonst sollte die aktuelle Spielerin gewechselt werden. |
92 | 73 | \end{enumerate} |
93 | 74 |
|
94 | 75 | \textbf{Spiel:} |
95 | 76 | \begin{enumerate} |
96 | | - \item Okay, das ist nun wirklich nicht schwierig zu erraten oder? Wenn ihr |
97 | | - dem obigen Rezept gefolgt seid, habt ihr jetzt ein funktionierendes |
98 | | - Tic-Tac-Toe Spiel. Und ihr habt eine Sitznachbarin. Zählt eins und eins |
99 | | - zusammen. |
| 77 | + \item |
| 78 | + Okay, das ist nun wirklich nicht schwierig zu erraten oder? |
| 79 | + Wenn ihr dem obigen Rezept gefolgt seid, habt ihr jetzt ein funktionierendes Tic-Tac-Toe Spiel. |
| 80 | + Und ihr habt eine Sitznachbarin. |
| 81 | + Zählt eins und eins zusammen. |
100 | 82 | \end{enumerate} |
0 commit comments