Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

71

19.08.2008, 11:55

Ich glaub mit dem variablen Delta habt ihr (bzw. David) es euch nur unnötig kompliziert gemacht. Bei nem fixen Step wäre die Interpolation des Balls bei einem Treffer am Tor sehr einfach und die Bestimmung der Position des Paddels bei einer Kollision mit der Vereinfachung, dass sich dieses mit fester Geschwindigkeit bewegt, ebenfalls, weil das Paddel nicht sehr stark beschleunigt.
Aber jetzt funktionierts ja auch so... Meine KI würde zwar mit meiner Variante besser zurecht kommen, aber was solls:)

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

72

19.08.2008, 12:17

@Helmut:
So war es ja am Anfang, aber da gab es Probleme, wenn der Ball nach dem Abprallen sofort das Tor getroffen hat. Die Lösung mit dem variablen dt ist doch sehr elegant :)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

73

19.08.2008, 12:26

Na in dem Fall interpoliert man nicht mit der letzten Ballposition, sondern mit dem Punkt an der Wand.
Aber ich hab mir ja schon die Mühe gemacht, das bei mir einzubauen:)

Die Spiele meiner KI sehen übrigens ziemlich geil aus, das hätte ich nicht erwartet. Und es ist wohl doch nicht ganz so leicht, eine perfekt spielende KI zu schreiben, wie ich zunächst vermutete.. Ich fürchte fast, dass man das Verhalten des Gegners analysieren muss, um hier zu gewinnen...

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

74

19.08.2008, 14:20

Als "elegant" würde ich die variablen Zeitschritte nicht direkt bezeichnen. Immerhin sind sie die Ursache für Genauigkeitsprobleme, wie das von Florianx.
Darüber hinaus variiert der Einfluss der Dämpfung der Paddles je nach Dauer der Simulationsschritte (habe mir noch nicht die Mühe gemacht, den Unterschied mal genau zu beziffern, sollte sich aber in Grenzen halten).

Prinzipiell würde ich der Simulation mit konstanten Zeitschritten und linear interpolierten Zwischenschritten ausschließlich zur Kollisionserkennung zwischen Paddel und Ball den Vorzug geben. Das erspart zumindest die Zwischenschritte an den Banden (und damit den Einfluss einer Bandenkollision auf die Dämpfung der Paddlebeschleunigung !).
"Eleganter" würde der Code dadurch aber auch nicht werden. Aber das ist auch nur meine persönliche Meinung.

Trotzdem bin ich gegen jedes weiter rumdoktoren an der Simulation, wer will schon täglich seine KI auf geänderte Bewegungsberechnungen anpassen ?
Irgendwo sollte auch mal Schluss sein ;)

75

19.08.2008, 15:01

Zitat von »"S.Seegel"«


Trotzdem bin ich gegen jedes weiter rumdoktoren an der Simulation, wer will schon täglich seine KI auf geänderte Bewegungsberechnungen anpassen ?
Irgendwo sollte auch mal Schluss sein ;)
Ich persönlich musste es nicht... ich hatte von Anfang an einen genau interpolierten Punkt zur Berechnung herangezogen :P Aber eine Frage hätte ich da auch noch.

C-/C++-Quelltext

1
2
3
                // Gehalten!

                gs.ball_vx = -gs.ball_vx;
                gs.ball_vy -= gs.player_vy[0] * (0.95f + 0.1f * rnd.float_0_to_1());

Warum wird hier die Spielergeschwindigkeit von der Ballgeschwindigkeit abgezogen? Wäre es nicht sinnvoller diese zu addieren, um die Geschwindigkeit auf den Ball zu übertragen? Hat mich zumindest auch manchmal gewundert, wenn Ball und Spieler nach unten gehen und der Ball beim Aufprall dann nach oben weg fliegt.

Und nochwas... wenn ich meine Funktion rekursiv aufrufen möchte, kann ich davon ausgehen, dass meine Methode (my_pong) im Test genauso heißt? Ich könnte zwar auch den ganzen Quelltext nochmal kopieren, aber Rekursion würde mir da Tipparbeit ersparen :D

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

76

19.08.2008, 15:43

Zitat von »"Genion"«

... ich hatte von Anfang an einen genau interpolierten Punkt zur Berechnung herangezogen :P ...

Sorry, aber das ist Quatsch. Du kannst den Punkt nur und nur dann genau bestimmen, wenn du die exakt identische Berechnung durchführst, wie sie die Simulation durchführen wird.
Alles andere wird abweichen, wenn auch nur minimal und daher vernachlässigbar, aber es wird eben nicht exakt sein :p
Ob überhaupt und - falls ja - wie sich eine Abweichung auswirkt, hängt davon ab, was du im weiteren damit anfängst.

77

19.08.2008, 16:04

Zitat von »"S.Seegel"«

Zitat von »"Genion"«

... ich hatte von Anfang an einen genau interpolierten Punkt zur Berechnung herangezogen :P ...

Sorry, aber das ist Quatsch. Du kannst den Punkt nur und nur dann genau bestimmen, wenn du die exakt identische Berechnung durchführst, wie sie die Simulation durchführen wird.
Alles andere wird abweichen, wenn auch nur minimal und daher vernachlässigbar, aber es wird eben nicht exakt sein :p
Ob überhaupt und - falls ja - wie sich eine Abweichung auswirkt, hängt davon ab, was du im weiteren damit anfängst.
damit meinte ich eher physikalisch korrekt und nicht genau von dem spiel her (hab mich ein wenig ungenau ausgedrückt), wobei durch die umstellung des spiels sich diese werte nun auf 6 oder 7 nachkommastellen angepasst hat. Wobei ich ein wenig Ungenauigkeit auch aufs float anrechne ;)
Und Genauigkeit ist Definitionssache. In der Physik gilt alles unter 10% Abweichung als korrekt und genau, während die Mathematik zumindest bis zum allerletzten Rechenschritt (möglichst) nicht rundet.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

78

19.08.2008, 19:55

Darf man bei dem contest die standardlib benutzen (bzw. math.h) ?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

79

19.08.2008, 20:00

Ja, darfst du. Die Standartbibliothek ist nur bei "Kürze des Codes"-Aufgaben untersagt. Viel Spaß !

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

80

20.08.2008, 19:52

Irgendjemand schon so weit ? :lol:

Werbeanzeige