WM 2014 Tippspiel

Du hast eine Idee für ein Projekt?
Antworten
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Habe vor für die WM 2014 ein Tippspiel Programm zu schreiben. Die Idee ist die Vorrunde und den Sieger zu Tippen. Das möchte ich mit der Programmiersprache Python realisieren. Die Grundfunktionen wären alle Spiele auf eine Seite auszudrucken und dann diese den Tipper zu Verfügung stellen, die Tipp- und Ergebnisseingabe. Und die Ergebniss Rechnung, für den richtigen Siegen gibt es einen Punkt, für den richtigen Torabstand zwei Punkte und für das exakte richtige Ergebniss drei Punkte. Und den Ausdruck des Ergebniss, Ausdruck in eine Text Datei und diese mit einem Editor ausdrucken. Das Ganze möchte im ersten Schritt ohne GUI realisiert, die Eingaben sollen in der Kommandozeile gemacht werden. Die Daten werden in einer Datenbank, vorzugsweise SQlite, gespeichert.

Als Erweiterung wäre möglich:

Eine komfortable Eingabe über eine GUI, z.B. alle Mannschaften einer Gruppe können mit Drag und Drop zu den Partien zusammen gestellt werden.

Eine grafische Fiederkurve der Positionen der Tipper, auch zum Ausdrucken.

Eine flexible Gestalltung damit das Programm für z.B. Championsleage und EM verwendet werden kann.

Die Datenbank hätte die folgende Struktur:

team: ID, Name, Gruppe

games: ID, team_A, team_B, result_A, result_B, start_date

user, ID, name, email, password_hash #edit nach 2. post

bets: ID, user, game, bet_A, bet_B

settings: mode, aktiv, points #edit nach 2. post

Wie findet ihr diese Idee?
Oder kennt ihr schon so etwas ähnliches? Habe gesucht aber nichts für Python gefunden, für PHP gibt es da einiges.
Zuletzt geändert von Malta am Sonntag 20. Oktober 2013, 18:30, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,

ich würde es (später) eher als Webapplikation entwickeln, so dass die Tipper *direkt* selber ihre Tipps abgeben können. Aber ok, GUI soll ja eh später dazu kommen.

Ich würde die Punktevergabe definitiv nicht fix verdrahten, sondern konfigurierbar machen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ja, dann werde ich in der Benutzertabelle ein Password - Hashfeld vorsehen.
Und eine Tabelle mit den settings, damit die Punktevergabe flexible bleibt.
Dazu noch eine kleine Benutzerverwaltung und Login mit Passworteingabe.

settings: mode, aktiv, points

dann könnten in meinem Fall die Einträge so aussehen:
winner, true, 1
goal_diff, true, 2
result, true, 3
Champion, true, 5 # Der richtige Weltmeistertipp ist 5 Punkte Wert
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Mir sind auch noch paar Ideen gekommen, Danke für den Hinweis mit der Webapplikation, da könnte ein Spieler eine neuere Tiprunde für seinen Freundeskreis eröffnen und Spieler dazu einladen. Oder nur die Spieler sich für diese Runde eine Einladung geschrieben haben. Da gibt es einige Möglichkeiten. Um mir diesem Möglichkeiten offen zu halten und auch später andere Funktion noch nachträglich einzubauen ohne das ich die Datenbank ändern muss,habe ich mir gedacht so eine Art registry ware da nicht schlecht.

tabel user_registry User_ID, String, Int

Und der String wäre dann z.B. Einladung_tipprunde_xyz 1 wenn dann diese Abgelehnt wird bekommt der Int 0 zugewiesen.
Und wenn einer eine Runde eröffnet wird er dann Admin von dieser und das kann auch in diese Table geschrieben werden.

Und es soll auch die Möglichkeit geben das verschiedene Runden von z.B. Freundeskreis, Arbeit und Verein vom gleichen Wettbewerb eröffnet werden können. Aber die dann andere Punktevergabe haben können, das würde ich ebenso über eine Art registry realisieren.

tabel game_registry User_ID, String, Int

Vom Programmablauf, die erste Frage wäre so: Anmelden, Registrieren, Passwort vergessen, Status (z.B. nur Ergebnisse anzeigen)
das wäre CLI, GUI oder Web gleich.
Nach den Anmelden die Frage nach dem Wettbewerb, neuer Wettbewerb, oder neues Tunier (WM,EM) anlegen.
BlackJack

@Malta: Der Name Registry hat hier irgendwie so eine verschwommene Bedeutung. Du solltest IMHO nicht Einzelprobleme mit einer Tabelle hier und da lösen sondern einen ordentlichen Datenbankentwurf machen. Bei Datenbanken ist so etwas in der Regel etwas statischer, d.h. die ändern sich nicht alle naselang, darum sollte man dort einen ordentlichen Entwurf machen. Bei Code ist Veränderung einfacher. Was nicht heissen soll das ein DB-Entwurf für immer in Stein gemeisselt ist, aber ein Migrieren zu einem neuen Schema ist halt mit etwas Aufwand verbunden.

Andererseits würde ich an Deiner Stelle nicht *alles* was möglich ist gleich in den ersten Milestone packen. Denn dann wird der zumindest gefühlt nie fertig, was recht frustrierend werden kann.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ich nutze das Forum ein wenig als Mindmap und für Brainstroming.
Im Prinzip ist mein erster Schritt das was in den ersten Abschnitt im ersten Beitrag steht, zu realisieren.

Dazu würden mir diese Tabellen reichen:
user, ID, name, email, password_hash
games: ID, team_A, team_B, result_A, result_B, start_date
bets: ID, userID, gamesID, bet_A, bet_B

Die games Tabelle könnte ich mit festen Werten laden. Dann brauche ich eine Username, Spiel Ergebniss und Tipp Eingabe. Und zwei Ausgaben die games Daten und eine Ausgabe mit den Usern und den Punkten. Alle anderen Einstellen sind fest hinterlegt. Das wäre überschaubar.

Das Ganze wäre auch (im der Theorie!) Zukunftssicher, denn in zwei Jahren könnte ich die neuen Spieldaten auch wieder fest im Programm hinterlegen und einspielen, und dann nur die Spiele von 2016 anzeigen und berechnen lassen. Aber bis dahin gibt es bestimmt wieder neue Ideen.

Edit: habe den Weltmeister Tipp vergessen, mal schauen wie ich das noch mache, vielleicht doch gleich eine teams und champions table gleich mit einbauen!
BlackJack

@Malta: Zu den Tabellennamen: Benenne die in Einzahl, also zum Beispiel `game` statt `games`. Der Tabellenname ist so etwas wie ein Datentyp oder eine Klasse und die Spalten sind die Datenattribute. Die einzelnen Zeilen in einer Tabelle sind dann die Exemplare von diesem Typ.
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Ich habe den DB Entwurf grafisch dargestellt:
https://github.com/MarkusHackspacher/py ... agramm.png
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Leider komme ich an diesem Projekt nicht so gut voran wie ich es mir erhofft hatte, das hat vorallen mit meiner Zeit zu tun oder besser nicht meiner nicht vorhanden Zeit, mich in ein neues Thema, mit dem Umgang von sqlachemy, einzuarbeiten. Daher werde ich das Projekt für eine Weile ruhen lassen, ich hatte es für 2012 schon geplant, aber ich hoffte mich durch das Posten in diesem Thread meine Gedanken aufzuschreiben und mich zu motivieren.
Wenn jemand möchte kann er gern meine Ideen nutzen und auch meine Code auf Github werde ich nicht löschen.
https://github.com/MarkusHackspacher/pycupbetting
Malta
User
Beiträge: 83
Registriert: Samstag 8. Januar 2011, 23:51

Schon so viele Leute haben den Thread gelesen, am Projekt bin ich auch weitergekommen, jetzt ist die Team und User Eingabe möglichen, das muss ich jetzt noch für Wettbewerb, Spiel und Tipp machen.
Antworten