# Grundgedanken zu einer Scoring App



## Cash (29. Nov 2016)

Hallo zusammen, 

ich bin Java/Programmiereinsteiger und möchte eine Dart Scoring App programmieren. Ich möchte hier keine Quellcodes, sondern nur Tipps für die Umsetzung( Methoden, Klassen etc). 

Die app soll so aufgebaut sein: 
Appstart -> Hauptmenü 
Hier hat man die Button "Spiel", "Playermanagement" und "Optionen".
Wichtig : Im Fenster Playermanagement soll man Spieler hinzufügen und löschen können. Die hinzugefügten Spieler werden mit Namen direkt im Fenster angezeigt. Wenn man ein Spielerprofil anwählt bekommt man Statistiken zum Average, Doppelquote,Matchhistory etc. 
Frage : Hat das was schon mit Datenbanken zu tun? benutze ich für die Spieler Klassen oder arraylist Methoden? 

Im "Spiel"Fenster heißt es 1 gegen 1. 
Hier soll es für jeden Spieler einen Button o.ä. geben. Wenn man darauf drückt erscheint eine Liste, aus der man sein vorher erstelltes Profil auswählen kann. 
Frage :Wie kann  ich das dementsprechend verknüpfen? 

Im direkten Aufeinandertreffen ist die Matchansicht in einer Art Tabellenform. Die Punkte starten bei 501. Scores werden direkt darunter angezeigt und mit der alten Summe verrechnet. Im Eingabemenü (Score)möchte ich für jedes zahlenfeld einen Button erstellen. Zudem Multiplikatoren für triple und Double Felder. 
Die Statistiken von dem Match sollen im Profil beider Spieler sofort aktualisiert werden. Frage : geschieht das über Übergabe von Variablen? 

Findet ihr die App zu umfangreich für einen Einstieg? Welche Methoden muss ich mir unbedingt anschauen? 

Vielen Dank für eure Hilfe!


----------



## Joose (29. Nov 2016)

Cash hat gesagt.:


> Die app soll so aufgebaut sein:
> Appstart -> Hauptmenü
> Hier hat man die Button "Spiel", "Playermanagement" und "Optionen".
> Wichtig : Im Fenster Playermanagement soll man Spieler hinzufügen und löschen können. Die hinzugefügten Spieler werden mit Namen direkt im Fenster angezeigt. Wenn man ein Spielerprofil anwählt bekommt man Statistiken zum Average, Doppelquote,Matchhistory etc.


Du vermischt hier den Aufbau der Oberfläche mit der Funktionalität deiner App 
Schreibe dir erstmal zusammen welche Funktionalität deine App bieten soll:

Spieleprofile anlegen, bearbeiten, löschen
Scoreboards für Matches 

Matchdaten speichern
....
..
Und denk dabei nicht so sehr daran wie die Oberfläche aufgebaut ist. Entsprechend gut programmiert (Trennung UI und Logik) sollte es möglich sein die Oberfläche umzubauen ohne dabei eben die Logik anzurühren.
Gedanken über das Layout bzw. Design kannst du dir natürlich auch machen, aber lieber mal eine hässliche/unübersichtliche App als eine die vl schön ausschaut aber nicht funktioniert 



Cash hat gesagt.:


> Frage : Hat das was schon mit Datenbanken zu tun?


Wie du die Daten speicherst bleibt dir überlassen! Alles ist möglich von Datenbanken über JSON Dateien bis hin zu XML Dateien.



Cash hat gesagt.:


> benutze ich für die Spieler Klassen oder arraylist Methoden


Was sind "arraylist Methoden"?



Cash hat gesagt.:


> Im "Spiel"Fenster heißt es 1 gegen 1.
> Hier soll es für jeden Spieler einen Button o.ä. geben. Wenn man darauf drückt erscheint eine Liste, aus der man sein vorher erstelltes Profil auswählen kann.
> Frage :Wie kann  ich das dementsprechend verknüpfen?


Indem dein Button auf den Klick reagiert (Listener) und die Profile aus deiner DataSource (Datenbank oder File) ladet und entsprechend aufbereitet.



Cash hat gesagt.:


