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

Zur Navigation springen Zur Suche springen
K
keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
 
(23 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{NNavigation}}
{{NNavigation}}__NOTOC__


{{Aufgabe:Start|Icon=BlueJ Logo.png
{{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.'''
'''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 28: Zeile 30:
== Objektorientierte Modellierung ==
== 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.
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]]
[[Datei:UML Tic-Tac-Toe.svg|center]]


Zur Erzeugung von UML-Diagrammen nutzen wir das Programm [https://www.umlet.com UMLet]. 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.
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]]
[[Datei:UMLet GUI.png|center|600px]]


Die beiden Klassen oben haben zum Beispiel diese Definitionen:
Die beiden Klassen oben haben etwa diese Definitionen:


{{Spalten:Start}}
{{Spalten:Start}}
Zeile 59: Zeile 61:
{{Spalten:End}}
{{Spalten:End}}


{{Aufgabe:Start|Icon=Umlet.jpg}}
{{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.
# 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 commited es in das Repository.
# Speichert das Diagramm im Projektordner ab und ''committed'' es in das Repository.
# Transformiert das ''Entwurfsklassendiagramm'' in ein ''Implementierungsklassendiagramm''.
# Transformiert das ''Entwurfsklassendiagramm'' in ein ''Implementierungsklassendiagramm''.<ref>Siehe dazu im Buch Seite 30.</ref>
# Speichert auch dieses Diagramm im Projektordner ab und commited es in das Repository.
# Speichert auch dieses Diagramm im Projektordner ab und ''committed'' es in das Repository.
{{Aufgabe:End}}
{{Aufgabe:End}}


== Umsetzungshinweise ==
== Umsetzungshinweise ==
* Für die Eingabe auf der Kommandozeile kann die Klasse [[Befehlsreferenz_Java#java.util.Scanner|Scanner]] benutzt werden.
* Für die Eingabe auf der Kommandozeile kann die Klasse [[Befehlsreferenz_Java#java.util.Scanner|Scanner]] benutzt werden.
* Das Spielfeld besteht aus 3-mal-3 Feldern und kann als ''zweidimensionales Array'' gespeichert werden. Wählen einen geeigneten Datentyp für das Array.
* 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.
* 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.
* 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.
* 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}}

Navigationsmenü