BPS #6: Synchrone Bewegung

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Xeres

Moderator

Betreff: BPS #6: Synchrone Bewegung

BeitragMi, Apr 06, 2011 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image

Aufgabenstellung:

Aufgabe: Erstelle ein 320x240 Pixel grosses Grafikfenster, auf dem 10 Kreise (je 20x20 Pixel) bewegt werden.
Bedingungen:
Stufe 1:

  • Die Kreise müssen an zufälligen Startpositionen erstellt werden
  • Ihre Geschwindigkeit in x- und y-Richtung liegt zufälligerweise im Bereich -1.0 bis 1.0 (Fliesskommazahlen)
  • Die Kreise haben verschiedene, zufällige Farben
  • Sie prallen von den Fensterränden ab

Stufe 2:

  • Kreise, die sich zu nahe kommen (berühren) tauschen ihre Geschwindigkeiten

Stufe 3:

  • Die Bewegungen sind synchronisiert. Das heisst: Alle Bewegungen werden fix 50 mal pro Sekunde ausgeführt. Lies dir dazu die Beiträge in der Online-Hilfe zu CreateTimer und WaitTimer durch.
  • Optional: Wird das Programm (z.B. durch ziehen des Fensterrahmens) angehalten, werden "verpasste" Frames nachgerechnet.


Tipps:

  • Arbeite die Aufgabe Stufe um Stufe ab, dann kommst du sicher zum Ziel.
  • Benutze entweder Dim oder Type zum Speichern der Bälle.
  • Arbeite mit Function. Erstelle Funktionen zum Erstellen der Kreise, zum Bewegen und zum Zeichnen.
  • Die Distanz zwischen zwei Kreisen kann mit dem Satz des Pythagoras ermittelt werden.
  • Ziehe die Timer-Funktionen (siehe CreateTimer und WaitTimer) zur Hilfe, um die Bewegungen zu synchronisieren. Ultra-Tipp: Benutze den Rückgabewert von WaitTimer.


Zeit:
Ihr habt zwei Wochen Zeit um eure Programme zu schreiben. Bitte postet Eure fertigen Codes erst in zwei Wochen, wenn der Auswertungsthread erstellt wird, dort hinein.
Fragen könnt ihr hier natürlich jederzeit stellen.

RELATED TOPIC: Auswertungsthread
RELATED TOPIC: Die Beginner's Practice Series (BPS)

~EDITIERT~

Der Bewegungen-Nachrechnen-Teil ist zum Erfüllen der Aufgabe nicht notwendig, deshalb habe ich mir erlaubt, ihn als optional zu kennzeichnen.
mfG, Holzchopf
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Di, Dez 20, 2011 5:52, insgesamt einmal bearbeitet

ToeB

BeitragDo, Apr 07, 2011 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schönes Thema, habe sogar grade einen Code dazu geschrieben Very Happy

Muss dieser denn Kommentiert sein ? Wenn ja mach ich für die Abgabe noch welche rein !


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Xeres

Moderator

BeitragDo, Apr 07, 2011 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte Kommentieren; man soll ja daraus etwas lernen können, z.B. warum du es genau so gemacht hast.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

BlitzMoritz

BeitragFr, Apr 08, 2011 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich seh' zu den umherfliegenden Seifenblasen kein prinzipiell neues Problem, bis auf den Unterschied, dass die Kreise nicht platzen, sondern sich gegenseitig abstoßen. Ist das so gemeint?

Zitat:
Wird das Programm (z.B. durch ziehen des Fensterrahmens) angehalten, werden "verpasste" Frames nachgerechnet.
Wie ernst ist diese Forderung zu interpretieren? Heißt das, dass nach einem längeren Programmfluss-Halt sämtliche Wege und Kollisionen zurückberechnet werden sollen? Dass also beispielsweise Kreis A vor fünf Minuten mit Kreis B zusammengestoßen ist, die Richtung getauscht hat, 10 Sekunden später mit Kreis C zusammengestoßen ist, der vorher schon mit Kreis D und E zusammengestoßen und die Richtung getauscht hat. usw. usw. usw.? Das würde in der Tat sehr anspruchsvoll werden!

