Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Idee zu einem Fußballmanager gesucht (Spieltage/Begegnungen)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
mathiaswolfgang



Anmeldungsdatum: 24.08.2011
Beiträge: 10

BeitragVerfasst am: 05.09.2011, 10:29    Titel: Idee zu einem Fußballmanager gesucht (Spieltage/Begegnungen) Antworten mit Zitat

Hallo Community,
Als nächstes möchte ich mich der Spiele, Begegnungen, widmen.
Bisher gehe ich davon aus, das ich 18 Teams aus Liga 1 und 2 Verwenden werde.
Wenn eine gute Lösung gefunden wird, die auch elegant mit einer anderen Anzahl von Teams zurechtkommt, wäre das sicher nicht verkehrt.
Wenn nicht, bleibt das bei den 18 Teams für Liga 1 und 2.

Frage: Was soll passieren? Die Spiele der 34 Spieltage (bei 18 Teams) sollen für die 1 und 2 Liga generiert werden.
Dafür gibt es auch Regeln.
- Jedes Team spielt in der Hinrunde einmal gegen jedes andere Team.
- die Rückrunde ist wie die Hinrunde mit vertauschtem Heimrecht.
- Jedes Team darf an einem Spieltag nur einmal Spielen.
Das Bedeutet das an jedem Spieltag 9 Spiele stattfinden.
- Jedes Team sollte abwechselnd ein Heimspiel und ein Auswärtsspiel haben.

Es gibt also 306 Begegnungen, die feststehen, die aber auf die 34 Spieltage, auf die Spiele verteilt werden müssen, ohne eine Regel zu verletzen.

Lösungsansatz A: Ein Schlüssel wird erstellt, wo alle Begegnungen (ohne Mannschaften) bereits auf die Spiele verteilt werden.
Beispiel für einen beliebigen Spieltag:

Team4-Team9
Team17-Team6
Team3-Team16
usw

Dann werden zu Beginn der Saison, die 18 Mannschaften zugelost auf die 18 Teams.
Diesen Schlüssel kann man in eine Textdatei Abspeichern, werden dann Spieltag für Spieltag ausgelesen.

Lösungsansatz B Die 306 feststehenden Begegnungen werden in einen Lostopf geworfen.
Jetzt zieht der Computer für den 1. Spieltag, dem Spiel(1) ein Los(1), eine Begegnung(X).
Für den 18. Spieltag, das Spiel(154) steht damit auch die Begegnung(X) fest.
Die Begegnung mit dem Vertauschten Heimrecht.
Auch das Los(2) könnte jetzt entfernt werden.
Beim Los(3) wird es jetzt schon interessanter.
Hier wird geprüft werden müssen, ob es als Spiel(2) eingesetzt werden kann, oder auch nicht.
Kann es nicht eingesetzt werden als Spiel(2), wird geprüft, ob es auf den 2. Spieltag, Spiel(10) gesetzt werden kann, oder aber auf den 3. Spieltag, Spiel(19).
Auch hier wieder die Begegnung mit dem vertauschten Heimrecht gesetzt werden und das Los(4) kann dem Top entnommen werden.
Los für Los würde das abgearbeitet werden.

Lösungsansatz A hat den Vorteil, das es weniger kompliziert ist.
Setzt natürlich vor raus, das ich bei dem Ligaschlüssel keine Fehler selber mache, die also eine der Regeln verletzen.
Möchte ich die Möglichkeit einräumen, das auch eine andere Anzahl als 18 Teams möglich ist, so müsste ich dafür jedes mal einen neuen Schlüssel anlegen.

Bei Lösungsansatz B bin ich mir nicht mal ganz sicher, ob das so überhaupt funktionieren kann.
Immerhin sind in einer Begegnung zwei Mannschaften, die eigentlich einzeln geprüft werden müssten.
Ich weiß nicht, ob das bei der Lösung so überhaupt geht.
Vorteil wäre, das mögliche Fehler beim Ligaschlüssel entfallen.
Die Formel könnte bei einer beliebigen geraden Anzahl von Teams funktionieren.

Lösungsansatz C wäre wohl auch Möglich, aber hier scheinen Fehler vorprogrammiert zu sein.
Jede Mannschaft wird in den Lostopf gesetzt und gezogen. Los(1) auf Heimspiel, Spiel(1).
Los(2) auf Auswärtsspiel, Spiel(2).
Hier wäre wohl auch eine ungerade Anzahl von Teams leichter zu realisieren.
Der erste Spieltag kann im Grunde ohne Prüfung und dann in den 18. Spieltag kopiert werden.
Hier würde dann das Heimrecht wieder wechseln.
Beim 2. Spieltag wird es dann schon schwieriger.
Hier müssten ja die Proben beim ziehen weiterhin beachtet werden.
Und hier scheinen dann am ehesten Probleme aufzutreten, das Spieltage nicht abgeschlossen werden können.
Nimmt man die Heim, Auswärtsregel weg, würde das das Problem entschärfen, auf kosten des Realismus.

Sicher wären noch weitere Möglichkeiten Vorstellbar, auch vielleicht mit mehreren Los Trommeln.
Inwiefern die gezeigten Lösungen optimal sind, da bin ich mir noch nicht sicher.
Zumindest für Lösungsansatz B und C fehlt mir auch momentan auch die Idee, wie ich das Umsetzen könnte.
Hier wäre ich für eine Hilfestellung auf jeden Fall sehr Dankbar.

Wichtig: Das Problem scheint sehr komplex zu sein und erfordert ganz sicher eine Menge Nachdenken + Zeit.
Ich kann also nicht wirklich erwarten, Hilfe zu bekommen.
Vor allem, wenn das Thema (Fußballmanager) nicht so interessant ist.
Hier werde ich mir vielleicht auch noch mal Überlegen, ob man das ganze nicht zu einer Sportsimulation macht.

Basketball, Feldhockey, Eishockey, Handball, Wasserball ua... wären ja theoretisch ebenfalls Möglich ein zu bauen.
Das würde das Spiel noch komplexer machen, wie es jetzt schon ist.
Es könnte den Kreis der Interessierten erweitern.

Ich wüsste wirklich nicht, an wen ich mich sonst wenden könnte.
Sicher wäre es nicht verkehrt, wenn so ein anspruchsvolles Projekt ein größeres Team hätte, wie nur meine Person.

Nachtrag: Ich habe jetzt doch den Basic CODE für mehrere Fußballmanager gefunden.
manche Spiele auf dem C64 kann man mit ESC einfach abbrechen.
Wenn ich jetzt den LIST Befehl eingebe, so wird mir, falls Vorhanden, der BASIC Code angezeigt.
Ich könnte diesen BASIC CODE als Text Datei abspeichern, da ich einen Emulator auf dem PC benutze.
Schaut man sich so einen alten Code an, so wird man regelrecht erschlagen.
Erst mal ist es wirklich die Urform des BASIC, was ich leider gar nicht mehr so kenne.
Amiga Basic kam ja damals schon ohne Zeilennummern aus glaube ich.

Die Frage die sich stellt. Wäre es einfacher den C64 CODE zu nehmen und ihn nach QBasic um zu schreiben, oder wäre das noch schwieriger?
Die Frage wäre noch mit einer rechtlichen Hürde verknüpft.
Der CODE ist ja geistiges Eigentum des Herstellers. Hier wäre das auch nur mit Erlaubnis des Herstellers, soweit möglich realisierbar.
Alles andere als eine legale Lösung käme für mich auch nicht in Frage.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.09.2011, 11:51    Titel: Antworten mit Zitat

Ich habe gerade ein logisches Problem. Wenn an jedem Tag 9 Spiele stattfinden und eine Mannschaft immer abwechselnd daheim und auswärts spielt, dann stelle ich mir das so vor:
erster Tag, erstes Spiel: A gegen B (Heimspiel für A)
erster Tag, zweites Spiel: C gegen D (Heimspiel für C)
usw.
am zweiten Tag müssen A und C dann Auswärtsspiele bestreiten und B und D Heimspiele.

A hat dann an allen ungeraden Tagen ein Heimspiel, B an allen geraden Tagen. Da C auch an den ungeraden Tagen ein Heimspiel hat - wann spielt dann A gegen C?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mathiaswolfgang



Anmeldungsdatum: 24.08.2011
Beiträge: 10

BeitragVerfasst am: 05.09.2011, 12:48    Titel: Antworten mit Zitat

