## Ziel der Anwendung Die Aufgabe verbindet spielerisches Ausprobieren mit physikalischem Denken und macht so grundlegende Ideen der Mechanik – insbesondere den Zusammenhang zwischen Kraft und Bewegungsänderung – unmittelbar erfahrbar. Durch Experimentieren mit Stärke, Richtung und Zeitpunkt der Kraft lassen sich eigene Strategien entwickeln und physikalische Zusammenhänge intuitiv entdecken. ## Hinweise zur Bedienung - Wähle in der Karte „Parameter“ einen Level. Zu Beginn solltest du mit den einführenden ersten drei Leveln starten. - Alle nötigen Informationen zum Ablauf des Spiels findest du auf der Karte „Spielregeln“. - Durch Klick auf das Spielfeld selbst kannst du Stärke und Richtung der Kraft variieren. Ein Klick in die Kugel setzt den Betrag der Kraft exakt auf null. - In manchen Leveln bewegt sich die Kugel auf einer grauen Bahn. Verlässt der Mittelpunkt der Kugel die Bahn, stürzt sie ab. - Sind in einem Level Sterne vorhanden, musst du zuerst alle einsammeln, erst dann erscheint das Ziel. - Du kannst dir ein Stroboskopbild mit ``1,0unit(fps)`` für deine Bewegung inklusive der Kraftvektoren anzeigen lassen. Die einzelnen Bilder liegen über allen anderen Objekten und können diese teilweise verdecken. Daher ist es sinnvoll, das Stroboskopbild erst nachträglich (wenn die Bewegung abgeschlossen ist) zu aktivieren. - Über den Schalter „Geschwindigkeit im Diagramm“ kannst du dir den zeitlichen Verlauf des Geschwindigkeitsbetrags anzeigen lassen. So siehst du direkt, wie sich die Geschwindigkeit ändert, solange eine Kraft wirkt, und dass sie ohne Kraft konstant bleibt. Die Werte werden auch aufgezeichnet, während das Diagramm ausgeblendet ist. - Der Demo-Modus ist nicht für alle Level verfügbar und zeigt nicht den idealen Weg. - Falls du einen Level direkt verlinken möchtest, kannst du diesen im URL-Parameter `level` angeben. Ist zusätzlich der Parameter `hideLevels=true` angegeben, so werden die anderen Level sowie der Button „Nächster Level“ nicht angezeigt. Der folgende Link zeigt z.B. direkt zum ersten Level: [https://mintapps.org/html/mint-force.html?hideLevels=true&level=1](https://mintapps.org/html/mint-force.html?hideLevels=true&level=1). - In Level 0 steht zusätzlich eine „Spielwiese“ zur Verfügung, in der du ohne Hindernisse experimentieren kannst. ## Implementierung Die Bewegung der Objekte wird numerisch mittels des Euler-Verfahrens in kleinen Zeitschritten ``dt`` berechnet. Die Zeitschritte ``dt`` sind abhängig von der Rechenleistung des Clients (höchstens ``0,1unit(s)``), wodurch auch im Demo-Modus kleine Zeitvariationen zustande kommen. Auszug zur Berechnung der Spielball-Bewegung: ~~~ ball.vx += (Fx / ball.m) * dt; ball.vy += (Fy / ball.m) * dt; ball.x += ball.vx * dt; ball.y += ball.vy * dt; ~~~ In kraftfreien Bereichen und während des Absturzes entfallen die ersten beiden Zeilen, die Kugel bewegt sich dann geradlinig gleichförmig weiter. Definition der Level, am Beispiel des Levels „Gut Zielen“: ~~~ name: 'aim-well', i18n: 'Force.level-aim-well', start: { x: 30, y: 5 }, player: { r: 2 }, force: { max: 20 }, goals: [ { x: 90, y: 8, r: 8 } ], obstacles: [ { x: 0, y: 0, w: 2, h: 100, kill: true }, { x: 2, y: 98, w: 100, h: 2, kill: true }, { x: 98, y: 0, w: 2, h: 100, kill: true }, { x: 40, y: 0, w: 42, h: 60, kill: true }, { x: 25, y: 35, w: 16, h: 15, kill: true } ], zeroforceregions: [ { x: 82, y: 0, w: 16, h: 60 } ], possibleWay: [ { t: 0, force: 20, alpha: 110 }, { t: 3, force: 20, alpha: 0 }, { t: 6, force: 20, alpha: 290 }, { t: 9, force: 20, alpha: 200 }, { t: 12, force: 20, alpha: 270 }, { t: 14, force: 0, alpha: 270 } ] ~~~ Beispiel für eine Bahn mit Sternen (Level „Rennstrecke“): ~~~ track: { width: 14, angle: 0, parts: [ { length: 60 }, { radius: 17.5, angle: 180 }, { length: 40 }, { radius: 17.5, angle: -180 }, { length: 55 } ] }, stars: [ { x: 40, y: 15 }, { x: 87.5, y: 32.5 }, { x: 50, y: 50 }, { x: 12.5, y: 67.5 }, { x: 60, y: 85 } ] ~~~ Koordinatenraum für x- und y-Koordinate jeweils 0 ... 100, der Ursprung liegt links unten. Winkel werden in Grad angegeben, 0° zeigt nach rechts, positive Winkel drehen gegen den Uhrzeigersinn. name: interner Name des Levels i18n: Übersetzungsschlüssel für den Anzeigenamen des Levels (wird in die jeweilige Sprache übersetzt) start: Definition der Startposition goals: Liste aller Ziele (muss angelegt werden, kann aber leer bleiben) - x, y: Position - r: Radius obstacles: Liste aller rechteckigen, ortsfesten Hindernisse (optional) - x, y: Position der linken unteren Ecke - w, h: Breite und Höhe - kill: Art der Kollision, falls `true` darf dieses Hindernis **nicht** berührt werden (optional) balls: Liste aller kreisförmigen, beweglichen Hindernisse (optional) - x, y: Position - r: Radius (Masse proportional zu ``r^2``) - vx, vy: Anfangsgeschwindigkeit (optional) - kill: Art der Kollision, falls `true` darf dieses Hindernis **nicht** berührt werden (optional) possibleWay: Programmierung eines Demo-Modus, mit dem das Level vorgeführt werden kann (optional) - t: Zeit in s - force: Betrag der Kraft in mN - alpha: Winkel des Kraftvektors player: Anpassung des Spielballs (optional) - r: Radius des Spielballs (Masse proportional zu ``r^2``) force: Einstellungen der Kraft (optional) - max: maximal mögliche Kraft in mN (Standard: 100) - initialValue: Betrag der Kraft beim Start in mN (Standard: halbe Maximalkraft) - initialAlpha: Richtung der Kraft beim Start (Standard: 90°) zeroforceregions: Bereiche, in denen die Kraft immer Null ist (optional) - x, y: Position der linken unteren Ecke - w, h: Breite und Höhe track: Bahn, die die Kugel nicht verlassen darf (optional); verlässt der Mittelpunkt der Kugel die Bahn, stürzt sie ab - width: Breite der Bahn - x, y: Startpunkt der Mittellinie (optional, Standard: Startposition) - angle: Anfangsrichtung (optional, Standard: 0°) - parts: Liste der Teilstücke, die nahtlos aneinander anschließen: `{ length }` für eine Strecke, `{ radius, angle }` für einen Kreisbogen (positiver Winkel = Linkskurve, negativer Winkel = Rechtskurve, auch mehr als 360° möglich) stars: Sterne, die alle eingesammelt werden müssen, bevor das Ziel erscheint (optional) - x, y: Position - r: Radius (optional, Standard: 2,5) > Wenn du eine Idee für einen neuen Level hast, freuen wir uns über Feedback.
  • Kraftstoßrennen, Lehrplan PLUS Bayern: Die Schüler/-innen steuern in mehreren Parcours eine Kugel, indem sie Betrag und Richtung der auf die Kugel wirkenden Kraft einstellen. Dabei analysieren sie den Zusammenhang zwischen Kraft und Bewegung und erlernen spielerisch die ersten beiden Gesetze von Newton.