Neueinsteiger plant Dart-Software

Du hast eine Idee für ein Projekt?
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Hallo liebe Gemeinde.

Ich bin Baujahr 1968 (gehöre damit wohl zu den älteren hier) und bin ein reiner Hobby-Dartspieler.
Derzeit habe ich an meinem modifizierten Automatenständer ein in die Jahre gekommenes elektronisches (Soft-)Dart-Board, überlege aber, mir stattdessen ein Bristle-/Sisal-Dartboard für Steeldarts anzuschaffen.
Allerdings muss man damit halt die Punkte manuell aufschreiben und addieren bzw. je nach Spiel subtrahieren. ich bin jett nicht gerade denkfaul und auch Kopfrechnen ist nicht so das problem. Wenn man allerdings mit Kumpels dartet und dabei das eine oder andere Bierchen trinkt, kann es im Laufe der Zeit problematisch werden ;-)
Da ich noch einen 19" Touchscreen (4:3 Monitor für 19"-Montage) rumliegen habe, dachte ich mir, warum eigentlich nicht den unter das Board hängen und die geworfenen Werte antippen.
Bei meiner Suche nach einer entsprechenden Software hab ich leider nichts gefunden, was wirklich meinen Vorstellungen entspricht.
Zudem sind die Programm in der regel für PCs geschrieben und ich möchte keinen extra PC installieren. Ich würde aber gerne einen Raspberry Pi einsetzen, den ich ja einfach mit einem Gehäuse auf der Rückseite des Ständers anschrauben könnte.
Für den Pi gibt es nur einen einzigen Dartscorer (zumindest soweit ich gesehen habe) und das kann leider nur die Spielvariante X01, wo man z.B. von 501 bis exakt 0 runterwerfen muss.
Daher dachte ich, ich gehe das Thema mal selbst an. Bei meiner Suche nach einer plattformunabhängigen Programmiersprache bin ich bei Python hängen geblieben und in meiner naiven Vorstellung kann ich das Programm unter Windows entwickeln und dann mehr oder weniger einfach auf dem Pi laufen lassen....mal schauen.

Zu meinem Kennnisstand im Programmieren: Ich habe in den 80ern auf dem C64 ein bisschen programmiert (Basic), dann später noch auf dem Atari ST. Ansonsten habe ich ein bisschen Ahnung von HTML. Hochsprachen wie C++ hab ich noch nie gemacht, Turbo Pascla mal rudimentär in der Technikerschule.
Ich hab mir das aktuelle Python runtergeladen und habe jetzt angefangen, parallel zu Text- und Videotutorials ein bisschen im Spyder rumzutesten.

Zu meinem Projekt...habe ich mal eine Skizze gemacht, wie ich mir das derzeit vorstelle.


Bild

Es wird ein Spiel gestartet, der Name des Spiels wird aus Datum, Uhrzeit und Spielmodus aufgebaut: also z.B. 2020-06-22_16:12_501SIDO
Spieler 1 fängt an und wirft seine 3 Darts. Er geht ans Board und tippt auf dem darunter hängenden Touchscreen seine 3 Würfe ein, die unter seinem Name dargestellt werden. Einzelne Eingaben können gelöscht und neu gemacht werden. Wenn alles passt, tippt er den OK-Button.
Die Würfe werden addiert und von der Gesamtpunktzahl abgezogen. In der Tabelle kann man sehen, in welcher Runde er welche Punkte erworfen hat.
Dann ist Spieler 2 dran usw. Sobald ein Spieler exakt auf 0 runter ist, ist das Spiel beendet.

Bei meinen Überlegungen bin ich schon auf diverse Fragen gestoßen, zu denen ich derzeit keine Antwort weiß.

1) Wie mache ich den Aufbau und die Abfrage der 63 Buttons am besten/elegantesten? Im Moment habe ich einen Frame, in dem ich die ersten 2 Reihen manuell mit GRID gesetzt habe. Muss ich wirklich jeden Button einzeln setzen und auswerten oder gibt es da eine Art Matrixfunktion oder etwas derartiges?
2) Wie speichere ich die Spiele am besten/elegantesten? Erstelle ich pro Spiel einfach eine Datei, in die ich die Daten reinschreibe? Eine CSV käme mir da als erstes in den Sinn, die ich dann allerdings ja auch beliebig fortschreiben könnte. Mit Datenbanken kenne ich mich nicht aus und ich denke, das wäre auch mit Kanonen auf Spatzen geschossen.
(ob ich jemals die alten Spiele im Programm selbst aufrufbar machen werde (vielleicht in einem eigenen Fenster als Tabelle), weiß ich noch nicht.)


