LernMoment / ttt-challenge

TicTacToe als C#-Konsolenanwendung im Rahmen der LernMoment C# Challenge
http://www.lernmoment.de/csharp-challenge/
Creative Commons Zero v1.0 Universal
3 stars 0 forks source link

Aufgabe #1 - Spielbrett anzeigen #3

Open suchja opened 8 years ago

suchja commented 8 years ago

Aufgabenbeschreibung

Als erste Aufgabe der Challenge solltest du das Spielbrett anzeigen lassen. Wie es genau aussehen soll siehst du in der Beschreibung der Kata. Hier eine Möglichkeit wie ein leeres Spielbrett dargestellt werden kann:

  A B C
0  | |
  -+-+- 
1  | |
  -+-+- 
2  | |
  -+-+- 

Das Spielbrett besteht aus leeren Spielfeldern und den Koordinaten. Du kannst entweder die Ausgabe erstmal in der main Methode realisieren oder auch schon eine separate Klasse dafür anlegen.

Um die Ausgabe machen zu können, brauchst du natürlich erstmal ein neues Projekt in Visual Studio. Zusätzlich wäre es hilfreich, wenn du ein Projekt auf GitHub startest und deinen Quellcode dort veröffentlichst. Damit habe ich die Möglichkeit mir dein Resultat anzuschauen und zu kommentieren.

Als kleine Erweiterung kannst du bereits in der Main Methode auf eine Tasteneingabe vom Benutzer warten. Damit erreichst du, dass die Konsolenanwendung nicht sofort nach der Ausgabe beendet wird.

WICHTIG: Ein ganz elementarer Bestandteil einer jeden Übung (wenigstens, wenn sie dich weiterbringen soll) ist das Reflektieren. Wenn du die Aufgabe erledigt hast ziehe bitte eine Bilanz was die Aufgabe dir bezüglich deiner Fähigkeiten gezeigt hat. So kannst du einfach für dich erkunden in welchen Bereichen du noch mehr Aufgaben machen solltest und welche Bereiche du schon gut beherrschst. Du kannst gerne die Ergebnisse deiner Reflexion hier als Kommentar hinterlassen. Dann kann ich dir für dich spezifisch weitere Übungen empfehlen.

Was du mit dieser Aufgabe üben kannst

Wenn du Einsteiger bist, sehe ich insbesondere folgende Aspekte die du mit dieser Aufgabe übst:

Wenn du Fortgeschrittener oder Profi bist, dann kannst du auch die Basics (siehe vorheriger Absatz) übern, aber du kannst beispielsweise auch die Domänenanalyse bzw. das Grobdesign üben. Du könntest also beispielsweise überlegen in welcher Klasse du die Ausgabe machst und hier eine Begründung dazu schreiben.

Artikel, Videos & Links zu dieser Aufgabe

Hier ein paar Videos die dir bei der Lösung dieser Aufgabe helfen könnten:

Weitere Informationen gibt es auf LernMoment.de!

Lösung

Hast du die Aufgabe wirklich umgesetzt, oder willst du nur ein wenig spicken?

Wenn du eine erste Inspiration benötigst, dann schau dir mal den Quellcode von Erik an. Wie immer in der Softwareentwicklung gibt es jedoch sehr viele verschiedene Lösungsmöglichkeiten.

Meine Lösung siehst du in diesem Commit. Er zeigt dir was ich im Vergleich zu einem leeren Konsolenprojekt geändert habe.

gustda commented 8 years ago

Done, auch wenn meine Lösung bisher nur ein Feld darstellen aknn, aber genau bis dahin ging es ja auch. In das Spielfeld kann noch kein Steindargestellt werden, diese Feature ist später geplant.

Der Link auf Erik's Lösung funktioniert leider nicht, er hat da was an der Struktur geändert, wenn du das noch ändern kannst, dann Link doch einfach in das Repository

suchja commented 8 years ago

@gustda Dein Ansatz gefällt mir sehr gut und auch der Quellcode ist sehr sauber. Bin gespannt wie es weiter geht.

Grundsätzlich kann ich mir auch gut den Einsatz von MVC vorstellen, allerdings finde ich deine Begründung noch etwas unausgereift 😉. Auch wenn gerade bei diesem Beispiel nicht notwendig ist, so denke ich schon, dass es verständliche Gründe gibt, warum man es einsetzt.

suchja commented 8 years ago

Erledigt, ich habe mich für die einfachste Variante entschieden um diese Aufgabe zu lösen. Noch einfacher wäre es gewesen die Ausgabe direkt in main zu machen, aber wir hatten ja gesagt, dass es eine separate Klasse Spielbrett geben soll.

Andere mögliche Kandidaten für Klassen habe ich in der Domänenanalyse erarbeitet und dokumentiert.

nocheinheinrich commented 8 years ago

So, habe die erste Aufgabe inzwischen erledigt. Es funktioniert :-)

suchja commented 8 years ago

@nocheinheinrich habe es schon laufen lassen! Super!

Wenn du magst gebe ich dir später noch etwas Rückmeldung direkt in deinem Projekt.

nocheinheinrich commented 8 years ago

Danke; allerdings gefällt mir die Main() Methode nicht. Hätte gern das CASE in einer eigenen Methode gehabt. Habe ich aber nicht hinbekommen. Zudem habe ich keine Ahnung, wie ich das Programm neu starten soll (falls jemand als Kommando „neu“ eingibt.

Über eine Kommentar würde ich mich freuen.

Von: Jan Suchotzki [mailto:notifications@github.com] Gesendet: Samstag, 25. Juni 2016 16:41 An: LernMoment/ttt-challenge Cc: nocheinheinrich; Mention Betreff: Re: [LernMoment/ttt-challenge] Aufgabe #1 - Spielbrett anzeigen (#3)

@nocheinheinrich https://github.com/nocheinheinrich habe es schon laufen lassen! Super!

Wenn du magst gebe ich dir später noch etwas Rückmeldung direkt in deinem Projekt.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/LernMoment/ttt-challenge/issues/3#issuecomment-228546884 , or mute the thread https://github.com/notifications/unsubscribe/ATLuSSJajAyZd8-BpTaXS0p9s_f-Mnh6ks5qPT3tgaJpZM4I83Q- . https://github.com/notifications/beacon/ATLuSekGyEqI-pCOI9AgJMEWZLDU_Vf7ks5qPT3tgaJpZM4I83Q-.gif


Diese E-Mail wurde von Avast Antivirus-Software auf Viren geprüft. https://www.avast.com/antivirus

gustda commented 8 years ago

@nocheinheinrich Hi du hast da zwei Probleme angesprochen. Zu1. was ist dein Problem daran? Die Daten, also die Information aus der Eingabe zurück zu zu bekommen? Du hast halt potentiell keinen Zugriff auf deine "Spielfeldzeilen", ich könnte mir vorstellen, dass das ein Grund wäre, was das auslagern erschwert, das lässt sich aber z.B. über ausreichend umfangreiche Rückgabewerte lösen. Du kannst auch die Zeilen als Referenz übergeben, dann änderst du die direkt in deiner ausgelagerten Methode. Oder hast du da andere schwierigkeiten?

Zu 2: Du musst ja nicht das Programm Neu starten, nur das Spiel. Überleg dir, was genau du anpassen musst, damit dein Programm wieder den Stand hat, den es nach dem Start hatte. dann ist das "Wie neugestartet"

Tachiguro commented 7 years ago

Ready, ich hab wohl zu kompliziert gedacht.... ^^