BahnLand Geschrieben 2. August 2019 Geschrieben 2. August 2019 Hallo Brummi, vor einer Stunde schrieb Roter Brummer: Edit: Vergessen auf Abschicken zu drücken. das passiert also nicht nur mir. Viele Grüße BahnLand
Andy Geschrieben 2. August 2019 Geschrieben 2. August 2019 vor einer Stunde schrieb Roter Brummer: ich wusste doch, dass ihr darauf anspringt Wenn Du dort Hilfe brauchst, wo ich sie geben kann, wirst Du sie immer kriegen! Und wir haben damit noch einen V5-Fehler gefunden und es ist eine prima Übung. Gruß Andy
Roter Brummer Geschrieben 2. August 2019 Autor Geschrieben 2. August 2019 Hallo zusammen, das Beispiel von @Andy habe ich jetzt in die Anlage eingebaut. Funktioniert anstandslos. Danke. Das Beispiel von @Goetz gefällt mir insofern, weil es mit viel weniger Elementen auskommt und ein richtig schlankes Script benutzt. Allerdings haben hier die Würfel absolute Koordinaten. Damit kann man das Ganze nicht einfach in der Anlage verschieben, weil die Würfle ja immer wieder an ihre alte Position zurückspringen. Aber mit der Funktion "transformation.position" und kleinen Ebenen, auf die die Würfel zu springen haben, müsste doch noch was gehen, oder? vor 46 Minuten schrieb Goetz: Und du kannst mittels Lua sogar überprüfen, ob die Aufgabe gelöst wurde. Das wäre natürlich in Verbindung mit einem Zeitnehmer (habe ich mir schon gebastelt) und/oder einem Zähler der Rangiervorgänge eine fantastische Abrundung des Ganzen. Ich bleibe gespannt. HG Brummi
Andy Geschrieben 2. August 2019 Geschrieben 2. August 2019 Ich denke mal, da könnte es in Zukunft durchaus ein paar 'Fahrdienstleiterspiele' geben. Das bringt Leben in die Anlagen und man beschäftigt sich länger damit. Es ist sehr viel denkbar, aber es sollte schon ein Bezug zur Bahn bleiben, also 'Mastermind' muß jetzt nicht unbedingt sein. Sowas wäre nämlich auch kein Problem.
Goetz Geschrieben 2. August 2019 Geschrieben 2. August 2019 (bearbeitet) vor 1 Stunde schrieb Roter Brummer: Allerdings haben hier die Würfel absolute Koordinaten. Die Koordinaten stehen gut lesbar in diesem Teil des Skripts und können leicht angepasst werden. Die Beispielanlage ist eine H0 Anlage. Daher muss man die angezeigten Positionswerte mit 0,87 multiplizieren um die tatsächlichen Positionswerte für die Tabelle zu bekommen. Alternativ kann man die Liste auch aus der Anfangsposition der Würfel bilden. Also die gegebenen Positionen der Würfel auf der Anlage einmal zu Beginn auslesen und in diese Tabelle übertragen. Bearbeitet 2. August 2019 von Goetz
Roter Brummer Geschrieben 2. August 2019 Autor Geschrieben 2. August 2019 Habsch eben gerade rausgekriegt.
Roter Brummer Geschrieben 2. August 2019 Autor Geschrieben 2. August 2019 Hallo Goetz, nachdem ich jetzt alles schön positioniert habe möchte ich noch eine zweite Rangieraufgabe einbauen. Also habe ich nochmal Quader angelegt, die aber "Quader_B_1" usw. heißen. Ebenso einen zweiten Schalter, der "var2" heißt. Dann habe ich den Ordner mit deinen Ereignissen dupliziert und alles (auch im Script) sauber umbenannt und andere Koordinaten für die Klötzchen angegeben. Aber jetzt purzelt mir alles durcheinander und die Klötzchen liegen übereinander. Also die übliche Frage: Was mache ich falsch? Muss ich die Positionsliste umbenennen? PositionsListe = { {x = -15, y = -9.38, z = -1.4}, {x = -13.5, y = -9.38, z = -1.4}, {x = -12, y = -9.38, z = -1.4}, {x = -10.5, y = -9.38, z = -1.4}, {x = -9, y = -9.38, z = -1.4}, {x = -13.5, y = -9.38, z = -2}, {x = -12, y = -9.38, z = -2}, {x = -10.5, y = -9.38, z = -2} } function newOrder(Tabelle) for i = #Tabelle, 2, -1 do table.insert(Tabelle, table.remove(Tabelle, math.random(i))) end return Tabelle end PositionsListe = newOrder(PositionsListe) $("Quader_B_1").transformation.position = PositionsListe[1] $("Quader_B_2").transformation.position = PositionsListe[2] $("Quader_B_3").transformation.position = PositionsListe[3] $("Quader_B_4").transformation.position = PositionsListe[4] $("Quader_B_5").transformation.position = PositionsListe[5] $("Quader_B_6").transformation.position = PositionsListe[6] $("Quader_B_7").transformation.position = PositionsListe[7] $("Quader_B_8").transformation.position = PositionsListe[8]
Roter Brummer Geschrieben 2. August 2019 Autor Geschrieben 2. August 2019 Hat sich erledigt. Ich habs tatsächlich hinbekommen. Und das in meinem Alter!
metallix Geschrieben 2. August 2019 Geschrieben 2. August 2019 vor 6 Stunden schrieb Roter Brummer: Hat sich erledigt. Ich habs tatsächlich hinbekommen. Und das in meinem Alter! Heh Brummi "Alter schuetzt vor dummheit nicht" heist es ja im volksmund abba es schuetzt durchaus davor vorschnell dummheiten zu sagen, einfach weil durch viel lebenserfahrung ein etwas laengeres nachdenken und abwaegen stattfindet dafuer abba weniger kokurenzdenken und erster sein wollen. Cheers Tom
Roter Brummer Geschrieben 5. August 2019 Autor Geschrieben 5. August 2019 Hallo zusammen, ich brauche mal Nachhilfe. Bei diesem Sript, PositionsListe = { {x = -33.4, y = 4.6, z = 0}, {x = -38.4, y = -2, z = 0}, {x = -38.4, y = -5.4, z = 0}, {x = 25.2, y = 4.6, z = 0}, {x = 38.4, y = -2, z = 0} } function newOrder(Tabelle) for i = #Tabelle, 2, -1 do table.insert(Tabelle, table.remove(Tabelle, math.random(i))) end return Tabelle end das ursprünglich von @Goetz stammt, sollen die fünf Klötzchen, die damit verbunden sind, so neu gewürfelt werden, dass keiner mehr an seinem alten Platz ist. Ich habe keinen blassen Schimmer, was in der Funktion da wie aufgerufen wird, bin aber wissbegierig. HG Brummi
Goetz Geschrieben 5. August 2019 Geschrieben 5. August 2019 (bearbeitet) vor 29 Minuten schrieb Roter Brummer: … bin aber wissbegierig. Okay, der Kern der Geschichte ist folgender: Alle 8 Möglichkeiten stehen in einer Tabelle. Da wir daraus fünf verschiedene haben wollen, müssen wir wie bei der Ziehung der Lottozahlen vorgehen. Wir spielen also 5 aus 8 statt 6 aus 49. Wir erzeugen eine Zufallszahl zwischen 1 und 8 und nehmen das Element aus der Tabelle. Jetzt sind nur noch 7 Elemente übrig. Also würfeln wir eine Zahl zwischen 1 und 7 und nehmen das Elemente ebenfalls raus. Dann würfeln wir eine Zahl zwischen 1 und 6 … Die aussortierten Elemente müssen wir der Reihe nach irgendwo aufbewahren. Und weil wir beim nächsten Spiel wieder die ganze Tabelle als Anfangsstadium nutzen wollen, ist es praktisch die gewürfelten Elemente der Reihe nach hinten an die selbe Tabelle anzuhängen. Die Zeile for i = #Tabelle, 2, -1 do erzeugt der Reihe nach Zahlen von 8 (#Tabelle enthält die Anzahl der Elemente in der Tabelle) runter bis 2. Das -1 an dritter Stelle sorgt dafür, dass bei jedem Durchgang eins runter gezählt wird und nicht - wie sonst üblich - rauf. Beim ersten Durchlauf der Schleife steht in i also eine 8. math.random(8) erzeugt eine zufällige ganze Zahl zwischen 1 und 8. table.remove() entnimmt der Tabelle, die im ersten Argument genannt wird, das Element, welches im zweiten Argument genannt wird. table.remove(Tabelle, math.random(8)) nimmt also ein zufälliges Element zwischen 1 und 8 aus der Tabelle namens "Tabelle". table.insert() setzt in der Tabelle, die als erstes Argument genannt wird, das ans Ende, was als zweites Argument genannt wird. Und an zweiter Stelle steht die Funktion table.remove(). Damit wird das zufällige Element, welches table.remove rausholt, am Ende derselben Tabelle wieder angehängt. Das 8. Element der Tabelle ist jetzt nicht mehr wichtig. Zur Auswahl stehen nur noch die ersten 7 Elemente der Tabelle. Beim zweiten Schleifendurchlauf steht deshalb in i eine 7. Wir würfeln eine zufällige Zahl zwischen 1 und 7, picken dieses Element aus der Tabelle und hängen es wieder hinten an. Dann machen wir das Spiel mit den ersten 6 Elementen der Tabelle noch einmal. Und so weiter, bis wir alle 8 Elemente in zufälliger Reihenfolge in der Tabelle stehen haben. Jetzt können wir die ersten 5 Elemente dieser Tabelle als unsere "Ziehung" präsentieren. (Wer genau verstanden hat, was passiert, der erkennt dass ich vergessen habe zum Schluss das erste Element nach hinten zu schieben. Da dieses Element aber jedes der 8 ursprünglichen Elemente sein kann, macht es für das Ergebnis keinen Unterschied.) Die 8 Elemente der Tabelle sind in diesem Fall selber kleine Tabellen, welche die x, y und z Koordinaten enthalten. Deshalb muss die Liste 8 Koordinatengruppen enthalten. Du musst auch den 3 Würfeln einen (versteckten) Platz zuweisen, die diesmal am Ende der Auswahl gelandet sind und somit nicht mitspielen. Bitte, lass mich wissen wie weit dir das hilft und wo du weiteren Erklärungsbedarf hast. Bearbeitet 5. August 2019 von Goetz Schreibfehler korrigiert
Roter Brummer Geschrieben 5. August 2019 Autor Geschrieben 5. August 2019 Hallo Goetz, die Sache ist die, dass ich an einem Timesaver arbeite. Es gibt nur noch fünf Klötzchen, die immer sichtbar sein sollen. Diese fünf sollen aber bei jedem Würfeln ausnahmslos die Position wechseln, damit alle Aufgaben gleich schwer sind und nicht eine Aufgabe leichter wird, weil eine (oder mehrere) Wagenposition(en) nicht gewechselt werden muss (müssen). Deshalb hat die Tabelle nur fünf Einträge mit den bereits angepassten Koordinaten. Im ausführenden Script gibt es demnach auch nur fünf Einträge. PositionsListe = newOrder(PositionsListe) $("Quader_A_1").transformation.position = PositionsListe[1] $("Quader_A_2").transformation.position = PositionsListe[2] $("Quader_A_3").transformation.position = PositionsListe[3] $("Quader_A_4").transformation.position = PositionsListe[4] $("Quader_A_5").transformation.position = PositionsListe[5] Das funktioniert ja auch alles. Nur werden manchmal einige Klötzchen nicht getauscht. Reicht es, wenn ich an der Stelle for i = #Tabelle, 2, -1 do die "2" durch eine "0" ersetze? HG Brummi
Goetz Geschrieben 5. August 2019 Geschrieben 5. August 2019 vor 1 Minute schrieb Roter Brummer: Es gibt nur noch fünf Klötzchen … Im ausführenden Script gibt es demnach auch nur fünf Einträge. Okay, dann ist das natürlich richtig. Aber für die "kein Klotz darf an seiner alten Position verbleiben" Anforderung (die natürlich sinnvoll ist!) muss ich mir noch etwas überlegen. Das leistet meine "Lottoziehung" nicht. Die von dir vorgeschlagene Änderung kann das auch nicht. Wir müssen da eine grundsätzlich andere Methode stricken. Leider habe ich für die nächsten 8 Tage nur sporadisch Zeit, weil ich hier (zuhause) sehr in Anspruch genommen werde. Aber falls mir da in einer ruhigen Minute etwas einfällt, lasse ich es dich wissen.
Goetz Geschrieben 5. August 2019 Geschrieben 5. August 2019 (bearbeitet) Kurz ein erster Einfall dazu: Es gibt insgesamt nur 120 mögliche Stellungen. (5 x 4 x 3 x 2 x 1) Die kann man alle in einer Tabelle auflisten und dann jeweils die ausschließen, die eine oder mehrere Positionen mit der aktuellen Stellung gemeinsam haben. Aus den verbliebenen würfelt man dann die neue Stellung. So sind Zufall und fünf neue Positionen immer garantiert. Das ist auf jeden Fall besser, als beliebige Zufallsergebnisse zu prüfen, ob sie eine gleiche Position enthalten und gegebenenfalls neu zu würfeln, bis man "Glück" hat. Bearbeitet 5. August 2019 von Goetz
Goetz Geschrieben 5. August 2019 Geschrieben 5. August 2019 Zweiter Ansatz: Tausche zwei beliebige Positionen. Tausche von den verbliebenen drei wieder zwei Positionen. Tausche dann den letzten der fünf Klötze mit einem beliebigen der anderen vier. Das ergäbe langfristig alle verfügbaren Muster und für den nächsten Wurf wäre garantiert, dass keiner der fünf Klötze an seinem Platz verbleibt. Aber für jeden Wurf stünde mit dieser Methode nur ein Teil der denkbaren Ergebnisse zur Verfügung. Deshalb finde ich es unbefriedigend und steuere es nur als Denkansatz bei.
Andy Geschrieben 5. August 2019 Geschrieben 5. August 2019 (bearbeitet) Es wird ganz normal gelost. Dann wird kontrolliert. Für alle 5 Plätze: Steht eine Farbe auf einem Platz, wo sie vorher schon war, wird sie mit einer beliebigen anderen getauscht. Sie ist nun sicher auf einem neuen Platz und die andere kann auch nicht auf der neuen Position gewesen sein. Ich habe Dir's als Beispiel mal hinten angehängt. Ich weiß nicht, wie ihr es strukturiert habt, aber PositionsListe muß für meine Begriffe ins Masterskript, und der Inhalt dort gleich an eine Arbeitstabelle (data) übergeben werden. Die ruft dann mit data = newOrder(data) immer neue Werte auf, ansonsten initialisiert sich PositionsListe bei jedem Aufruf neu. So eine angelegte Table scheint sehr hartnäckig readonly zu sein. Die f in PositionsListe habe ich nur für die Testausgabe (EP) angelegt. Die können raus. Die old müssen bleiben. Wahrscheinlich mußt Du Deine Positionsänderungen dann auf data umrouten. Naja, ist nur mal so ein Versuch. Götz wird's besser hinkriegen. zufall_x.mbp Bearbeitet 6. August 2019 von Andy
Goetz Geschrieben 6. August 2019 Geschrieben 6. August 2019 (bearbeitet) vor 7 Stunden schrieb Andy: Götz wird's besser hinkriegen. Du auch, Andy Wenn du deinen Versuch ausgeschlafen und bei Tage betrachtest. Zum Beispiel gehört die Funktionsdefinition nicht in das Schalterereignis, sondern nur ein Funktionsaufruf. Du willst doch die Funktion nicht jedes Mal, wenn der Schalter betätigt wird, neu bauen sondern nur erneut ausführen. Tabellen sind auch nicht "hartnäckig read only", wenn du das Pferd nicht von hinten aufzäumst. Bearbeitet 6. August 2019 von Goetz
Andy Geschrieben 6. August 2019 Geschrieben 6. August 2019 Ach herrje. Das heißt also, dass er in jedem dieser Skripte wieder von vorne anfängt und 'durchparst' ? Ich dachte, der sammelt sich die Dinge so nach und nach zusammen und legt gerade Funktionen und Tables mehr oder weniger 'auf Halde'. Gut, wieder was gelernt. Was ich da heute Nacht auf der Suche nach einem fertigen swap-Befehl gesehen habe, da wird mir sowieso schwarz vor Augen. Wir sind ja noch sowas von am Anfang. Und mit der Umdenkerei brauche ich nie wieder C++ programmieren. Das geht schief. Möchte wissen, wie Neo das gebacken kriegt. Aber mit der Tabelle weiß ich jetzt nicht, wie ich's anders machen soll und warum das Pferd falschrum steht. Gruß Andy
Goetz Geschrieben 6. August 2019 Geschrieben 6. August 2019 vor 1 Stunde schrieb Andy: Das heißt also, dass er in jedem dieser Skripte wieder von vorne anfängt und 'durchparst' ? Nein, das heißt es nicht. Ein Ereignis löst einen Funktionsaufruf aus. All das, was du einem Ereignis zuweist, ist also zusammen der Body einer Funktion. Und es ist nicht sinnvoll in einem Funktionsbody eine weitere Funktion zu definieren. Es ist nur sinnvoll innerhalb dieser Funktion weitere Funktionen aufzurufen. Den Rest später, wenn ich den Kopf richtig frei habe. Aber deine Funktionsdefinition innerhalb einer Funktionsdefinition ist schon Teil des "Pferd von hinten aufzäumen" Problems.
Andy Geschrieben 6. August 2019 Geschrieben 6. August 2019 Okay, dann mach Du erstmal geduldig Schaukelpferd
Goetz Geschrieben 6. August 2019 Geschrieben 6. August 2019 Gerade eben schrieb Andy: Schaukelpferd hihihi - das trifft es gut
EASY Geschrieben 7. August 2019 Geschrieben 7. August 2019 Hallo, ... hat mich natürlich auch interessiert... mein Lösungsansatz beruht darauf, dass jeder der 5 Würfel 5 Positionen einnehmen kann aber nur 4 einnehmen darf, da auf jeden Fall die Position getauscht werden soll. Jeder gesetzte Würfel schränkt die Möglichkeiten der verbliebenen Würfel ein. Bei 5 Würfel und 4 Positionen je Würfel, kann es sein, dass für dem letzten Würfel keine neue Position mehr überig bleibt. In diesem Fall mit einem beliebigen anderen Würfel tauschen... (die hintere Reihe im MBS-Projekt ist die alte Position...) ... ist alles in Lua Wuerfeln-4.mbp Gruß EASY
Andy Geschrieben 8. August 2019 Geschrieben 8. August 2019 Das ist im Wesentlichen nichts anderes als meine Version, die tauscht notfalls auch. Und wenn der Tauschplatz der eigene ist, wird hat der folgende genommen. Aber irgendwie ist es wie immer. Die anderen kriegen den Daumen, der Andy die ganze Hand. Voll auf die Backe.
EASY Geschrieben 8. August 2019 Geschrieben 8. August 2019 Hallo Andy, vor 3 Stunden schrieb Andy: Das ist im Wesentlichen nichts anderes als meine Version, die tauscht notfalls auch. Und wenn der Tauschplatz der eigene ist, wird hat der folgende genommen. Aber irgendwie ist es wie immer. Die anderen kriegen den Daumen, der Andy die ganze Hand. Voll auf die Backe. ... klingt so etwas nach Plagiat... ... ich arbeite über Streichlisten und es gibt den Unterschied, dass es immer nur der letzte Würfel ist, der ggf. getauscht werden muss... Gruß EASY
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden