 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
mathiaswolfgang
Anmeldungsdatum: 24.08.2011 Beiträge: 10
|
Verfasst am: 24.08.2011, 17:57 Titel: Idee zu einem Fußballmanager gesucht (Spielberechnung) |
|
|
Hallo Community,
ich finde es Prima, das sich Leute mit der Sprache QBasic noch beschäftigen.
Die Sprache mag vielleicht veraltet sein, dadurch hat sie sich ja im Grunde aber nicht verschlechtert.
Wer früher mit QBasic seine Freude hatte und schöne Programme erschaffen konnte, kann das heute noch genauso gut tun.
Meine Frage hat aber nichts direkt mit QBasic zu tun und ich entschuldige mich, wenn mein erster Beitrag gleich im Falschen Thread sein sollte.
Es geht mir vor allem nicht um einen Code.
Sondern ich möchte gerne mit euch eine Überlegung anstellen, wenn mir das gestattet ist.
Ich möchte gerne wieder in QBasic Programmieren und mit einem eigenen Fußballmanager wieder rein finden.
Jetzt werden einige sicher die Augen verdrehen.
Kann ich auch verstehen. Es geht nicht um einen Fußballmanager wie von EA natürlich, es geht nicht um einen Fußballmanager wie Anstoss, es geht um ein C64 Spiel, was ich damals mit Freunden sehr gerne gespielt habe.
Der Name ist Soccer Master von Tim Wölki.
Das Spiel mag zwar von 198X sein, Grafik gibt es keine (außer ein wenig im Intro)
Die Möglichkeiten sind sehr begrenzt, aus heutiger Sicht sicher keine Alternative mehr.
Wenn ich den Code, oder Teile des Codes hätte, könnte ich es auf QBasic übertragen vielleicht, so muss ich praktisch bei 0 Anfangen.
Ich weiß nicht ob das Klug ist. Aber ich möchte Prgrammteil für Programmteil erschaffen und zum Schluß zusammenfügen.
Meine erste Frage ist nach dem Spiel selber. Auch wenn hier keine Fußballfans sind, denke ich das man das Problem sicher gut verstehen kann.
In einer Partie treten 2 Teams an. Diese bestehen aus 10 Feldspielern und einem Torwart.
Jetzt bekommt jeder Spieler einen Stärkewert, der von Stärke 1 (sehr schwach) bis Stärke 6 (Weltklasse) gehen kann.
Bei SoccerMaster gibt es keine sichtbaren Punkte, wie Ergebnisse zustande kommen. Viele Ergebnisse wirken schon recht unrealistisch, weil dort 5 und mehr Tore fallen.
Oft sind auch Mannschaften scheinbar über die Saison hin überlegen und schießen außergewöhnlich viele Tore.
Was Anstoss, oder EA Fußballmanager, BMH ua... das da passiert werde ich kaum umsetzen können. Das wird sicher sehr kompliziert sein.
Meine erste Idee dazu, und da sieht man dann gleich auch meine beschränkten Fähigkeiten mehr oder weniger in der Sprache:
Code: | RANDOMIZE TIMER
FOR Spielminute% = 1 TO 90
Heimteamprobe% = (RND * 1000)
Auswartsteamprobe% = (RND * 1000)
Probe% = 0
IF Heimteamprobe% <= 59 THEN Probe% = Probe% + 1
IF Auswartsteamprobe% <= 45 THEN Probe% = Probe% - 1
IF Probe% = 1 THEN Heimteamtore% = Heimteamtore% + 1
IF Probe% = -1 THEN Auswartsteamtore% = Auswartsteamtore% + 1
PRINT Spielminute%, Heimteamtore%, Auswartsteamtore%
NEXT Spielminute% |
Kurz den Code Erklärt. 59 und 45 stellen Gesammtstärke des Teams aus 11 Leuten da.
Diese werden mit einem W1000 Würfel verglichen.
Ist der Wert dabei <= der Teamstärke fällt ein Tor.
Ausnahme ist, wenn beide Teams jeweils eine Erfolgreiche Probe haben.
Das verhindert zumindest, das 2 Teams gleichzeitig ein Tor schießen.
Die Ergebnisse können gar nicht besonders toll sein, es wird gerade mal ein Zufallswert Übergeben und geprüft. Die Ergebnisse dürften daher sehr Zufällig aussehen.
Man dürfte auch mit einem recht schwachen Team Erfolgreich sein dürfen.
Es dürften auch rein theoretisch 11 Torhüter aufgestellt werden.
Die Überlegung ist, ein besseres System zu finden.
Eines was die Positionen wie Torwart, Abwehr, Mittelfeld und Sturm berücksichtigt. Das heißt die Stärkewerte der Spieler und die Positionen.
Beispiel, was ich noch nicht Ausprobiert habe.
Der Zufallswert wir auch dieses mal mit beiden Teams verglichen.
Welches Team% dabei gewinnt, bekommt den Ball.
Beispiel:
MittelfeldA wird mit MittelfeldH verglichen (Stärkewerte mit Probe).
Ist dabei MittelfeldA erfolgreich bekommt SturmA den Ball.
Jetzt wird SturmA mit AbwehrH verglichen (Stärkewert mit Probe)
Ist der SturmA erfolgreich wird noch eine Probe erfolgen, ob der Ball ins Tor geht oder nicht. Erschwert wird die Probe durch die Torwartleistung.
Ist bei einer der oben genannten Proben ein Misserfolg, so verpufft der Angriff und es geht weiter.
90 Minuten würden auch hier 90 Proben ergeben.
Es werden dann einige tausend Spiele geprüft werden müssen mit verschiedenen Stärkewerten um zu sehen wie die Partien ausgehen werden.
Vielleicht hat jemand noch eine bessere Idee.
Es geht mir nicht um einen Code, den möchte ich gerne selber noch finden.
Selbstverständlich sind Tipps und Tricks willkommen und sehr erwünscht .
Liebe Grüße,
Mathias
Zuletzt bearbeitet von mathiaswolfgang am 29.08.2011, 03:36, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 24.08.2011, 19:40 Titel: |
|
|
Willkommen an Board. Bloß mal ein grundsätzliche Dinge:
Wenn du Quellcode in den code-Tag packst, wird er besser lesbar.
Code: | FOR Spielminute% = 1 TO 90
RANDOMIZE TIMER |
ist keine gute Idee. RANDOMIZE legt nur den Startwert der Zufallsberechnung fest und sollte daher in aller Regel nur ein einziges Mal im Programm aufgerufen werden, sinnvollerweise zu Beginn. Durch das RND wird dann bereits zur nächsten Zufallszahl weitergeleitet. Also einfach umstellen:
Code: | RANDOMIZE TIMER
FOR Spielminute% = 1 TO 90 |
und das zweite RANDOMIZE ganz rausnehmen.
Es soll aber wohl vermutlich in Zeile 8 folgendermaßen heißen?
Code: | IF Auswartsteamprobe% <= 45 THEN Probe% = Probe% - 1 |
Grundsätzlich kann dein Algorithmus schon funktionieren; ob er in der Feinabstimmung taugt, kann ich so nicht beurteilen. Lass ihn einfach mal so 30, 40 mal laufen und schau, ob dir die Ergebnisse realistisch vorkommen. Wenn nicht, dann kannst du an den Zahlenwerten noch etwas schrauben. Ein SLEEP in jeder Spielminute fände ich jetzt etwas nervig, aber das musst du wissen.
Deinen zweiten Vorschlag (Torward/Abwehr/Mittelfeld/Sturm) kannst du im Prinzip ähnlich ansetzen. Dann wird das Tor nicht bei Probe% = 1 geschossen, sondern erst bei Probe% = 3 (oder so), und welche Werte verglichen werden, hängt vom Wert von Probe ab.
Soweit mal meine Gedanken dazu. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
mathiaswolfgang
Anmeldungsdatum: 24.08.2011 Beiträge: 10
|
Verfasst am: 24.08.2011, 21:51 Titel: |
|
|
Vielen Dank @nemored für Deine Ratschläge und die Hilfen.
In dem Code befanden sich auch leider einige Fehler, das muß natürlich nicht sein, wenn man etwas vorstellen möchte.
Das mit RANDOMIZE habe ich wirklich nicht gewusst, dachte das müsste vor jede Abfrage.
Ich werde das erst mal so fertig machen, Testen und dann hier noch mal Posten.
Wir haben ja gesehen, das man immer etwas verbessern kann.
Das SLEEP wurde gesetzt um einen Überblick zu bekommen, welche Zufallszahlen so fallen, wann die Tore geschossen werden.
Zum richtigen Testen der reinen Ergebnisse am Ende wird der rausgenommen.
Liebe Grüße,
Mathias |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 25.08.2011, 00:10 Titel: |
|
|
Ein RANDOMIZE TIMER vor jedem RND kann sogar kontraproduktiv sein, weil - mehrfach in derselben Sekunde aufgerufen - der Startwert immer wieder auf den gleichen Wert gesetzt wird, du also innerhalb dieser Sekunde immer dasselbe RND-Ergebnis bekommst. Ist allerdings ein Fehler, der häufiger gemacht wird. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
mathiaswolfgang
Anmeldungsdatum: 24.08.2011 Beiträge: 10
|
Verfasst am: 29.08.2011, 03:32 Titel: |
|
|
Code: | RANDOMIZE TIMER
FOR Spielminute% = 1 TO 1000
Heimteamprobe% = (RND * 1000)
Auswartsteamprobe% = (RND * 1000)
Probe% = 0
IF Heimteamprobe% <= 63 THEN Probe% = Probe% + 1
IF Auswartsteamprobe% <= 55 THEN Probe% = Probe% - 1
IF Probe% = 1 THEN Ballbesitz% = Ballbesitz% + 10
IF Probe% = -1 THEN Ballbesitz% = Ballbesitz% - 10
WHILE Ballbesitz% = 100
Heimteamtore% = Heimteamtore% + 1
Ballbesitz% = 0
WEND
WHILE Ballbesitz% = -100
Auswartsteamtore% = Auswartsteamtore% + 1
Ballbesitz% = 0
WEND
PRINT Ballbesitz%; Heimteamtore%; Auswartsteamtore%
NEXT Spielminute%
|
Eine Weiterentwicklung des ersten Codes so zu sagen.
Eine Erfolgreiche Probe von Heim oder Auswartsteam führt jetzt nicht mehr sofort zu einem Torerfolg.
Die Ballposition (Ballbesitz) verschiebt sich auf dem Spielfeld , wobei 0 die Mittellinie (Anstoßkreis) darstellt, +100 bzw -100 Die Tore der jeweiligen Mannschaften.
Ballbesitz = 0 Anfangszustand (Ball befindet sich im Mittelfeld)
Probe für Heimteam erfolgreich +10 (Ball befindet sich in der Hälfte der Auswartsteam +10.
Hat jetzt Auswartsteam eine erfolgreiche Probe, verschiebt sich die Ballposition wieder ins Mittelfeld (Anstosskreis) |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 29.08.2011, 10:09 Titel: |
|
|
Code: | IF Heimteamprobe% <= 63 THEN Probe% = Probe% + 1
IF Auswartsteamprobe% <= 55 THEN Probe% = Probe% - 1
IF Probe% = 1 THEN Ballbesitz% = Ballbesitz% + 10
IF Probe% = -1 THEN Ballbesitz% = Ballbesitz% - 10 |
kannst du jetzt auch kürzen auf
Code: | IF Heimteamprobe% <= 63 THEN Ballbesitz% = Ballbesitz% + 10
IF Auswartsteamprobe% <= 55 THEN Ballbesitz% = Ballbesitz% - 10 |
Wenn beide Proben erfolgreich sind, gleicht sich das wieder aus und der Ball bleibt auf seiner Position.
Zu folgendem:
Code: | WHILE Ballbesitz% = 100
Heimteamtore% = Heimteamtore% + 1
Ballbesitz% = 0
WEND |
Warum nimmst du WHILE...WEND und nicht auch IF?
Code: | IF Ballbesitz% = 100 THEN
Heimteamtore% = Heimteamtore% + 1
Ballbesitz% = 0
END IF |
Für die Idee mit verschiedenen Mannschaftspositionen - Sturm spielt gegen Abwehr usw. - habe ich hier mal ein Beispiel zusammengestellt. Die erste Zeile '$LANG "fblite" brauchst du nicht, die ist nur für das Compilieren mit FreeBASIC (Hinweis an FB-Nutzer: -lang qb scheint da einen Bug zu haben). An der Variablen ZugProMinute% kannst du regeln, wie viele Berechnungen durchgeführt werden sollen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
mathiaswolfgang
Anmeldungsdatum: 24.08.2011 Beiträge: 10
|
Verfasst am: 02.09.2011, 14:48 Titel: |
|
|
Ich habe Deinen Code jetzt ein paar mal mit unterschiedlichen Werten getestet und bin im großen und ganzen wirklich begeistert.
Das hätte ich mir so nicht vorstellen können, das das so gut klappt.
So gut wie Du das machst, da möchte ich dann auch irgendwann mal hinkommen. Halbwegs jedenfalls und mir ist bewusst, da steckt viel Arbeit und Training hinter, wie beim Fußball und allen anderen Dingen auch.
Wie gut er letztendlich ist, das wird sich erst im Ligaalltag zeigen.
Bei 1000 Begegnungen wird auch die bessere Mannschaft am Ende mehr Tore schießen. Und trotzdem kann auch eine schwächere Mannschaft auch mal gegen eine stärkere gewinnen.
Das scheint gerade beim Soccermanager weniger der Fall zu sein.
Spannende Begegnungen gibt es dort deutlich weniger.
Selbst wenn jetzt mit der Einstellung ein paar Tore mehr fallen, wie es in der Liga üblich ist, würde ich das Okay finden.
Ich werde mich jetzt den anderen Punkten widmen und Stück für Stück das ganze fertig stellen.
Dann wünsche ich allen ein schönes Wochenende.
Liebe Grüße,
Mathias |
|
Nach oben |
|
 |
|
|
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.
|
|