Holzchopf

Meisterpacker

BeitragFr, Apr 08, 2011 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Ziel der BPS ist ja, etwas zu lernen. Vielleicht mag das anspruchsvoll sein, vielleicht hast du aber auch eine nicht ganz ausgefeilte Vorstellung davon, wie man das einfach umsetzen könnte.

Wer also an Stufe 3 scheitert, möge doch einfach zwei Wochen lang neugierig auf den Auswertungsthread warten, wo eine mögliche Lösung präsentiert wird, von der man lernen kann.

mfG
Holzchopf
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

BlitzMoritz

BeitragSa, Apr 09, 2011 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast Recht. Smile
Das ist ja wirklich recht einfach, ich habe mir nur bisher um solche Programmstops von außen keine großen Gedanken gemacht. Ich sitze gerade an Linux und da bleibt die Graphik bzw. der Programmfluss beispielsweise gar nicht stehen, wenn man das Programmfenster zieht. Aber ich kann mich erinnern, dass mir das unter Windows schon passiert ist. Woran liegt dieses unterschiedliche Verhalten eigentlich? An OpenGL und DirectX oder an Konfigurationen in den Systemeinstellungen?

skey-z

BeitragSa, Apr 09, 2011 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir auch erst viele Gedanken gemacht, wie das wohl funktionieren könnte, aber im Endeffekt hat Xeres schon einen guten Tipp gegeben, was die Timerticks angeht.

Die implementation hat keine 5 minuten gedauert.

Ich habe nur im Moment noch Probleme mit der Kollission, obwohl ich auch den Satz des Pythagoras benutze, überschneiden sich die Bälle des Öfteren.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

BlitzMoritz

BeitragSa, Apr 09, 2011 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z hat Folgendes geschrieben:
Ich habe nur im Moment noch Probleme mit der Kollission, obwohl ich auch den Satz des Pythagoras benutze, überschneiden sich die Bälle des Öfteren.
Jaja, dann hängen sie aneinander und zappeln und kommen nicht mehr voneinander los Confused , ich kenne das und vermute, jeder Programmierer hat schon einmal in seinem Leben über dieses Phänomen geflucht. Wink
Die Sache ist nämlich die: die Entscheidung, ob zwei Kreise ihre Richtung austauschen sollen, muss schon noch ein bisschen tiefer bzw. vorausschauender untersucht werden. Denn falls zwei Kreise aus diversen Gründen bereits soweit aufeinander liegen, dass eine einmalige Bewegung nicht ausreichen würden, wieder genügend Abstand voneinander zu gewinnen, tauschen sie von nun an ständig ihre Richtungen aus und bleiben trotzdem zitternd aneinanderkleben. Mehr sage ich jetzt nicht ...

skey-z

BeitragSa, Apr 09, 2011 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß, worauf du hinaus willst, aber ich habe es nun etwas anders gelöst, es kann zwar noch vorkommen, dass sich 2 Bälle verhaken, aber das ziemlich selten.

Mal schauen ob ich es noch "schaffe" anders zu regeln, ansonsten bin ich schon sehr zufrieden Wink
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter

ToeB

BeitragSo, Apr 10, 2011 0:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab es mit einem Ziemlich einfachem aber doch effizientem "System" hinbekommen, dazu mehr bei meiner Abgabe Wink

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

FireballFlame

Betreff: Re: BPS #6: Synchrone Bewegung

BeitragSo, Apr 10, 2011 1:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:
Stufe 2:

  • Kreise, die sich zu nahe kommen (berühren) tauschen ihre Geschwindigkeiten

Das halte ich für eine ziemlich ungenaue Aufgabenstellung, möchte ich mal erwähnen.
Ich lese da z.B. überhaupt nichts von "Abstoßung", aber andere scheinen das wohl anders zu interpretieren.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

BlitzMoritz

BeitragSo, Apr 10, 2011 9:31
Antworten mit Zitat
Benutzer-Profile anzeigen
skey-z hat Folgendes geschrieben:
... es kann zwar noch vorkommen, dass sich 2 Bälle verhaken, aber das ziemlich selten.

