[Gelöst/Solved - LUA] Schieberätsel / Sliding Puzzle

  • #1, by cancel.logic.brainFriday, 07. November 2014, 10:36 10 years ago
    Hallo zusammen,

    auf der Startseite von Visionaire steht "Selbst "Minigames" wie Schach, Schieberätsel oder anderes lassen sich so problemlos verwirklichen." Problemlos heißt ohne LUA nur mit den vorhandenen Funktionen?

    Konnte im Internet/Forum leider keine Ansätze dazu finden...
    Es sollte ein (verhasstes) 3x3 Feld großes Schieberästel werden (;
    (8 Bilder, ein freies Feld)

    Sind alle Felder richtig zugeordnet, soll eine Aktion passieren.
    Hat jemand Ideen/Vorschläge/Ratschläge/Lösungen/Tutorials?

    Grüße
    cancel.logic.brain

    Newbie

    13 Posts


  • #2, by SimonSFriday, 07. November 2014, 12:03 10 years ago
    Hallo,
    Schieberätsel ist ja nun schon einiges an Arbeit.
    1) Man hat 8 Symbole, die können an jeder Stelle des 3x3 Feldes stehen. Wir können die Felder jetzt mal beispielsweise so nummerieren:
    1 2 3
    4 5 6
    7 8 9
    Jedes Feld muss alle Bilder anzeigen können, das kann man entweder per Animation oder dass man für jedes Symbol ein Objekt macht, darstellen. Jedes Objekt hat eine Bedingung, die heißt dass das Symbol mit der Nummer bla dort ist.

    2) Jedes Objekt hat eine Aktion um den aktuellen Stein zu bewegen sofern dann möglich, da hier viele Optionen dasselbe tun, kann man das per Werte merken und das in 9 große Aktionen gruppieren, das sieht zum Beispiel so aus:
    Feld 1 ist gewählt.
    Dann betrachten wir die umliegenden Positionen (2,4):
    Wenn Feld 2 leer:
    Wenn Feld 1 hat Symbol 1:
    Feld1HatSymbol1 = falsch
    Feld2HatSymbol1 = richtig
    Ende Wenn
    ... bis Symbol 8
    Ende Wenn
    Wenn Feld 4 leer:
    analog

    3) Überprüfen dass die Lösung stimmt, kann man einfach indem man die Bedingungen verschachtelt prüft.

    Punkt 2 kann man sich per Lua erleichtern, man muss aber immer noch jedes Objekt mit einer Aktion verlinken. An solchen Sachen arbeiten die Daedalic auch ein paar Tage, deswegen findste das auch nur einmal in Whispered World.

    Lua mäßig ginge zum Beispiel:

    function move(feld, symbol)
      local found = false, swapfield = 0
      if feld-3 > 0 and Conditions["Feld"..(feld-3).."frei"].Value then
        found = true
        swapfield = feld - 3
      elseif feld - 1 > 0 and Conditions["Feld"..(feld-1).."frei"].Value then
        found = true
        swapfield = feld - 1
      elseif feld + 1 < 10 and Conditions["Feld"..(feld+1).."frei"].Value then
        found = true
        swapfield = feld + 1
      elseif feld + 3 < 10 and Conditions["Feld"..(feld+3).."frei"].Value then
        found = true
        swapfield = feld + 3
      end
      if found then
        Conditions["Feld"..feld.."frei"].Value = true
        Conditions["Feld"..swapfeld.."frei"].Value = false
        Conditions["Feld"..feld.."hatSymbol"..symbol].Value = false
        Conditions["Feld"..swapfeld.."hatSymbol"..symbol].Value = true
      end
    end
    


    Dann ruft man im Feld 1 Symbol 1 zum Beispiel bei Linksklick move(1,1) auf.

    Leichter, aber um Punkt 1 kommt man nicht herum und die Aktionen.

    Thread Captain

    1580 Posts

  • #3, by cancel.logic.brainSaturday, 08. November 2014, 01:47 10 years ago
    Hallo,
    Schieberätsel ist ja nun schon einiges an Arbeit.
    1) Man hat 8 Symbole, die können an jeder Stelle des 3x3 Feldes stehen. Wir können die Felder jetzt mal beispielsweise so nummerieren:
    1 2 3
    4 5 6
    7 8 9
    Jedes Feld muss alle Bilder anzeigen können, das kann man entweder per Animation oder dass man für jedes Symbol ein Objekt macht, darstellen. Jedes Objekt hat eine Bedingung, die heißt dass das Symbol mit der Nummer bla dort ist.


    Hm, so ganz klar ist es mir noch nicht.
    Ich habe nun als Kulissenobjekte Position1, Position2, Position3, ... Position9 anlegt und ein Bild in 9 Teile (inkl. Platzhalter) geteilt und ebenfalls als Kulissenobjekte hinzugefügt (Bild1, Bild2, ...Bild8, Platzhalter)
    Nun bekommt jede Position eine Bedingung mit "Bild1 auf Position1?" (Wahr) (Reiter Bedingungen) und bei den Bild1 die Bedingung (Reiter Einstellungen) "Bild1 auf Position1?" abgefragt?

    Stehe noch ein wenig auf der Leitung...


    2) Jedes Objekt hat eine Aktion um den aktuellen Stein zu bewegen sofern dann möglich, da hier viele Optionen dasselbe tun, kann man das per Werte merken und das in 9 große Aktionen gruppieren, das sieht zum Beispiel so aus:
    Feld 1 ist gewählt.
    Dann betrachten wir die umliegenden Positionen (2,4):
    Wenn Feld 2 leer:
    Wenn Feld 1 hat Symbol 1:
    Feld1HatSymbol1 = falsch
    Feld2HatSymbol1 = richtig
    Ende Wenn
    ... bis Symbol 8
    Ende Wenn
    Wenn Feld 4 leer:
    analog


    Das klingt plausibel.

    Newbie

    13 Posts

  • #4, by SimonSSaturday, 08. November 2014, 10:45 10 years ago
    Jedes Bild muss an jeder Position stehen können, also hast du für jede Position 8 Objekte, also
    Feld1Symbol1 ... Feld1Symbol8, und die haben alle jeweils eine Bedingung Feld1hatSymbol1 und so weiter und enthalten jeweils einmal das Bild es jeweiligen Symbols. Und das für jedes Feld. Die Ausgangslage stellst du nun mit den Bedingung ein, also welche von Anfang an wahr sind, da liegen die Symbole.

    Thread Captain

    1580 Posts

  • #5, by cancel.logic.brainTuesday, 11. November 2014, 07:58 10 years ago
    Moin,

    so langsam komme ich vorwärts (dein beschriebener Part passt auch soweit - Startbedingungen und Anzeige der Startformation), nun habe ich aber doch eine Frage zu den WENN-Bedingungen.

    Ich habe mal ein Screenshot angehängt. Das ist nur ein Testbild mit einer 2x2 Martix die in dieser Konstellation nicht zu lösen geht...mir geht es jedoch erstmal nur um die WENN-Bedingung an sich.

    Wo liegt der Fehler? Im Feld1Symbol1 ist eine Markierung gelegt, für den Linksklick...
    Theoretisch sollte doch dann das Bild von Feld1 (Feld1Symbol2) auf Feld2 (dann Feld2Symbol2) rücken?!
    Wäre über Hilfe noch einmal Dankbar (:

    Newbie

    13 Posts

  • #6, by SimonSWednesday, 12. November 2014, 10:32 10 years ago
    Moie,
    ich glaube du hast mich etwas missverstanden.
    Die Aktionen waren folgendermaßen aufgebaut:

    Bei Linksklick auf Feld1:
    Wenn Feld2istfrei wahr
    Wenn Feld1hatSymbol1 wahr
    Feld2hatSymbol1 auf wahr setzen
    Feld1hatSymbol1 auf falsch setzen
    Ende Wenn
    ... Symbole 2 und 3
    Feld2istfrei auf falsch
    Feld1istfrei auf wahr
    Sonst
    Wenn Feld3istfrei wahr
    ...
    Ende Wenn
    Ende Wenn

    Du musst halt den Wert der Bedingungen austauschen, was du geschrieben hast stellt nur fest, ob das Rätsel gelöst ist.

    Thread Captain

    1580 Posts

  • #7, by afrlmeWednesday, 12. November 2014, 12:56 10 years ago
    A'llo smile

    I've created a working prototype of a sliding puzzle. I have uploaded a .exe version to dropbox for now. I'm not willing to share the .ved or script(s) yet as I'm not completely happy with it, even though it is working as it should.

    Long story short: it uses lua tables & a little move animation workflow function I specifically created for it to determine if tile you just clicked on can be moved in any direction. If 1 of the returned directions is nil then move tile to that direction etc.

    Also the puzzle is randomly generated on scene load. The bottom right tile is always empty by default.

    Also only uses 8 static animations for 3x3 grid. Not multiple versions for each tile as that would be messy & require far more pointing & clicking than I'm in the mood for.

    Imperator

    7278 Posts

  • #8, by MachtnixWednesday, 12. November 2014, 15:11 10 years ago
    I'm not willing to share the .ved or script(s) yet as I'm not completely happy with it, even though it is working as it should

    I make an appointment for this (announce? apply? assert? give notice?), if you have a finale script.
    I'm working on something like that and it is very, VERY difficult... :-) If someone did the dirty job for me, why not... ;-) ;-)

    Machtnix

    Thread Captain

    1097 Posts

  • #9, by afrlmeWednesday, 12. November 2014, 15:40 10 years ago
    I'm working on something like that and it is very, VERY difficult... :-)


    As you say: it's very, very complicated & I'm almost loath to give it away. It took me a lot of hours to get it to this point & by some miracle I still seem to have a full head of hair.

    I might share this on the wiki later on in the week once I've fine tuned the script.

    Imperator

    7278 Posts

  • #10, by MachtnixWednesday, 12. November 2014, 17:26 10 years ago
    Don't hurry. :-) I have a lot of other Vis-problems to solve first... It was only a though to take a shorter route without working myself ;-) ;-) ;-)
    It is great seeing all your famous LUA-stuff in the wiki für mostly all problems!

    Thread Captain

    1097 Posts

  • #11, by afrlmeThursday, 13. November 2014, 22:43 10 years ago
    Here: http://wiki.visionaire-tracker.net/wiki/Sliding_Puzzle_(CMS).

    I'm still not 100% happy with it but whatever. It all works ok now but is not as global as I would like; in other words it's only good for the 1 puzzle.

    P.S: big thanks to Simon for debugging the script for me. There was some strange bug/error in which it wouldn't reset the tile positions after they had been moved with the startObjectTween function without reloading the scene. So Simon figured out that we should reset the positions with the startObjectTween as well. I was almost ready to pull my hair out as I knew what I had scripted should work.

    Imperator

    7278 Posts