@nemored
Da muss ich Dir natürlich recht geben.
Das heißt mit anderen Worten, das jedes Team in der Saison mindestens einmal die Regel Brechen müsste.
Die Regel ein Heimspiel und dann ein Auswärtsspiel.
Oder man hebt sie ganz auf, was eben dann zur Folge haben kann,
das Team A mehrmals Zuhause antreten darf und dann mehrmals auswärts antreten muss.
Da kommt man zu einem ganz entscheidenden Problem.
Einnahmen für das Team entstehen nur bei Heimspielen. (Zuschauer)
Ausgaben entstehen bei Heim und Auswärtsspielen (Gehälter+Reisekosten)
Ein Team was 4 Heimspiele als Beispiel hintereinander hat, müsste Gewinne abwerfen und hätte dadurch einen Vorteil.
Wenn ein Team 4 Auswärtsspiele hintereinander hat, dann entstehen nur kosten.
Das gleicht sich natürlich aus, spätestens am Ende der Saison.
Für den Transfermarkt wäre das Unfair, wenn gerade ein guter Spieler zu kaufen wäre, aber 4 Auswärtsspiele gerade absolviert sind.

EDIT: Habe das gerade mal bei einem Zufälligen Team mir angeschaut.
Paderborn hat abwechselnd Heim und Auswärtsspiele bis zum 13 Spieltag.
Am 14. und 15. Spieltag beide male ein Gastspiel.
In der Rückrunden dann am 31. und 32. Spieltag logischer Weise.
Aachen hat bereits am 2. und 3. Spieltag ein Gastspiel, dem zu folge am 19. und 20 Spieltag ein Heimspiel.
Das würde die Rechnung noch zusätzlich erschweren. weinen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.09.2011, 13:11    Titel: Antworten mit Zitat

Ich muss ganz ehrlich sagen, dass ich mich mit Fußball und speziell mit Fußballmanagern kaum auskenne. So weiß ich auch nicht genau, wie das mit dem Transfermarkt geregelt ist. Wenn beispielsweise der Transfermarkt am Ende der Hinspielrunde schließt, hat man immer ein Ungleichgewicht, weil bei 17 Spieltagen nie gleich viele Heim- wie Auswärtsspiele getätigt werden können.

Meine grobe Idee dazu wäre, für jeden Spieltag die Gegner auszulosen und dann für jede Begegnung festzustellen, welche Mannschaft bisher weniger Heimspiele hatte - diese darf dann zuhause spielen (bei Gleichstand wird gelost). Damit sollte (wenn ich richtig gerechnet habe) zumindest einmal ausgeschlossen sein, dass eine Mannschaft die ersten fünf Spiele auswärts bestreiten muss.

Ich versuche mal, dafür was zusammenzubasteln.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mathiaswolfgang



Anmeldungsdatum: 24.08.2011
Beiträge: 10

BeitragVerfasst am: 05.09.2011, 13:22    Titel: Antworten mit Zitat

Beim realen Fußball gibt es eine gewisse Periode wo Spieler gekauft und verkauft werden dürfen.
Das ist einmal zu Beginn der Saison und einmal zur Winterpause.

Im Soccermanager hat man darauf verzichtet.
Dort kann man an jedem Spieltag der Saison auf den Transfermarkt Spieler einkaufen und verkaufen.
Es werden immer 2 Spieler zufällig angeboten, von denen man max. einen kaufen kann, oder einen verkaufen kann.
Am 14. Spieltag kommt endlich der ersehnte Superstürmer und man hat vorher eine menge Auswärtsspiele gehabt und dadurch zu wenig Geld für diesen Transfer.

EDIT: Was ich gerne noch Fragen wollte. Ist von den Lösungsansätzen da etwas brauchbares bei, oder weniger?
Ich würde das mit weniger Teams natürlich erst mal Lösungsansatz A Probieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.09.2011, 13:32    Titel: Antworten mit Zitat

Wenn man an jedem Spieltag kaufen kann, wird das natürlich etwas schwierig mit der Ungleichverteilung. Ich denke aber, dass man sie mit meinem Vorschlag in Grenzen halten kann. Dummerweise habe ich gerade noch keinen guten Ansatz zur Mannschaftsaufteilung generell ...