Die Sicherheit und Zuverlässigkeit der Kollisionsuntersuchung wird sich rasch zeigen, wenn man einmal nicht 10, sondern 100 Bälle nimmt. Probier's aus ....

FireballFlame hat Folgendes geschrieben:
Xeres hat Folgendes geschrieben:
Stufe 2:
  • Kreise, die sich zu nahe kommen (berühren) tauschen ihre Geschwindigkeiten
Das halte ich für eine ziemlich ungenaue Aufgabenstellung, möchte ich mal erwähnen.
Ich lese da z.B. überhaupt nichts von "Abstoßung", aber andere scheinen das wohl anders zu interpretieren.

Wieso ist die Aufgabenstellung ungenau? Im Gegenteil: sie gibt einem ein (zugegebenen) simples Prinzip vor, wie zwei Kreise sich verhalten sollten, wenn sie kollidieren. Natürlich ist ein realistisches Abstoßungsverhalten wesentlich komplizierter, ich habe 'mal einen Physik-Dozenten über die Vorausberechnung zweier kollidierender Billiardkugeln gefragt, und der behauptete, dass dies angesichts vieler Faktoren wie Geschwindigkeit, Drehung etc. zu den anspruchsvollsten Themen der Physik gehören würde.

Übrigens: Da hier ja endlich einmal mehrere verschiedene Lösungsbeiträge zustande zu kommen scheinen ( Question ), bin ich gespannt auf die Ergebnisse. Smile

FireballFlame

BeitragSo, Apr 10, 2011 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm?
Ich bin nicht derjenige, der als erstes von "Abstoßung" gesprochen hat, du warst es sogar.
Ich hingegen lese aus der Formulierung "Geschwindigkeiten tauschen" nicht so wirklich heraus.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

ToeB

BeitragSo, Apr 10, 2011 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, musst du ja auch nicht, es steht ja nur da : Geschwindigkeit Tauschen. Das ist die Aufgabe, also ist sie auch so zu lösen. Warum du das ganze jetzt für Uneindeutig hältst, versteh deshalb ich nicht so ganz. Wer schon ein wenig Erfahrung hat im Programmieren oder Grundkenntnisse in Physik besitzt, dem sollte beim Lesen schon auffallen dass es dann wie eine "Abstoßung" aussieht, deswegen auch der Begriff hier.


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

FireballFlame

BeitragSo, Apr 10, 2011 17:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Nochmal. Wo ist da die Abstoßung, wenn 2 Dinge ihre Geschwindigkeiten tauschen?
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Xeres

Moderator

BeitragSo, Apr 10, 2011 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht sollte es Geschwindigkeitsvektoren heißen? Wenn man nur die Beträge tauscht, gibt es sicherlich einen anderen Effekt.
Ob nun gerichtet oder ungerichtet ist aber nicht wirklich ein Problem, oder?
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

skey-z

BeitragSo, Apr 10, 2011 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzMoritz hat Folgendes geschrieben:

Die Sicherheit und Zuverlässigkeit der Kollisionsuntersuchung wird sich rasch zeigen, wenn man einmal nicht 10, sondern 100 Bälle nimmt. Probier's aus ....


Mhh, ja was soll man sagen, du hast natürlich recht, aber in so einem kleinen Fenster sind 100 Bälle natürlich sehr über Prportioniert Wink

ToeB

BeitragSo, Apr 10, 2011 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@Fireball :

Nochmal. Du brauchst für eine 2D Bewegung 2 Geschwindigkeiten, in X und in Y Richtung. Wenn diese Geschwindigkeiten mit dem Kollidierenden Ball getauscht werden, dann fliegt Ball 1 wie Ball 2 weiter und umgekehrt, sieht auf dem Bildschirm also aus wie eine Abstoßung.


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

FireballFlame

BeitragSo, Apr 10, 2011 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, das erklärt, was ihr meintet.
Ich finde aber, das bestätigt das mit der Mehrdeutigkeit, ich hatte es nämlich anders verstanden ("Geschwindigkeit" unabhängig von der Richtung)
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group