Lernpfad:Einführung in Git/13: Unterschied zwischen den Versionen

K
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(33 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{NNavigation}}
{{NNavigation}}__NOTOC__


{{Aufgabe:Start}}
{{Aufgabe:Start|Icon=BlueJ Logo.png
}}
Implementiere mit einem Partner/einer Partnerin deiner Wahl das Spiel "Tic-Tac-Toe". Koordiniert euch dabei über ein gemeinsames Git-Repository.
Implementiere mit einem Partner/einer Partnerin deiner Wahl das Spiel "Tic-Tac-Toe". Koordiniert euch dabei über ein gemeinsames Git-Repository.
(Einigt euch, wessen Repository aus dem {{Pfad|12|letzten Schritt}} ihr benutzen wollt und fügt den anderen als Mitarbeiter mit Schreibrechten hinzu: Öffne das Repository in {{Gitea}} und dann „Einstellungen“ —> „Mitarbeiter“.)
'''Bearbeitet dazu zunächst die Aufgaben auf dieser Seite fertig.'''
{{Aufgabe:End}}
{{Aufgabe:End}}


Zum Abschluss der Wiederholung der Objektorientierten Programmierung mit Java sollst du nun ncoh ein Mini-Projekt umsetzen: Das Spiel "Tic-Tac-Toe".
Zum Abschluss der Wiederholung der objektorientierten Programmierung mit Java sollst du nun noch ein Mini-Projekt umsetzen: das Spiel "Tic-Tac-Toe".