> ..... Die Statistiken von dem Match sollen im Profil beider Spieler sofort aktualisiert werden. Frage : geschieht das über Übergabe von Variablen?


Bei einen entsprechenden guten Aufbau deiner Klassen bzw. Logik wird es viele Methoden geben die Parameter haben 



Cash hat gesagt.:


> Findet ihr die App zu umfangreich für einen Einstieg? Welche Methoden muss ich mir unbedingt anschauen?


Jein 
Anhand deiner Fragen lässt sich schon erkennen dass du in OOP nicht ganz so fit bist. Klar es ist ein Projekt zum Üben, aber da sollte man nicht mit einer App anfangen sondern es lieber als einfache Konsolenanwendung realisieren um sich mehr auf die OOP zu gewöhnen.

Es kommt ganz darauf an für was die App gedacht ist und was sie können soll ... einen Fehler den viele am Anfang machen -> sie wollen alles gleichzeitig realisieren!
Fange einfach mal nur damit an Spielerprofile anzulegen. Danach erweitere die App Schritt für Schritt um weitere Funktionalität.

Was du dir anschauen solltest: Entsprechende Tutorials zur OOP (und App Programmierung). Man kann sich nicht einzelne Methoden rauspicken die wichtig sind


----------



## Kababär (29. Nov 2016)

> Findet ihr die App zu umfangreich für einen Einstieg?



Ja. Wenn du keine praktischen Erfahrungen hast im Programmieren, wirst du vermutlich (falls das auch GUI unterstützt sein sollte) recht schnell deprimiert sein.
Auf der anderen Seite: wenn du dich damit beschäftigst und den Kopf nicht hängen lässt, solltest du es dennoch hinkriegen.
Deine Fragen zu beantworten ist etwas schwierig.. man könnte alle Fragen entweder mit ja oder nein beantworten. Kommt eben darauf an wie du das machen willst, das ist "nur" eine Sache des Designs.
Vielleicht kannst du aber auch erstmal versuchen einen Taschenrechner zu programmieren, damit du ein Gefühl dafür kriegst (und nicht zu viel Neues auf einmal kommt).

LG und viel Erfolg


Edit: als ich angefangen hab auf dem Handy zu antworten, war noch keine Antwort vorhanden. Wahnsinn


----------



## SeriousD0nkey (29. Nov 2016)

Für den Einstieg würde ich nicht mit App-Entwicklung anfangen. Lerne ersmal die Java-Basics und OOP anhand von Konsolenanwendungen. Bei der Entwicklung für Android (ich gehe mal davon aus du redest von Android) werden dir nämlich schon viele Sachen geliefert (vieleicht meinst du damit die  "methoden die du dir anschauen sollst", sonst wüsste ich nicht wovon du sprichst) und du weißt gar nicht, was da passiert und wo diese Sachen herkommen (weil du dafür den Sinn und die Funktionsweise von OOP verstanden haben musst). Und wenn du OOP verstanden hast und zumindest die Java Basics kannst, dann kannst du dich mit der Entwicklung für Android beschäftigen.
Und wie Joose bereits schrieb: Nicht immer alles auf einmal wollen. Schritt für Schritt.


----------



## Cash (29. Nov 2016)

Der Grund warum ich so Oberflächenorientiert denke, ist meine Entwicklungsumgebung. Ich benutze Android Studio. Da kann man die Button schön einfach reinziehen und leicht neue Seiten erstellen, so dass die Oberfläche schon da ist, und ich "nur" noch den Inhalt machen muss. Die paar wenigen Codezeilen konnte ich mir so zusammenmauscheln, aber jetzt stoße ich doch schnell an meine Grenzen wenn es um die gänzliche Umsetzung geht. Das habe ich unterschätzt. An Java bin ich eigentlich wenig interessiert - mein Ziel ist es eine ordentliche Dartscoreapp zu haben, nicht Java zu lernen. Da es aber keine Dartapp gibt die meine Bedürfnisse erfüllt, gibt es für mich keine andere Möglichkeit mein Ziel zu erreichen, außer selbst eine zu entwickeln. Soviel zu meiner Motivation 

Ich möchte mich - orientiert an euren Tipps - auf etwas beschränken. Nehmen wir das Spielermanagement, d.h. Spieler hinzufügen und dauerhaft speichern, löschen. Ich würde mir das so vorstellen: 

Für jeden neuen Spieler wird eine neue Klasse angelegt. (public class Spieler)
Diese Klasse enthält beispielsweise Stringvariablen(Name), Integervariablen(Average/Wurfdurchschnitt).

1. Frage: Wäre das so möglich?
2. Frage: Wie kann ich die Namen, Werte einlesen? Ich habe gelesen es geht über Scanner oder bufferedreader - was ist einfacher/vorteilhafter?
3. Frage: Wie kann ich diese erzeugten Spieler dauerhaft speichern und dann die Werte der Variablen(z.b. Average ausgeben lassen?

Wenn ihr meint, dass die Lage für mich erstmal hoffnungslos weil das keinen Sinn ergibt was ich schreibe, dann bleibt mir wohl nichts anderes übrig als mit den Grundschleim anzufangen. 

LG


----------



## Kababär (29. Nov 2016)

1. Ja 
2. Scanner reicht
3. Datenbank wäre ne feine Sache. Es reicht aber auch XML, JSON oder einfache eine Textdatei (musst dir halt was überlegen wie "Peter;13;....", also so was wie csv ist auch einfach zum lesen), die du lokal irgendwo speicherst.
Beim Lesen würde ich den Text in eine List<String> speichern und zeilenweise dann ein string.split(";"); machen. Damit erhälst du ein String Array und musst dir für die Werte nur die richtigen Stellen merken. 

Ich meine wenn du eh kein Java lernen willst, kannst du es ja so mal probieren, schadet ja nicht. Oder lässt es von Leuten schreiben und bezahlst eben ein bisschen was. Aber Motivation kann viel bewirken


----------



## Nuiton (30. Nov 2016)

Also eine Embedded Datenbank aufzusetzen hoert sich nur schwer an, ist es aber gar nicht wirklich. Eventuell schaust du dir das mal an.


----------



## Joose (30. Nov 2016)

Cash hat gesagt.:


> ... Da kann man die Button schön einfach reinziehen und leicht neue Seiten erstellen, so dass die Oberfläche schon da ist, und ich "nur" noch den Inhalt machen muss. ....


Ja dieses Oberflächen zusammenziehen verleitet die meisten zu denken es wäre "ganz easy" 



Cash hat gesagt.:


> Die paar wenigen Codezeilen konnte ich mir so zusammenmauscheln, aber jetzt stoße ich doch schnell an meine Grenzen wenn es um die gänzliche Umsetzung geht. Das habe ich unterschätzt. An Java bin ich eigentlich wenig interessiert - mein Ziel ist es eine ordentliche Dartscoreapp zu haben, nicht Java zu lernen.


Es ist nun mal so, dass man um eine App entwicklen zu können eine entsprechende Programmiersprache können muss. 
Also entweder wirst du eben eine Sprache lernen müssen um dir deine App selber zu schreiben oder du musst eben etwas Geld in die Hand nehmen und sie schreiben lassen (oder du findest jmd der es im Umfeld einer Projektarbeit vl gratis macht )



Cash hat gesagt.:


> Für jeden neuen Spieler wird eine neue Klasse angelegt. (public class Spieler)
> Diese Klasse enthält beispielsweise Stringvariablen(Name), Integervariablen(Average/Wurfdurchschnitt).
> 
> 1. Frage: Wäre das so möglich?
> ...


Ja ist ein Anfang, dann hast mal eine Klasse (du erstellst für jeden neuen Spieler ein Objekt dieser Klasse ).
Von wo willst du die Werte einlesen? DB, File oder vom User eingeben lassen? Scanner und BufferedReader haben beide ihr Vorteile und Nachteile je nachdem was man realisieren will sollte man sich entscheiden.



Cash hat gesagt.:


> Wenn ihr meint, dass die Lage für mich erstmal hoffnungslos weil das keinen Sinn ergibt was ich schreibe, dann bleibt mir wohl nichts anderes übrig als mit den Grundschleim anzufangen.


Hoffnungslos nicht, aber ohne gewissen Grundlagen der Programmierung wird es sehr schwer.


----------

