Extended am Sonntag #5
Ein Minispiel: Geschenke Sortieren
Heute soll es um ein Extended-Item gehen, mit dem man ein kleines Spiel spielen kann.
In diesem geht es darum, Geschenke möglichst schnell in die richtige Kategorie (bzw. Geschenksack) einzusortieren. Wenn man den falschen Sack auswählt oder zu langsam ist, ist das Spiel zuende.
Import-Code
Probieren geht hier vor analysieren, deshalb gleich zu Beginn der Import-Code, danach die Erklärung.
Geschenksortierspiel
!TN1xtTnss8pllvQ6c5YzSSnBaxfpa2qaIrMWyc3LTwzpwASLonEgxZmcc416ZY9q(mSpLNo)f76EKKT5poqi3v7UxTa1OrJ65x)h1DpDl8C86456a)vUAzp3kEeNkvQvE7nFtTT305QRpXZTkqb5ixCmsyusCsN)HhPzBpsRJG7mEK9AJGqoC3SBpCFp3nlxgwVJ3EEesdCpAdvzWjKo4iYyclJ7i0baf(QOXW2PQH6Shq4sFkpTNp1WgkvxN2BN0EJOMWskQiqo6LoVoTx11tpoNUidBKlDeZs3lNKE8K16WccUU)SpRw71PhV2PjJhZSZouYVHfPzI(0qHDLpgjeAjpa4v2cNr1Ag3o9aP00NYZUzpAsmF2VAUjdjIFiSaJpEatfyx5ez)iE2d)inPptD1SVOgaqnfwcKQ1ElF2xcVIfLXhIjYpg0ToYbdyGSFAsqqKyyb4YyjNgKb3ju1nrJPz7ZvMmKAgRO8irUi3UV2elv9ZXvY55pypf1qhpixDiJzXjCQjkrBVVfRFCIFiqBHe6MO1XcQFmlZW9oM6MCOUGcIPy8aoBitZmz2hwatL2lreaQb4MKjT7X0gMFCbrxqv4RMdyC(OzFPW85o7ZH3WsMRUcgt7hgX6NZ5wr(HgMkMzYrTbD0yW8qt0QzFrBsal100JNU(pv4L8Z)0DDrCkV(pNEC6XGK8bQ6LOdgS6AY1WXITH3umF9vqBHdgEtX81bxE8xc8hpsdJcpsfCHQ33hpq6NmIjmD1HYRULR(Dc8s7neW(HGUgUqL7d9Luvxz))jZ)2HqxzdR3bdKjMWi9zs4TKNBnpYlMOW5tFiMufxyteA4AFWu6hcxNZpFjGr(n5sqMaaor(XDbaO3I9lymYjRaTtEQLvTrPLm18nzfr45)yX8Az7gP9tWtM9z)qWDtN27TOdetexQujiPINlKikitkGjmo9Aq(TBtGQiS4BUVX0W(0TnJTyrwx8Bss7XPIHA6OsPh3eIHTrSIyZn0qE90EVyI2xQytro6w5U2wdQaR2RWNl1S7)24nlSaNU78D25V7rMe6u3FAHgdIIwQmrmftmzJqhiUyY4PnPGr5cmQubzQ8dhaHLP9e0qtEeBqeBHvdXicxvi9dHrm8BoSMFadJ2JXI4WI7dG96jBmoJnt8L86LHFgmykzCeJJr1t2awDk4mZcN9RkyprcGFmyyzY7ZPjOeNrlbs7uc5tojBbenfsrXe6rrqwa(Tbfb7UOA3Yqi)GyvWsPiVblh4CdQHEiKntOnZ(SiG9y4NVxL0Cp0lSgWlf4seeNupsCz3rrA)U9Pd76uUBFEcR(pwB6)(FH)(W0muXyIhJiflajzotdRKX1LmStGJgIFL9O3x1sQTQK5VO)HP5InS1Wkzjai714DEUBbxrpmI7UWr8YyRBj(0dR29apYBHCshifgxPAeL3cIpyEKdoZRVh5IJYp0)qhKYMGtwK4AK4dtqQoScU87tG1Xf7MT6PfO2rk5MOXhYGJ6uEKtAIcXjqngUTZepB6WNzThqADBcZvw6Hkr09kPkEahZk)0ZULLKQ4uJ5j3s)LFPi92LlLeyP0jzBe1P2xc67Qob5bsZ)FzrDNNKGkG0HNTuQ4LYNzVfG153odSZFumWRwqFcg4Q)2zGR(hfd8Qf0hZaV45FnR8JDq9Qk7Bf1MLjA)vBTz2QgS1L58qgZVXQ(wgz18k(EqKxuQ3tc5Nx9KyvBzvS9N989N989)N98TOxIV3Us2cr6R1NWZV7rSvcY2F7z2CkJRSfsU53zDeUDXCqgVNE9)Ug5S3o)8VV2PgF)5Ox15k3t7S96DfvHTRaddOC0RBE7jpd18Ho05XCwQU49Z3A)QPhxCmsPfXm1TTTz7V5ftkIbNA7DbFY74qYualAYG820uycKOH40cm0GfWctEVz2oJW6wF1xVnTIwWkOVYkOFElB3DdvxXgYBFlV)TmR1VV7bZuiyn3h82XMkzqh9SOLTYzVo1y))aYe4vVZwG)95eSBSw4(k(0aEKgTrHg1YL(6exzZ9ZZraIPasE)U2qdWxcvs74h21McTHvVBI8PcQ4h1a8qlm0dJgy6wgIkE)(ivN7IJK9WXgwCVyFeetrBIsX5A2ZpsENVNi5VHu7zFg(NuG6tqExu3z5hsExkuoGzOrCT1aTFJUNT)UK2UDHxbhDANCGZeTIgdY2MTrDs7ZlSVMcplstqMRTHtLnQ4aNx7u3PwDhyRnW(2zC2Lm9FRtiuQd4h8bWXgIlc(aypkvRun77X7rf6RUpKLXaKB)pAqA1gLBaZBXRYBxFZ3uVgEWb6eII3rwFJZWtXjKJGlFQM1TakAL08CRV2jxK7TOz(jQiZ1TaMZT6n4E3jJ8mDKSlmvXapzDSn5KakEizu2Po9zdHYozcek8RzCe(HlSomwnZ459Fc
Dieses Item verwendet einen Lua-Skripteffekt, um die zufälligen Geschenke zu erzeugen. Daher ist die Sicherheitsstufe des Items niedrig.
Wie es funktioniert
Grundstruktur
Das Spiel-Item enthält zwei innere Dokument-Objekte. Das Dokument intro
weist den Spieler in das Spiel ein, es enthält einen Link, mit dem sich das Spiel starten lässt.
Die Hauptarbeit leistet das Dokument game
. Damit wird eine komplette Spielrunde modelliert, also:
- Geschenk zufällig auswählen
- Geschenk anzeigen
- Aktion des Spielers auswerten
Geschenk auswählen
Jedes Geschenk wird zufällig aus 30 möglichen Geschenken ausgewählt. Diese sind vorab einer der drei Kategorien zugeordnet. Die Auswahl wird von einem Lua-Skripteffekt übernommen.
In diesem Effekt verwende ich math.random
, um zufällige Werte auszuwürfeln, sowie setVar
. setVar
ermöglich es mir, Objektvariablen aus dem Skripteffekt heraus zu setzen. Ich exportiere also die beiden Ergebnisse category
, damit das Spiel weiß, was die richtige Lösung ist, sowie itemName
, damit der Spieler sieht, um welches Geschenk es sich handelt.
Erste Abbruchbedingung: Falsche Kategorie
Falls der Spieler den falschen Geschenksack erwischt, soll das Spiel beendet werden. Dazu bereite ich zwei Arbeitsabläufe vor: nextRound
und gameOver
. Diese beiden Arbeitsabläufe werden innerhalb der drei Arbeitsabläufe cat1
, cat2
bzw. cat3
aufgerufen, diese wiederum durch Klicks auf die im game
-Dokument dargestellten Säcke.
gameOver
wird dabei ausgelöst, wenn der vorher gespeicherte Wert von category
nicht mit der Kategorie übereinstimmt. (Beachte die Effektbedingung)
Zweite Abbruchbedingung: Zu langsam
Für diese ist ein kleiner Trick nötig. Zunächst starte ich nach dem Anzeigen des game
-Dokuments einen Verzögerungs-Effekt. Nachdem die Verzögerung abgelaufen ist, ist das Spiel gelaufen, aber halt! Das soll natürlich nur dann passieren, wenn die Spieler zwischendurch nichts angeklickt hat.
Das realisiere ich mit einem Rundenzähler round
. Diesen gibt es einmal als Objektvariable und einmal als Arbeitsablauf-Variable thisRound
. Zu Beginn jeder Runde (d.h. nachdem der Spieler etwas angeklickt hat) erhöhe ich den Rundenzähler um eins und weise dann diesen Wert der Variable thisRound
zu. Auf diese Weise kann ich erkennen, ob ein „Timeout“ noch gültig ist (round = thisRound
), oder nicht (round > thisRound
).
An dieser Stelle sei nochmal daran erinnert, dass Arbeitsablauf-Variablen eine kürzere Gültigkeit haben als Objekt-Variablen. Mit jedem Klick im Dokument erzeuge ich neue Arbeitsablauf-Variablen, deshalb kann es auch mehrere Versionen der Variable thisRound
geben, die Objektvariable gibt es aber nur ein einziges Mal pro Item.
Ende des Spiels
Am Ende des Spiels zeige ich eine lapidare Meldung an, weshalb das Spiel beendet wurde (zu langsam oder falsch geklickt), dazu noch eine Punktzahl score
, die ich vorher in jeder Runde um eins erhöht habe.
Genug Platz für Ideen
Das Item ist ausdrücklich nicht nur dazu da, benutzt zu werden, sondern auch verbessert.
Zum Beispiel kannst du dich an folgendem versuchen:
- Verändere die Liste der Geschenke oder füge welche hinzu.
- Gestalte das
game
- undintro
-Dokument hübscher. - Verschönere die „Spiel zuende“-Meldung, und/oder baue einen „nochmal spielen“-Link ein.
- Verringere oder erhöhe die Zeit, die der Spieler zum Reagieren hat.
- Hübsch sortierte Säcke. Wäre doch schade drum, wenn jemand in jeder Runde die Reihenfolge vertauschen würde… Wer tut sowas nur?
- Mach ein Endlosspiel draus. Bei Fehlern gibt es Punktabzug statt Spielende.
- Speichere einen Highscore ab.
- Es geht auch ohne Lua-Skript. Überführe das Skript in normale Arbeitsablauf-Elemente.
- (für Fortgeschrittene) Ein Dokument reicht auch aus. Versuche, das ganze Spiel mit einem einzigen Dokument zu bauen.
- …
Viel Spaß beim Experimentieren und
bis zum nächsten Sonntag…