Falls jemand schon einen Vorschlag zu den beiden Punkten machen kann, gerne posten :)

Ansonsten mache ich jetzt erst Mal mit meinen Tests und Tutorials weiter. Ich hab Python ja gestern erst installiert, da erwarte ich heute noch keine großen Ergebnisse :D


Gruß aus der Pfalz
Thorsten
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Liebe Admins/Mods.

"Ich habe mich heute neu registriert und unter Ideen einen recht ausführlichen ersten Thread erstellt (Neueinsteiger plant Dartsoftware). Als ich auf Absenden geklickt habe, musste ich kurz vor dem Bildschirm weg...und habe daher die Meldung nicht gesehen, dass der Beitrag erst freigeschaltet werden muss. Da ich ihn später nicht gefunden habe, dachte ich, dass da was schief gegangen ist und habe einen zweiten Thread als Platzhalter erstellt, um das Erstellen erst mal zu testen.....dieser darf bitte gelöscht werden...SORRY!"


Das ist leider der falsche. Bitte sagt mir, dass ihr den ursprünglichen Thread nochmal aktivieren könnt...da hatte ich echt viel zu meinem Projekt geschrieben :cry:

edit: vielleicht kann mir jemand einfach den text aus dem ursprünglichen Post per PN zukommen lassen, dann packe ich den in diesen Thread...
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Tut mir leid, das ist ein unglückliches Verhalten des Forums hier. Es werden pro Bearbeitung ein neuer Beitrag erstellt. Ich stelle den letzen ein, und Gebe die älteren nicht frei, denn normalerweise ist der neuere Post der, den die Leute wollen. Leider ist das hier schief gegangen. Ich kann nur um Entschuldigung bitten. Bitte wende dich an Damaskus, den Eigner des Forums. Der kann das ggf wiederherstellen. Mir ist das leider so nicht möglich, zumindest wüsste ich nicht wie.
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Hi.

Danke für die Rückmeldung. Ich warte mal noch ab, vielleicht schaut der Admin ja mal rein :-)
Und vielleichtliegen die erstellten Threads irgendwo ab. Problematisch könnte natürlich sein, dass ich beide Male den selben Titel gewählt habe.

Und echt kein Grund, dich zu entschuldigen. Ich war halt nicht am Rechner, um zu sehen, dass der Beitrag erst freigeschaltet werden muss und habe dummerweise einen zweiten erstellt.

Mal schauen....ich fange parallel schon mal an, meinen Text neu zu tippen ;-)

Gruß
Thorsten
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

So, der Ursprungsbeitrag ist modifiziert.
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Top, vielen Dank! :)
Rckstr
User
Beiträge: 19
Registriert: Freitag 15. Mai 2020, 10:04

Hey, finde ich irgendwie ne coole Idee. Da ich mich gerade mit Flask beschäftige, könnte ich mir vorstellen, dass man das auch nett als WebApp realisieren könnte.
Da du ja ein bisschen HTML kannst, wäre das vllt eine Alternative?
Die Logik für die Verarbeitung der Punkte und Speichern der Ergebnisse bleiben ja gleich, auch mit Flask.
Kann man dann auch relativ einfach skalieren, wenn sich zum bsp. deine Jungs sich per Smartphone auf die WebApp schalten und die Ergebnisse per Handy eintippen ;-)

Daher zu 1:
Du baust die Website mit HTML und setzt typische HTML Elemente ein um die Eingabe der Spieler zu händeln (Forms und Buttons usw. und postet die Eingaben per request zu Flask, der dann die Eingaben verarbeitet und das Ergebnis als HTML zurückgibt und die noch verbeibene Punkten anzeigt.
zu 2: Da gibt es im jetzigen Stadium der Planung keine "richtige" Antwort. Ich denke eine CSV ist erstmal nicht falsch.

Aber viele Wege führen nach Rom. Flask, im Sinne einer WebApp ist nur einer davon. Dein Vorhaben könnte man auch mit tkinter, PyQt, PySimpleGUI oder Kivy umsetzen.

LG Rckstr
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Hi und danke für den Feedback und den Vorschlag.

Von Flask hab ich noch nie gehört. Ich schau mir mal an, was das ist...aber was wäre der Vorteil?
Die Würfe auf einem Handydisplay mit 63 Buttons einzutippen, stelle ich mir sportlich vor ;)

