Ich glaube, hier liegt das Missverständnis.
Natürlich gibt es Berechnungen im Hintergrund, aber das bedeutet nicht, dass sie in Echtzeit neu generiert werden.
(...)
Jede Frage ist ein Würfelwurf, die sich aus allen teilnehmenden Attributen (das Beispiel oben ist vereinfacht), PPM, Ausdauer, Wetter, Moral, Stimmung und Vorprägung durch Taktiken ergibt.
(...)
Ich glaube, ihr meint beide das gleiche.
Dass das ganze immer mit Faktoren versehene Wahrscheinlichkeitsberechnungen (=Würfelwurf) sind, ist doch völlig klar. Und dass die Grafik dann das Berechnungsergebnis abbildet/animiert. Wie denn auch sonst?
Ja, im Kern stimmt das schon, wir meinen dasselbe, aber der Unterschied liegt im Detail.
Es geht nicht darum, ob Wahrscheinlichkeiten berechnet werden, sondern wann und wie oft.
Viele glauben, das Spiel würde jede Aktion live neu kalkulieren , das ist eben nicht der Fall.
Das System greift auf vorher definierte Wahrscheinlichkeiten zurück, die durch Trigger und Anpassungen leicht verschoben werden.
Die 3D-Darstellung zeigt dann nur das Ergebnis dieser Berechnungen nicht den Rechenprozess selbst.
Das klingt nach einer Kleinigkeit, ist aber der entscheidende Unterschied zwischen einer echten Simulation und einer probabilistischen Darstellung.
Grundsätzlich meinen wir glaube ich ähnliches, aber es ist eben wenig bis gar nichts vordeterminiert. Klar gibt es Parameter, die einfließen, aber SI hat immer betont, dass alles dynamisch berechnet wird.
Schau dir einfach mal die Matchevents an.
Beispiel Schuss,- Passversuch:
=== 1️⃣ Kontext vorbereiten ===
# Spieler mit Ball
player = current_ball_holder
team = player.team
opponents = team.opposition
# Umgebungsdaten
pressure = calculate_opponent_pressure(player, opponents)
field_zone = get_pitch_zone(player.position)
team_shape = evaluate_team_shape(team)
fatigue = player.condition
weather = match.weather
# === 2️⃣ Optionen generieren ===
pass_targets = find_visible_teammates(player, team, field_zone)
# === 3️⃣ Für jeden möglichen Pass: Erfolgswahrscheinlichkeit schätzen ===
options = []
for target in pass_targets:
dist = distance(player.position, target.position)
angle = passing_angle(player, target)
# multifaktorielle Erfolgsfunktion
success_prob = (
player.passing * 0.05 +
player.technique * 0.04 +
player.vision * 0.03 -
pressure * 0.02 -
fatigue * 0.01 -
dist * 0.005 +
random.gauss(0, 0.02) # Zufallskomponente
)
risk = evaluate_risk(angle, dist, team_shape)
options.append((target, success_prob - risk))
# === 4️⃣ Wahrscheinlichkeitsverteilung normalisieren ===
weights = normalize_probabilities([opt[1] for opt in options])
chosen_target = weighted_random_choice(pass_targets, weights)
# === 5️⃣ Ausführung: Ballbewegung simulieren ===
ball_trajectory = simulate_ball_flight(player, chosen_target, weather)
intercept_chance = calculate_intercept_chance(opponents, ball_trajectory)
if random.random() < intercept_chance:
# Gegner fängt Ball ab
event = "interception"
new_possessor = select_interceptor(opponents)
else:
# Pass gelingt
event = "completed_pass"
new_possessor = chosen_target
# === 6️⃣ Ereignis an Match-Engine melden ===
update_match_state(event, new_possessor, ball_trajectory)
render_event(event)
1️⃣ Kontext Alle relevanten Daten (Position, Druck, Fitness, Wetter etc.) werden gesammelt.
2️⃣ Optionen Engine prüft, wer als Anspielstation in Frage kommt.
3️⃣ Erfolgsbewertung Für jede Option wird eine Wahrscheinlichkeitsfunktion berechnet. Attribute + Zufall bestimmen, wie riskant ein Pass ist.
4️⃣ Auswahl
Entscheidung erfolgt probabilistisch (nicht deterministisch).
5️⃣ Ausführung Physikalisches Ballmodell + Abfangwahrscheinlichkeit der Gegner.
6️⃣ State-Update Neues Ereignis („completed_pass“, „interception“) wird ins Matchlog geschrieben, 2D/3D-Visualisierung zeigt das Resultat.
Grober Richtwert, der damals, glaube ich genannt wurde. 20-30 Berechnungen pro Sekunde, pro einzelner Aktion.