Vielleicht wäre es doch geschickt, deinen Lösungsansatz A zu verwenden; du kannst dafür ja eine reelle Spielsaison als Vorlage nehmen. Anschließend würde ich die Nummern der Mannschaften in jeder Saison neu auslosen; also ob in der Saison z. B. Werder Bremen als Team4 oder als Team9 behandelt wird (edit: ich lese gerade, dass du das sowieso machen wolltest happy ).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mathiaswolfgang



Anmeldungsdatum: 24.08.2011
Beiträge: 10

BeitragVerfasst am: 05.09.2011, 13:58    Titel: Antworten mit Zitat

Ich muss den Soccermanager natürlich nicht 1:1 umsetzen.
Nicht versuchen eine 100% Kopie auf den PC um zu setzen.
Jeder Änderung würde natürlich ein neue Herausforderung stellen.

Zu Beginn der Saison gibt es einen Transfermarkt.
Dort werden eine Reihe von Spielern angeboten.
Jetzt kann jeder der Mitspieler für diese Spieler bieten.
Wer am meisten bietet, bekommt den Zuschlag.
Das gleiche könnte man zur Winterpause ebenfalls machen.
Ich bin mir aber nicht sicher, ob das wirklich etwas ändern würde für die Spieltagplanung.

Ich werde auf jeden Fall jetzt mal mit Lösungsansatz A probieren und das Ergebnis dann hier Posten.
Danke erst mal bis hierhin. happy

Code:
RANDOMIZE TIMER
CLS

OPEN "Vereine.txt" FOR INPUT AS #1

FOR I = 0 TO 17
  INPUT #1, Verein$(I)
NEXT I
CLOSE #1

DIM Wert(17)
 A = 1
 DO WHILE A < 17
 B = INT(RND * 17 + 1)
 FOR I = 1 TO A - 1
 IF B = Wert(I) GOTO Vorhanden
 NEXT
 Wert(A) = B
 A = A + 1
Vorhanden:
 LOOP
 FOR I = 1 TO 18
 PRINT Verein$(Wert(I))
 NEXT


Code:
INPUT #1, Verein$(I)
In dieser Zeile gibt er die Fehlermeldung "Index außerhalb des zulässigen Bereiches."
Ich weiß nur nicht warum. Kann mir da jemand bitte helfen?
Sind noch weitere Fehler vorhanden? Kann man den Code noch Optimieren?

Liebe Grüße,
Mathias
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MalteF



Anmeldungsdatum: 04.12.2008
Beiträge: 44

BeitragVerfasst am: 11.09.2011, 13:46    Titel: Antworten mit Zitat

Hast du denn vorher 17 Strings dimensioniert?

Like

Code:
dim verein$(1 to 17)


Gepostet ohne mir viel von deinem Code durchgelesen zu haben, also nicht sauer sein, falls du sowas schon wusstest.
Des weiteren viel Erfolg bei deinem (hoffentlich nicht überambitionierten) Projekt.


PS: 18 natürlich...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mathiaswolfgang



Anmeldungsdatum: 24.08.2011
Beiträge: 10

BeitragVerfasst am: 11.09.2011, 15:06    Titel: Antworten mit Zitat

Hallo MalteF,

ich bin natürlich in keiner Weise sauer, ich bin ganz im Gegenteil erfreut und Dankbar über jede Hilfe, die ich hier im Forum bekommen kann.
Ich habe schon sehr lange nichts mehr mit Basic gemacht.
Und selbst in besseren Tagen kannte ich nur einen sehr überschaubaren Befehlssatz für Basic.
Für eine kleines, niedliches Adressprogramm hätte es sogar gereicht,
habe sogar mal so etwas wie ein PacMan Spiel hinbekommen.
Von so kleinen Quiz Spielen mit viel PRINT und INPUT und GOTO Anweisungen möchte ich mal lieber nicht sprechen.

Mit einem Fußballmanager gleich wieder an zu fangen, der wohl praktisch das komplette Basic Paket von Nöten macht und dazu noch viel Praxiswissen?
Wir reden ja nicht mal von einem Fußballmanager von 2010 oder 2005, nicht mal von einem von 1990.
Es geht um einen Fußballmanager, wie er zu C64 Zeiten zwischen ca. 1984- ca. 1988 entstanden sein kann.
Diese Programme wirken doch sehr einfach bis primitive, aber es steckt trotzdem soviel dahinter.
Das es schwer werden würde, das war klar.
Ich spiele aber momentan mit dem Gedanken, es erst mal auf Eis zu legen.
Praxiswissen, was ich oben schon mal genannt habe sammeln, Wissen weiter vertiefen.
Und Stück für Stück das benötigte Wissen aneignen.