Wie schon geschrieben, ich habe nur rudimentäre Kenntnisse in HTML, hab im Moment keine Idee, wie das unter Nr. 1 geschilderte funktionieren könnte :?

Gruß
Thorsten
Rckstr
User
Beiträge: 19
Registriert: Freitag 15. Mai 2020, 10:04

Der Vorteil von Flask ist, und das ist jetzt meine persönliche Meinung, das Flask eine sehr viel steilere Lernkurve hat, als die genannten GUI Module.
Mit Flask händelst du deine gesamte Logik für Spieler, Würfe, rechnen usw. und sendest das Ergebnis zu deiner HTML Seite. Mit HTML baust und händelst du die Grafische Benutzeroberfläche für den User.

In der Tat 63 Buttons sind viel, aber man könnte das Problem per Tabs lösen, dann hast du pro Tab 20 Buttons oder du hast generell nur 20 Buttons (für die Zahlen und dann zwei weitere die dann "double" und "triple" heißen und die dann hochrechnen. Da ist dann Kreativität gefragt, wie man das umsetzen mag. Bzw auch natürlich, wie der User am besten damit interagieren würde.

Vielleicht ist Punkt 1 auch schon zu weit vorraus gedacht: Das Problem wie die Button angeordnet sein müssen, oder wie man sie überhaupt anordnet und der User damit interargiert ist ja um Grunde total egal, solange das Programm noch gar nicht fertig geschrieben ist. Bzw. die Funktionalität, die die Eingabe der Buttons händelt.
Im Programmieren ist es besser, große Probleme in kleine Probleme zu unterteilen und diese nacheinander abzuarbeiten und am Ende kommt alles zusammen und das große Problem ist gelößt.

Ich würde dir vorschlagen erstmal klein anzufangen und einen rudimentären Prototypen zu bauen. Ohne GUI. Stumpf als Terminal Eingabeprogramm.
Wenn der dann alle Funktionalitäten hat, die du brauchst (Spieleranzahl, Gamemodes, Wufergebnisse zusammen rechnen, Gewinner ermitteln, um mal einige Sachen zu nennen die mir auf die Schnelle einfallen) dann kannst du immer noch schauen, wie du die grafische Oberfläche umsetzt. Es macht ja auch kein Sinn, über die Farbe der Lackierung des Autos nachzudenken, wenn das Auto noch gar kein Motor und Reifen eingebaut hat.

Hier noch ein interessanter Artikel wie man ein Programmierprojekt plant: (Englisch)
https://medium.com/swlh/how-to-plan-a-c ... 5917c60553

LG Rckstr
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Rckstr: Ich glaube nicht das Webanwendungen für Anfänger so viel einfacher sind. Oft wird dabei vergessen wie viele Einzeltechniken und Wissensgebiete da involviert sind, also HTTP, HTML, CSS, JavaScript, Cookies, Datenbanken, CSS-Rahmenwerke, clientseitige JavaScript-Rahmenwerke und Bibliotheken, und so weiter. Das alles zusammen ist auch nicht wirklich viel einfacher als das übliche GUI-Rahmenwerk. Welches allerdings den Vorteil hat, dass dort alles aus einer Hand kommt und in *einer* Dokumentation beschrieben ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Mein Projekt hat leider einen herben Rückschlag erfahren, der mir den Wind aus den segeln genommen hat. Ich wollte den Touchscreen ja an einen Pi anschließen und darauf die Dartsoftware laufen lassen. Ich hab jetzt erst mal versucht, den Monitor an den Pi zu kriegen. Das Ergebnis: er wird direkt erkannt und die Touchfunktion funktioniert auch. Allerdings waren anfangs X- und Y-Achsen vertauscht, d.h. wenn ich mit dem Finger hoch/runter gewandert bin, ging der Mauspfeil links/rechts und umgekehrt. Nach langer Recherche und Testen der diversen Lösungsmöglichkeiten im Netz, hab ich das mit einem sehr kryptischen Befehl und der sogenannten "Coordinate Transformation Matrix" hingekriegt. Leider ist jetzt noch die X-Achse invertiert, als aus links wird rechts. Mir ist es bisher nicht gelungen, das zu beheben. Dadurch kann ich den Screen nicht kalibrieren, was zur Folge hat, dass ich nicht genau tippen kann und auch gar nicht in manche Bereiche des Bildschirms komme.

Das muss ich erst mal auf die Reihe kriegen.

Alldieweil werde ich mich aber weiter in Python einlesen und mir Tutorials anschauen....Don't stop believing!
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Die X-Achse sollte sich doch auch durch Coordinatentransformationsmatrix invertieren lassen.
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

Das vermute ich auch, aber ich muss gestehen, dass ich diese Matrix nicht verstanden habe. Das Ubuntu-Wiki hat mich auch nicht erleuchtet, da fehlt mir einiges an Verständnis. Ich habe auch im Pi-Forum angefragt, ob mir da jemand helfen könnte...bisher keine Reaktion :(

Das ist der Befehl, den ich in die Startdatei (/home/pi/.profile) kopiert habe, damit die Achsen nicht mehr vertauscht sind:

xinput set-prop "eGalax Inc. USB TouchController" --type=float "Coordinate Transformation Matrix" 0 1 0 -1 0 1 0 0 1

Diese Matrix sind ja 3 Dreiergruppen.....ich schätze auch, dass ich irgendwo eine 0 oder 1 ändern müsste, damit die X-Achse nicht mehr invertiert ist....aber welche....und wie?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Für mein dafürhalten ist die Matrix mehrfach falsch, weil sie eine 1 zu viel hat, und einen Vorzeichenfehler.

Das reine tauschen der Achsen geschieht so:

Code: Alles auswählen

0 1 0
1 0 0
0 0 1
Durch das Vorzeichen vor der 1 in der ersten oder 2ten Zeile dreht man die Richtung um. Die letzte Zeile sollte unangetastet bleiben.
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

OK, das werd ich mal so testen....nach der Arbeit.

Wie gesagt, ich hatte das so aus dem Netz übernommen und die Achsen waren zumindest so, dass bei hoch/runter bzw. links/rechts der Mauspfeil sich auch in der entsprechenden Achse bewegt hat.
Da ich nicht gecheckt habe, wie das mit der Matrix funktioniert, konnte ich weiter nichts tun.
Ist das irgendwo besser (einfacher) erklärt, warum deine Änderung jetzt die zwei Achsen tauscht?


Ich melde mich, wenn ich getestet habe :)

Danke!
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist einfach lineare Algebra, „die Spalten der Matrix sind die Bilder der Basisvektoren“. Musste ich halt im Studium machen. Wenn du das nicht hattest, ist es auch nicht in 2 Minuten erklärt, und letztlich ja auch nicht so wichtig.
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

So, getestet.....wenn ich deine Matrix verwende, sind die Achsen getauscht, aber die Y-Achse ist ebenso wie die X-Achse invertiert

Wenn ich dann wieder das - vor die 1 setze, hängt der Mauspfeil am oberen Rand fest

Wenn ich in meiner ursprünglichen Matrix das - vor der 1 entferne, hängt er am unteren.

:?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wo setzt du die -1 hin? Da kommt’s schon auf das Detail an.
thludwig
User
Beiträge: 21
Registriert: Dienstag 23. Juni 2020, 06:39

0 1 0
-1 0 1
0 0 1
"Meine Variante": X-/Y-Achsen korrekt, X-Achse invertiert

0 1 0
1 0 0
0 0 1
Deine Variante: X-/Y-Achsen korrekt, aber beide invertiert

0 1 0
-1 0 0
0 0 1
Deine Variante mit - vor der 1: Maus hängt am oberen Rand fest

0 1 0
1 0 1
0 0 1
"Meine" Variante ohne - vor der 1: Maus hängt am unteren Rand fest
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann muß es wohl
0 -1 1
-1 0 1
0 0 1
heißen.
Antworten