• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Aufgabenstellung] Programmierwettbewerb Nr 4

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
EINLEITUNG

Mondlandung / Moon Lander / Lunar Lander

Das grundlegende Prinzip dieses Spieles besteht darin, daß eine Mondlandefähre sicher auf einer Oberfläche landen muß. Das bedeutet, die Fähre ist einerseits der Gravitation ausgesetzt, andererseits kann mit einem Triebwerk
eine entgegengesetzte Beschleunigung erzeugt werden. Beim Auftreffen auf den Grund darf die Fähre eine gewisse Geschwindigkeit nicht überschreiten, sonst zerschellt sie.

Die primitivste Form des Spieles wäre die alleinige Anzeige der Höhe (z.B. Konsole) und die Steuerung über eine einzige Taste.
Die Angabe der Geschwindigkeit wäre dann schon die 2. Stufe, die 3. Stufe eine Tankanzeige.

Die folgenden (ab Punkt 2 optionalen) Anforderungen sollen noch ohne Graphik umsetzbar sein:

1) Die Geschwindigkeit wird berechnet aus der Gravitationsbeschleunigung und der Schubbeschleunigung.
2) Wie 1,aber der Treibstoff ist begrenzt.
3) Wie 2., aber das Ziel liegt seitlich versetzt. Mit weiteren Steuertasten muß die Rakete links/rechts gedreht werden.
4) Wie 3., aber die Rakete wird durch seitliche Steuerdüsen gedreht. Es gibt also Winkelbeschleunigungen, somit muß eine Drehbewegung auch jeweils wieder durch Gegenbeschleunigung gebremst werden. (3. ist vereinfachte Drehbewegung, 4. physikalisch realistischer)
5) Wie 4, aber es gibt zufallsgesteuerte Winde, die Kraft auf die Rakete ausüben.

Bei einer graphischen Umsetzung gäbe es noch folgenden Schwierigkeitsstufe umzusetzen:

6) Wie 5, aber die Landefläche besteht nicht aus der durchgehenden Grundlinie, sondern zu Beginn einer Runde muß dynamisch eine hügelige Oberfläche mit einer oder mehreren kleinen Landezonen generiert werden.

Alles weitere bleibt den Teilnehmern überlassen. Überrascht uns gerne mit originellen Features, egal ob sie das Spiel nur schöner machen, oder aber zusätzliche Schwierigkeitsgrade hinzufügen!

AUFGABE: Erstelle eine spielbares Programm, mit oder ohne Graphik. Optimalerweise ohne Aufwand für Standardnutzer (Windows) ausführbar. (Diskussionen, ob das die richtige Definition von Standardnutzer ist, gerne in einem anderem Thread)


VERÖFFENTLICHUNG:
Offen. Entweder kann der Doc nach seinem Urlaub darlegen, ob und wie das mit dem ngb-Git-Acc funktioniert oder schlimmstenfalls diskutieren wir. ;)

ENDE: 30.04.2019


Alle Klarheiten beseitigt?






Viel Spaß KaPiTN
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
346
Ich mache mit!

Und würde sehr gern Common Lisp dafür benutzen und suche gerade noch ein geeignetes Graphics Framework dafür. :-)
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
  • Thread Starter Thread Starter
  • #3
#MeToo

C# mit GDI+
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
JS mit Phaser3 und falls ich weit genug komme noch Rails als Backend.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich denke ich werde mich mit p5 daran wagen. Also Javascript. Damit kann ich, falls ich soweit komme, das mit der Grafik (gnarf :D) einfacher umsetzen.

Diskutieren wir hier unseren Fortschritt oder erst wenn Abgabetermin ist, damit man sich nichts abguckt?
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Bin gespannt! Phasor3 wirkt auf mich noch etwas unzugänglich, aber insgesamt hoffe ich, mit relativ wenige aufwand/code ein ganz gutes Fundament hinzubekommen. Kenne bisher gar keine entsprechende JS lib und bin daher sehr neugierig auch auf P5 so du denn dazu kommst :-).

Diskutieren wir hier unseren Fortschritt oder erst wenn Abgabetermin ist, damit man sich nichts abguckt?
Doch, ich hoffe das wir uns offen austauschen werden. Es ist schließlich ein rein sportlicher Wettkampf. Ich fände auch generell einen 'Plausch-Thread' ganz gut.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
bin daher sehr neugierig auch auf P5 so du denn dazu kommst :-).
Ich setze gerade zumindest schonmal das grundlegende Projekt mit ein paar Checkboxen auf.

Doch, ich hoffe das wir uns offen austauschen werden. Es ist schließlich ein rein sportlicher Wettkampf.
Ich bin aktuell noch nicht ganz sicher, wie ich das machen möchte mit den verschiedenen Schwierigkeitsstufen. Ich habe mir gedacht, dass ich in einem Optionsfeld Checkboxen vom Spieler setzen lasse, welche Sachen aktiv sein sollen, also ob mit Treibstoff-Tank oder ohne, mit Wind oder ohne. Und dafür vergebe ich dann irgendwie Punkte bzw einen Multiplikator oder sowas.
Aber da schaue ich dann mal, wie weit ich so komme. Ich werde zumindest gleich mal ein Github-Repo für mich öffnen, wo ein paar Commits reinkommen werden.

Wie sieht es aus mit Dokumentation - Englisch oder Deutsch? Hat da jemand eine Vorliebe? Ich denke, ich würde sonst für das Projekt bei Deutsch bleiben, dann muss ich auch nicht sowas wie "Schubumkehr" googlen :D

EDIT:
Ich werde das zwar primär in JS (P5) umsetzen, doch so ein einfaches Projekt würde sich auch anbieten, es in Unity mal zusammenzuklicken - da würde man dann auch vorzugsweise mit C# programmieren. Allerdings ist da der Start-Aufwand mit gerade ein Stück zu groß - vielleicht wenn meine erste Lösung mit p5 steht.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Ich persönlich bevorzuge Englisch, da ich eine Deutsch-Englisch Mischung nicht so mag und Programmiersprachen an sich ja auf der englischen Sprache basieren.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich persönlich bevorzuge Englisch, da ich eine Deutsch-Englisch Mischung nicht so mag und Programmiersprachen an sich ja auf der englischen Sprache basieren.

Dann wirst du meine Commit-Nachrichten und meine Kommentare im Code lieben. Bei diesen privaten Projekten mische ich dann doch ab und an mal ganz gerne die Sprachen. Bei der Arbeit bleibe ich aber vollständig bei Englisch :D
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
346
Ich würde auch bevorzugen, immer wieder Status zu teilen und zu diskutieren.

Wie ging das nochmal mit dem gitlab?

Halb offtopic:
Hab übrigens endlich ein Framework gefunden, das wohl einfach zu bedienen ist, "trivial-gamekit" :T
Und es läuft nun auch endlich bei mir, dank super Hilfe auf #lispgames in irc.freenode.net. Nur mal so als Werbung nebenher... .
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
  • Thread Starter Thread Starter
  • #11
Über einen regen Austausch hier im Thread würde ich mich persönlich freuen.

Die verschiedenen Schwierigkeitsstufen muß man i.ü. nicht zwingend alle implementieren, obwohl das gar keine schlechte Idee ist, sondern eigentlich/ursprünglich waren sie als Schwierigkeitsstufen für die Entwickler gedacht. Mindestens die einfachste (Konsolen-)Version sollte selbst jemand hinbekommen, der in seinem ganzen Leben noch nicht programmiert hat.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich möchte dann mal bereits auf das erste kleine Problem hinweisen, auf das ich direkt gestoßen bin. Drehbewegung und Geschwindigkeiten bestimmen, wenn in verschiedene Sachen beschleunigt werden... Das ist dann nicht mehr ganz trivial.

EDIT:
OK, ich glaube ich brauche dafür ein Stück Papier. Mit dem einfachen Kram gebe ich mich ja nicht zufrieden...
Schub und nicht Schub kriege ich super einfach hin. Aber sobald da eine dynamische Rotation hinzukommt, wird das dann doch deutlich komplizierter.
Das Problem ist für mich die nichtlinearität von trigonometrischen Funktionen...

EDIT2:
Also ich weiß jetzt, was ich wie und wo einsetzten müsste, allerdings weiß ich nicht, in wie weit ich eine Winkeländerung approximieren kann, damit das Ergebnis noch "sinnhaft" bleibt. Leider ist der Sinus und Cosinus nicht linear. Demnach wäre nur bei Winkeln < 7° eine gute Approximation sin(x) = x.

Ich beabsichtige aber sowieso einige Male pro Sekunde Winkel und so weiter zu berechnen, ich denke da wäre dann eine Approximation in dem Sinne erlaubt. Zumindest denke ich, dass ich das so machen werde...

EDIT3:
Möglicherweise mache ich mir auch gerade einfach deutlich zu viele Gedanken und seh den Wald vor lauter Bäumen nicht. Ich denke, ich berechne das alles "relativ" einfach und wenn da was dann bei ungenau ist, dürft ihr mich gerne darauf hinweisen.

Hat übrigens jemand ein paar Startparameter für mich? Wie schnell fliegt man denn so in der Umlaufbahn vom Mond? Was schafft denn so ein Triebwerk von einer Mondsonde? Müsste ich alles mal die Tage googlen.
 
Zuletzt bearbeitet:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Achso, hmm ja also.
Ich nehm ja btw. eine fertige physik-engine.. :coffee: :p.
Aber ja, ich vermute stark du denkst viel zu kompliziert, Roin. Du hast einfach eine Kraft, die dich nach unten zieht und Schub, der dagegen hält. Wenn du dich drehst, dann ist da eben der Vektor/Kraft schief und nicht mehr straight nach unten, das ändern ja aber am Prinzip nichts. Vielleicht missverstehe ich dich auch.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
@BurnerR: Dass ich da einen Vektor habe, der nur noch anteilig gegen die Gravitation wirkt ist mir vollkommen klar. Mir geht es um die beschleunigte Drehbewegung, damit ich, da ich ja nicht jede Planck-Zeit berechne, sondern nur anteilig alle 1/50 Sekunden oder dergleichen, dass den verwendeten Schub auch in die richtige Richtung ansetze. Weil über eine beschleunigte Drehbewegung den effektiv-Winkel zu ermitteln, finde ich aktuell ziemlich schwer. Das wird am Ende des Spiels vermutlich nicht mehr als 0,1m/s ausmachen oder so aber ich würde es halt gerne genau haben.
Da habe ich aber aktuell noch keine Lösung für. Also Linearisiere ich einfach auf meinen Zeitintervallen und ihr müsst mit dem Fehler leben, außer ihr könnt ihn mir verbessern. Denn ich werde hier keine 20-Zeilige Formel implementieren, die mein mega-Komplexes Integral berechnet...
 

MingsPing

NGBler

Registriert
15 Juli 2013
Beiträge
346
Kannst Du nicht einfach den Winkel nehmen, um den Dein Flugobjekt in diesem Moment gedreht ist?
(Habe noch nicht angefangen, könnte also sein, ich verstehe das Problem nicht richtig)
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
@MingsPing: Das ist dann approximiert.
Sagen wir am Anfang steht meine Rakete komplett senkrecht. Dann geht der Schub nur gegen die Fallbewegung.
Wenn ich nun aber Steuerdüsen feuere, bewegt sich meine Rakete um sich selbst, dreht sich also. Dann wäre nach Beispielsweise einer Sekunde die Rakete um 15° gedreht. Dann könnte ich sagen, dass in einer Sekunde der Schub bei 0° war, und dann eine Sekunde bei 15°.
Das funktioniert halt nur, wenn wir sagen, dass die Rakete sich gleichmäßig dreht. Also sobald eine Steuerdüse gefeuert ist, sie automatisch mit 15°/s dreht (1).

In echt wäre es aber so, dass die Rakete ihre Drehung mit 15°/s^2 beschleunigt (2).
Nach einer halben Sekunde ist sie also bei 15*0,5^2 = 3,75° gedreht aber nach einer Sekunde um 15° und nach 2 Sekunden bereits um 15*2^2 = 60° gedreht.
Wenn man das nun genau berechnen will, wo der Schub hingeht, wird es schwierig, finde ich, da ich aktuell auf dem Schlauch stehe, wie ich eine nicht-lineare Funktion genau (nicht approximiert) mitteln kann.