Liebe Grüße,
Zorni

Jetzt wird das Programm auch funktionieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 11.09.2011, 17:09    Titel: Antworten mit Zitat

Du beginnst mit A = 1 und arbeitest, solange A < 17 - also verteilst du nur 16 Teams. Ansonsten scheinst du nicht sicher zu sein, ob du jetzt von 0 bis 17 oder von 1 bis 18 rechnen willst.

INT(RND*17 + 1) erzeugt eine Zufallszahl von 1 bis 17. Für eine Zahl von 0 bis 17 brauchst du INT( RND*18 ).

Da ich kein großer Freund von GOTO bin (normalerweise würde ich EXIT nehmen, aber das gibt es unter QBasic soweit ich weiß nicht), hätte ich einen Vorschlag ohne GOTO:
Code:
FOR A = 0 TO 17
  DO
    B = INT(RND * 18)
    vorhanden = 0
    FOR I = 0 TO A - 1
      IF B = Wert(I) THEN vorhanden = 1
    NEXT
  LOOP UNTIL vorhanden = 0
  Wert(A) = B
NEXT

Hier sind alle Werte von 0 bis 17 dimensioniert.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
St_W



Anmeldungsdatum: 22.07.2007
Beiträge: 956
Wohnort: Austria

BeitragVerfasst am: 11.09.2011, 17:32    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
normalerweise würde ich EXIT nehmen, aber das gibt es unter QBasic soweit ich weiß nicht
sicher gibts EXIT DEF/DO/FOR/FUNCTION/SUB in QBasic - oder meintest du wohl eher CONTINUE?
_________________
Aktuelle FreeBasic Builds, Projekte, Code-Snippets unter http://users.freebasic-portal.de/stw/
http://www.mv-lacken.at Musikverein Lacken (MV Lacken)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 11.09.2011, 17:44    Titel: Antworten mit Zitat

Äh, ja. CONTINUE meinte ich lächeln Obwohl man mit EXIT auch was hätte machen können.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MalteF



Anmeldungsdatum: 04.12.2008
Beiträge: 44

BeitragVerfasst am: 12.09.2011, 19:30    Titel: Antworten mit Zitat

mathiaswolfgang hat Folgendes geschrieben:
Es geht um einen Fußballmanager, wie er zu C64 Zeiten zwischen ca. 1984- ca. 1988 entstanden sein kann.
Diese Programme wirken doch sehr einfach bis primitive, aber es steckt trotzdem soviel dahinter.
Das es schwer werden würde, das war klar.
Ich spiele aber momentan mit dem Gedanken, es erst mal auf Eis zu legen.
Praxiswissen, was ich oben schon mal genannt habe sammeln, Wissen weiter vertiefen.
Und Stück für Stück das benötigte Wissen aneignen.

Ging mir auch bei meinem Versuch einen Manager zu schreiben so, man hat die simple Oberfläche vor Augen und denkt sich das wär nicht viel, aber man übersieht leicht was dahinter steckt. Und dann steht man da mit 1-2 Wochen investierter Arbeit und kommt nicht weiter...
Deshalb geh ich jetzt immer bevor ich was neues anfange im Kopf durch: kann ich wirklich alles, wo gibts probleme und reizt mich die geschichte wirklich so sehr dass ich da mehrere wochen/monate arbeit reinstecken will..
Also viel Glück bei deinen kleineren Projekten, das ist sicher erstmal der beste Weg.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mathiaswolfgang



Anmeldungsdatum: 24.08.2011
Beiträge: 10

BeitragVerfasst am: 14.09.2011, 12:44    Titel: Antworten mit Zitat

@nemored Funktioniert einwandfrei. Ich habe den Schlüssel für den ersten Spieltag verwendet und es werden bei jedem Neustart andere Partien generiert. lachen <---so habe ich vor dem Monitor gesessen.
Vor allem verstehe ich den Code und dieses Wissen wird mir helfen.
Immerhin werde ich so einen Code in der Art nicht nur einmal in diesem Programm brauchen.
Ganz große Klasse, Danke. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz