#10, z MachtnixSaturday, 15. April 2017, 21:04 hodinky 8 years ago
Ab und zu probiere ich an dem Spielprinzip herum, komme aber nie wirklich weiter.
Die Lösung, alle 25(+1) Rohrpuzzles mit Charakteren zu machen, war viel zu aufwendig. Das führte zu 25x7 (+6 für den Austauschplatz) =181 Outfits. War also gigantisch unsinng und sehr speicherintensiv.
Die Lösung mit Einzel-Objekten zu machen, war ebenfalls zu umfangreich. Übereinandergestapelte Objekte führten auch zum Chaos.
Deswegen bin ich auf die Idee gekommen, eine Animation mit 7 Frames einzuführen (dank AFRLme). Offensichtlich benötigt jedes sichtbare Puzzle aber eine eigene Animation, denn die Position der Animation ist von der Position des Objekts abhängig. Schade, ich dachte, ich käme mit nur einer Animation aus, denn die 7 Frames sind ja überall gleich. Nun, gut, ich habe also 25+1 identische Animationen.
Nun hat sich ergeben, dass ich einen Rand brauche (wie bei einem Schachspiel), um abfragen zu können, ob das Spielfeld verlassen wird oder nicht. Ich möchte nun die Puzzles 9-13, 16-20, usw. in eine Tabelle einfügen.
Welches Objekt der Spieler gerade anklickt, könnte man simpel durch die Abfrage des Objektnamens abgreifen. Die Objekte haben einfach nur Zahlen als Namen. Die genaue Position des Objekts brauche ich gar nicht.
Ich hätte also eine Tabelle mit 25 (+1 Tauschfeld) Indices. So ließe sich auch bequem irgendein Zufallsgenerator zu Spielanfang starten. Da es egal ist, WANN der Zufall stattfindet, würfle ich den Frame erst dann aus, wenn das Puzzleteil aufgedeckt wird. Ich muss nur darauf achten, dass nicht z.B. 26 gerade Rohrteile aufgedeckt werden, denn dann wäre das Spiel nicht lösbar. Da habe ich noch keinen Plan...
Jedem Indice wird eine Wert zugewiesen, der der Framenummer entspricht, die angezeigt werden soll. Tabellenelement 17 hätte also z.B. den Wert 2, was dem Framebild eines senkrecht stehenden Rohrstücks entspräche. Auf dem Tauschfeld 26 außerhalb liegt z.B. Frame-Nummer 3 (ein gebogenes Element). Tausche ich nun die Rohrstücke aus, so werden intern nur die Framenummern ausgewechselt. Objekt Nr 17 bekommt also den Frame 3 und das Tauschfeld den Frame 2. Ich verschiebe beide alten Werte in eine Speichervariable und weise sie neu zu. Eine wirkliche Verschiebung findet also nicht statt.
Dazu muss ich wahrscheinlich bei jedem Mausklick die komplette Tabelle abfragen und ggf. neu einordnen.
Jeder Frame bekommt eine Art Eigenschaftsstapel zugewiesen. Das senkrechte Rohrstück hat eine Öffnung auf der Nordseite und eine auf der Südseite. Es bekommt die Werte N=1, O=0, S=1, W=0. (Die Himmelsrichtungen sind praktisch...) Irgendwie muss ich also beim Einlaufen der Flüssigkeit abklären, ob z.B. Element 17 nach oben (+7 oder - 7, nach links und rechts +1 oder -1) einen Anschluss finden kann. Das ergibt jedesmal, so befürchte ich, eine Höllenanzahl von if-Abfragen... Die Flüssigkeit kann also nur durch 17 fließen, wenn das Element 17-1 und das Element 17+1, oder das Element 17+7 und 17-7 zusammenpassen... Aber auch hier habe ich noch keinen Plan.
Ist eine Verbindung vorhanden, so müssen jeweils 25 neue Animationen aufgerufen werden. Jedes Rohrelement hat also 12 Animationen (in beide Richtungen!) mit Flüssigkeit, macht 300 Animationen insgesamt! Anscheinend kann ich auch jetzt nicht auf nur ein Set für alle zurückgreifen, so dass es ganz schön umfangreich wird.
Vielleicht geht's einfacher - ich weiß nur nicht, wie. Vielleicht könnte ich alle 12 Animationen in eine stopfen und nur die entsprechenden Frames herauspicken und ablaufen lassen... aber dann muss ich immer die komplette Animation laden. Ich glaube, einzeln wäre es ergonomischer.
Soweit die Theorie. Aber programmierblöd wie ich bin, krieg ich die Algorithmen einfach noch nicht hin. Und einen Einzelframe in einer Animation anzusprchen, klappt auch noch nicht.
_______
Google-Translator:
From time to time I try the game principle, but never really go further.
The solution to make all 25 (+1) pipe puzzles with characters was far too elaborate. This resulted in 25x7 (+6 for the exchange) = 181 outfits. So was giganticly nonsense.
The solution with single objects was also too extensive. Stacked objects also led to chaos.
That's why I came up with the idea to introduce an animation with 7 frames (thanks to AFRLme). Obviously every visible puzzle needs its own animation, because the position of the animation depends on the position of the object. Too bad, I thought I would come out with only one animation, because the 7 frames are the same everywhere. Well, well, I have 26 identical animations.
Now it has turned out that I need an edge (as in a chess game), in order to be able to query whether the field is left or not. I now want to insert the puzzles 9-13, 16-20, etc. into a table.
Which object the player just clicks, one could easily get by the query of the object name. The objects simply have numbers as names. The exact position of the object I do not need at all.
So I would have a table with 25 (+1 exchange) indices. So it would be easy to start any random generator at the beginning of the game. Since it does not matter, WHEN the random takes place, I dice the frame only when the puzzle part is uncovered. I just have to make sure that there are not 26 straight pipe sections, because then the game would not be solvable. Since I have no plan yet, how to make this ...
Each indice is assigned a value that corresponds to the number of fractions to be displayed. Table element 17 would therefore have, e.g. the value 2, which corresponds to the frame image of a straight tube piece. On the exchange panel 26 outside, e.g. frame number 3 (a curved element). If I now replace the pipe pieces, only the number of fractions are exchanged internally. Object 17 thus gets the frame 3 and the exchange field the frame 2. I move both old values ??into a memory variable and re-assign them. A real shift therefore does not take place.
For this I probably have to query with every mouse click the complete table and re-arrange it if necessary.
Each frame is assigned a kind of property stack. The vertical tube has an opening on the north side and one on the south side. The values ??N = 1, O = 0, S = 1, W = 0 are obtained. (The directions of the sky are practically ...) Somehow, I have to clarify when the fluid flows in, for example. Element 17 to the top (+7 or - 7, to the left and right +1 or -1). This always results, I fear, by a huge number of if-queries ... The liquid can only flow through 17 if the element 17-1 and the element 17 + 1, or the elements 17 + 7 and 17-7 fit together ... But here, too, I have no plan.
If there is a connection, 25 new animations must be called. Each tube element thus has 12 animations (in both directions!) With liquid, makes 300 animations in total! Apparently, I can not go back to just one set for all, so it will be quite extensive.
Maybe it's easier - I just do not know how. Perhaps I could stuff all 12 animations into one and only the corresponding frames pick out and run off ... but then I always have to load the complete animation. I think individually it would be more ergonomic.
As far as the theory. But stupid as a coder as I am, I do not get the algorithm simply. And a single frame in an animation to address, does not work yet.
OMG...
-