Das ist allerdings nur das erste Problem bei der beschleunigten Drehbewegung. Den Winkel zu bestimmen geht ja noch relativ gut, wie ich oben gezeigt habe. Diesen zu mitteln geht mit vernachlässigbaren Ungenauigkeiten auch relativ gut. Allerdings wird der Schub-Vektor deutlich schwieriger zu berechnen, da man die x / y-Koordinate mit sin() und cos() von dem Winkel bestimmen muss. Wenn sich allerdings dieser Winkel in der Zeit verändert, ist das nicht mehr so einfach. Wenn er sich linear verändert (unbeschleunigte Bewegung wie bei (1)), kann man das ganz gut mitteln. Wenn die Drehbewegung aber beschleunigt ist, wie bei (2), dann kann man die Ergebnisse von sin() und cos() nicht mehr zuverlässig mitteln - dadurch entsteht ein Rechenfehler. Um das zu machen, müsste man ein echt kompliziertes Integral implementieren und berechnen lassen und selbst das ist nur noch eine Näherung.

Daher werde ich nun meine Schubvektoren und so weiter einfach linearisieren und mit den Fehlern muss ich dann halt leben. Genauere Überlegungen ist es mir dann nicht mehr wert, wenn ich für das Aufstellen der Formeln mehr als 2 Din-A4 Blätter benötige.

EDIT: Mein kleines Schiff: Ship_1.PNG
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
  • Thread Starter Thread Starter
  • #17
Dein Perfektionismus in allen Ehren, aber eine höhere Genauigkeit ergibt für die graphische Umsetzung der Aufgabe überhaupt keinen Sinn, weil letztendlich alles für die Pixel in int-Werte "gepreßt" wird.
Die Berechnung ist nach meinem Verständnis "rundenbasiert", will sagen, Du gibst einen Takt vor und bei jedem Schlag wird für jedes Objekt gemäß der Formeln eine neue Position errechnet.

Ich nehme an, daß Du für einen Crash auch nur eine bestimmt Geschwindigkeit festlegen wirst, die, falls überschritten, die Landung als gescheitert bestimmt.

Korrekterweise müßte man hier auch bestimmen, wieviel Bewegungsenergie die Fähre als elastische Verformungsenergie aufnehmen kann, bis die Verformung unelastisch wird. Das Ganze ist abhängig von Material und Bauweise.

tl;dr Ich halte Schulphysik für diese Spielerei für völlig ausreichend. :T
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Ich halte Schulphysik für diese Spielerei für völlig ausreichend. :T
Im Endeffekt habe ich mich da auch aktuell drauf beschränkt. Die erste Demo ist auch schon beinahe spielfähig. Ich muss nur noch ein paar Startwerte anpassen, sodass die Rakete nicht nach weniger als 2 Sekunden am Boden zerschellt :D

EDIT:
Das Spiel hört bei mir passend auf, wenn die Rakete am Boden ist. Aber die Nachricht, die angezeigt werden soll, kommt einfach nicht. Allerdings kommt die Consolen-Nachricht. Wird also ausgeführt. Wenn ich die entsprechende Funktion danach nochmal manuell aufrufe, wird etwas angezeigt. Ich bin sehr verwirrt... :(

EDIT2:
Erste Version ist fertig. Die Rakete kann fliegen, hat Steuerdüsen und ein Haupttriebwerk. Man kann diverse Parameter für das Spiel einstellen und am Ende kommt ein "Crashed" oder "Game won". Man hat einige Daten, die mit auf dem Bildschirm angezeigt werden.

Mal sehen was ich noch machen möchte...
 
Zuletzt bearbeitet:

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.504
Arbeite mich noch bisschen in Phaser3 ein. Das ist kein Spaß, es gibt ein paar Beispiele und eine API Doc, aber ohne High-Level Tutorials ist es teilweise schwer rein zu kommen.
Naja, jedenfalls fällt mein moonlander schonmal auf den Boden :D.
Habe mir mit mtpaint auch einen gezeichnet:
moonlandertest.png

Roin, hast du vorher schonmal was mit p5 gemacht?
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
@BurnerR:
Ich habe vorher mit p5 nur absolut kleine Spielereien gemacht. Ich bin mir auch nicht sicher, in wie weit ich p5 für die Aufgabe wirklich brauche. Ich benutze es aktuell ja nur, um ein Canvas zu bemalen und eine Funktion zu haben, die zuverlässig in einer Loop ausgeführt wird.
 
Oben