{{Zitat|
{{Zitat|
Zeile 13: Zeile 18:
Im Programm sollen zwei Spieler im Wechsel ziehen können, bis einer gewonnen hat. Die Wahl des Spielfeldes erfolgt jeweils durch die Eingabe der Feldkoordinaten (siehe Abbildung) auf der Kommandozeile.
Im Programm sollen zwei Spieler im Wechsel ziehen können, bis einer gewonnen hat. Die Wahl des Spielfeldes erfolgt jeweils durch die Eingabe der Feldkoordinaten (siehe Abbildung) auf der Kommandozeile.


{|
{| {{prettytable}}
| (0,2) || (1,2) || (2,2)
| (0,2) || (1,2) || (2,2)
|-
|-
Zeile 20: Zeile 25:
| (0,0) || (1,0) || (2,0)
| (0,0) || (1,0) || (2,0)
|}
|}
Die Ausgabe des Spielfeldes kann als Text auf der Kommandozeile vorgenommen werden.
== Objektorientierte Modellierung ==
Als ersten Schritt muss das Projekt ''modelliert'' - also geplant - werden. Dazu wird die Modellierungssprache [[wikipedia:UML|UML]] verwendet. Folgendes ''Entwurfsklassendiagramm'' zeigt den Grundaufbau des Spiels. Du kannst das Modell beliebig verändern und ergänzen, wenn du möchtest.
[[Datei:UML Tic-Tac-Toe.svg|center]]
Zur Erzeugung von UML-Diagrammen nutzen wir das Programm {{UMLet|link}}. Es erlaubt die Erzeugung (einfacher) UML-Diagramme aus Text-Definitionen. Wenn du {{UMLet}} öffnest, siehst du rechts eine Auswahl an UML-Elementen. Durch einen Doppelklick wird es in den Editor links übernommen. Dann siehst du unten ("Properties") die Text-Definition dieses Elements. Dort kannst du Änderungen vornehmen.
[[Datei:UMLet GUI.png|center|600px]]
Die beiden Klassen oben haben etwa diese Definitionen:
{{Spalten:Start}}
{{Spalte|
<pre>
*TicTacToe*
--
spielfeld: Zahl[][]
--
spielErstellen
spielStarten
istSpielVorbei: Wahrheitswert
</pre>}}
{{Spalte|
<pre>
*Spieler*
--
name: Text
--
ziehen
</pre>}}
{{Spalten:End}}
{{Hinweis|Hilfen zu den Methoden der UML-Modellierung findest du im Buch<ref>Informatik Band 2: ''Modellierung, Datenstrukturen und Algorithmen'', [https://www.westermann.de/artikel/978-3-14-037122-3/Informatik-Lehrwerk-fuer-die-gymnasiale-Oberstufe-Schuelerband-2 978-3-14-037122-3]</ref> auf Seite 196ff.}}{{Aufgabe:Start|Icon=Umlet.png}}
# Erstelle ein neues Entwurfsklassendiagramm in {{UMLet}} und füge die Klassen oben in das Diagramm ein. Modifiziere dann (gemeinsam mit deinem Partner/deiner Partnerin) das Diagramm für euer Spiel. Überlegt euch, welche ''Klassen'', ''Objektvariablen'' und ''Methoden'' ihr benötigt. Plant ggf. auch schon etwaige Erweiterungen (s.u.) mit ein.
# Speichert das Diagramm im Projektordner ab und ''committed'' es in das Repository.
# Transformiert das ''Entwurfsklassendiagramm'' in ein ''Implementierungsklassendiagramm''.<ref>Siehe dazu im Buch Seite 30.</ref>
# Speichert auch dieses Diagramm im Projektordner ab und ''committed'' es in das Repository.
{{Aufgabe:End}}
== Umsetzungshinweise ==
* Für die Eingabe auf der Kommandozeile kann die Klasse [[Befehlsreferenz_Java#java.util.Scanner|Scanner]] benutzt werden.
* Nutze für die Ausgabe die Methoden [[Befehlsreferenz_Java #Ausgaben|print, println und printf]] von System.out.
** <code>printf</code> nimmt als ersten Parameter einen [http://public.beuth-hochschule.de/~grude/PrintfAppletHilfe.html Formatierungsstring] entgegen und dann so viele Werte, wie im Formatstring definiert werden. Ein Wert wird mit einem Prozentzeichen (<code>%</code>) eingeleitet, gefolgt von einem Buchstaben, der den Typ definiert:
*** Text: <code>printf("%s", "String")</code>
*** Ganzzahl: <code>printf("%d", 5)</code>
*** Dezimalzahl: <code>printf("%f", 2.4)</code>
*** Mehrere Werte: <code>printf("Hallo %s! Es ist %d Uhr.", "Hansi", 10)</code>
** Zwischen <code>%</code> und Buchstabe können weitere Formatierungszeichen stehen. Zum Beispiel bedeutet eine Zahl, dass der Wert nach links mit Leerzeichen aufgefüllt werden soll, bis er so viele Zeichen hat:
*** <code>printf("|%4d|", 5) // Ergibt "|  5|"</code>
** Zusätzlich können in jedem String folgende Steuerzeichen vorkommen:
*** <code>\n</code>: Zeilenumbruch
*** <code>\t</code>: Tabulator
* Das Spielfeld besteht aus 3-mal-3 Feldern und kann als [[Lernpfad:Objektorientierte_Programmierung_mit_Java/Komplexe_Arrays#Mehrdimensionale_Arrays|zweidimensionales Array]] gespeichert werden. Wählen einen geeigneten [[Befehlsreferenz_Java #Datentypen|Datentyp]] für das Array.
* Hauptteil des Spiels ist die Prüfung, ob einer der Spieler gewonnen hat. Überlege dir, welche Endsituationen es im Spiel geben kann.
* Prüfe, ob die Eingaben der Spieler gültige Koordinaten sind und entscheide auch, wie du im Fehlerfall vorgehen möchtest.
* Versuche das Spiel für die Benutzer / Spieler möglichst komfortabel zu gestalten.
== Hilfestellungen ==
Folgende Seiten helfen dir bei der Arbeit:
* [[Befehlsreferenz Java]]
* [[Lernpfad:Objektorientierte Programmierung mit Java]]
* [[Lernpfad:Würfelspiel in Java]]
<references/>
== Erweiterungen des Spiels ==
Hier sind einige Ideen für optionale Erweiterungen des Spiels, falls du nach Umsetzung des Basisspiels noch Zeit hast:
* Implementiere einen Computerspieler.
* Implementiere eine [[Lernpfad:Würfelspiel_in_Java/GUIs_mit_dem_Java-Editor|grafische Benutzeroberfläche]].
* Vergrößere das Spielfeld (oder mache es [[wikipedia:Qubic|dreidimensional]]).
* Implementiere eine Variante von [https://imgur.com/rR6csce Upgraded Tic-Tac-Toe]:
*: {{#ev:youtube|CsWwnOvaa6Y}}