http://www.der-postillon.com/2014/07/bitter-wm-aus-fur-deutschland-nach-nur.html?m=1
Am besten sind die Schimpf Kommentare der “Erleuchteten“
http://www.der-postillon.com/2014/07/bitter-wm-aus-fur-deutschland-nach-nur.html?m=1
Am besten sind die Schimpf Kommentare der “Erleuchteten“
Wer schon mal auf nem MEGA Event war kennt bestimmt das Bild von herumirrenden Cachern die Autos fotografieren, oder besser gesagt die TBs auf den Autos.
Hier in Frankfurt ist es noch ne Spur bizarrer, da das Cacher im Parkhaus stattfindet.
Man hat erst den Eindruck Leute habe sich verlaufen und suchen den Ausgang. Oder die würden für den Rückweg Fotomarken setzen. Ethisch gesehen ein großer Fortschritt gegenüber der Lebensmittelverschwendung wie Hänsel und Gretel es vollzogen.
Aber es ist die falsche Fährte.
Nein es geht um Statistik. Und die Leute sind alles andere als verwirrt. Sogar sehr nett wenn man ins Gespräch kommt. So zwischen 2 Autos, äh TBs.
Eine Steigerung findet man am Treppenhaus, hier ist ne Liste aufgehangen, damit man sich nicht die Mühe machen musst zu laufen.
Noch bizarr hab ich es in der Schweiz gesehen. Hier konnte man beim MEGA Schwitzerland direkt über nen FTP Server die Liste herunterladen. Natürlich im passenden Format für den TB-Logger.
In diesem Sinne, frohes sammeln.
locations und anschließend für jede reale Dose einen
Eintrag.
locations[1] für die Dose in Hamburg, locations[2] für die in Berlin, locations[3]
für München usw.
startGame (Zeile 7 ff) ausgeführt und eine der möglichen Locations
ausgewählt. Dies kann per Multiple-Choice passieren oder voll automatisch, indem ihr die Location auswählt die am
nächsten liegt.
loc.FinalPoint
buildReadableCoorString (siehe Globaler Code - Teil II )
#1# wird mit N 50° 39.910, E 7° 28.092
ersetzt und an die Zone angeheftet.
location ausgewählt wurde. So
können wir sie als local definieren und damit den Speicher entlasten. Es sind zwar nur geringfügige
Performanceentlastungen aber wir wollen ja auch, dass die Geschichte auf den Garmingeräten läuft.
endGame() gekapselt. outWithMedia kommt wieder aus der global.lua
und PFinal ist der Identifer des Schatzkistenbildes.
50.6651666666667N
7.4682E) bei der Koordinatenverarbeitung in Urwigo geärgert haben.
N 50° 39.910, E 7° 28.092) gewöhnt
sein.
Waypoint direkt definiert (Wherigo.ZonePoint(50.6651666666667,
7.4682, 0)) ist die manuelle Hin- und Herrechnerei ziemlich aufwändig.
In manchen Fällen ist es empfehlenswert die Koordinaten lesbar auf dem Display auszugeben, z.B. wenn der Final etwas
kompliziert zu erreichen ist. Damit man neben dem Wherigo-ZonePoint keine extra String-Version der Koordinaten im
Dezimalminuten-Format im Code zu pflegen hat, empfiehlt es sich das ganze automatisch umrechnen zu lassen. Kommt
vorallem gut, wenn sich die Location ändert, oder ne neue Location hinzukommt.
buildReadableCoorString eine Helfermethode die genau dies macht. Zunächst wird in
Zeile 71 und 72 der Waypoint in den Breiten- und Längengrad aufgesplittet.
latitude also dem Breitengrad werden mit math.floor der
Vorkommateil, also die Gradzahlen abgeschnitten und abgezogen vom ganzen der Nachkommateil gebildet. (Zeile 74.
lat - tmp).
N 50° 39.9100023347 sähe nicht so gelungen aus.
Als Ergebnis würde N 50° 39.91 herauskommen was auch nicht zu 100% korrekt aussieht. Es fehlt die
abschießende 0.
string.format("%.3f", val) auf 3 Stellen hinterm Komma (bzw. Punkt) mit
Nullen aufgefüllt wird.
+ 0.5 die Rundungsgrenze auf die ganze
Zahl verschiebt und dann abrundet.
mult = 10 ^ (idp or 0) ergibt 1000, da idp mit 3 (Nachkommastellen) übergeben wird. In der Schule
haben ja gelernt: Multiplikation mit 10 hoch x heißt das Komma um x Stellen nach rechts verschieben.
Aus 0,9100023347 wird dann 910,0023347; das ganze addiert um 0,5 => 910,5023347; auf Ganzzahlanteil abgerundet =>
910; Zum Schluss wird das Komma wieder um drei Stellen nach links verschoben, d.h. Division durch 10 hoch 3 = 1000
- ergibt 0,91
print den aktuellen Stand von
Variablen auf die Simulatorkonsole zu schreiben.
p abzukürzen.
pt hingegen bringt uns jetzt noch echten Mehrwert, indem vor die Logzeile die aktuelle Uhrzeit
geschrieben wird. So kann man leichter zusammenhängende Aktionen erkennen und sich besser durch die
Von-Oben-Nach-Unten Syntax des Logfiles wühlen. Es gibt übrigens keine Genauigkeit auf den Millisekundenbereich. Die
Sekunde ist die kleinste Zeiteinheit, die ihr im Wherigo messen könnt.
MessageBox direkt in lua schreiben möchte.
OK noch eine weitere Aktion folgen soll.
global.lua Datei anzulegen, die ich im überordneten Ordner
aller Wherigo liegen habe und die von jedem WIG-Projekt genutzt werden kann.
C:\Wherigos liegt die Datei global.luaC:\Wherigo\MeinTestWherigo liegt dann die Projektdatei test.urwigoC:\Wherigo\MeinZweiterWherigo liegt dann entsprechend zweiterWIG.urwigo
test.urwigo als auch zweiterWIG.urwigo verwenden
global.lua aus dem übergeordneten Ordner
gwz Archives spielt der Pfad dann keine Rolle mehr,
da der Inhalt der externen lua-Datei in die _cartridge.lua hineinkopiert wird
Nun aber zu den Methoden an sich. Den Anfang machen die Boolean Werte. Dabei ist es mir für debug Zwecke oft
hilfreich, wenn der Wert als Zahl oder String zurückgegeben wird, da eine Konkatenation in lua mit verschiedenen
Datentypen Probleme bereitet.
"Raetsel 1 geloest: " .. myBoolVar führt zu einem Laufzeitfehler da hier string und boolean nicht
miteinander verknüpft werden kann.
"Raetsel 1 geloest: " .. bts(myBoolVar) hingegen funktioniert, da nun zwei Strings verknüpft
werden. Die Ausgabe lautet dann "Raetsel 1 geloest: true"
value und mal condition
heißt ist historisch gewachsen. Kein guter Stil, wie ich zugeben muss, aber eine Methode umbenennen wird im
nachhinein schwierig, da man auch alle Aufrufe der Methode in zahlreichen Wherigo-Projekten anpassen muss.true bzw. false, abhängig von einer
Wahrscheinlichkeit.
getRandomBool(33) löst diese Aufgabe. math.random(100) liefert eine Ganzzahl zwischen
1 und 100, also 5, 41, 87 ...
33 wird true zurück geliefert, ansonsten false.
Korrekterweise müsste es kleiner gleich heißen, da nicht von 0 bis 99 sondern von 1 bis 100 gezählt wird.
m und einem optionalen Bildchen
med gefüllt wird.
OK gedrückt
hat.
cf definiert (Zeile 35), die erst dann ausgeführt wird, wenn der MessageBox danach zumute ist.
cf? Zunächst hat sie einen Parameter action. Ist
dieser Parameter null, so geschieht ... rein gar nix. Ich konnte diesen Fall noch nie beobachten. Wahrscheinlich ein Sicherheitscheck, falls man die MessageBox nicht mit "OK", sondern mit dem Back-Button des Smartphones verlässt.
cf(anAction) mit einem Not-Null-Parameter auf, so wird die
zweite innere Methode fun (wieder eine closure) ausgeführt.
fun ? fun wird von außen definiert, z.B. in Zeile 29, wo der Befehl
"Zeige Mainscreen" übergeben wird. Auch hier gilt, in Zeile 29 wird
Wherigo.ShowScreen(Wherigo.MAINSCREEN) nur definiert, aber noch nicht ausgeführt. Dies passiert erst,
wenn der Spieler in der MessageBox (z.B. "Gehe nun zum Final") auf "OK" drückt.
function() und end. Ansonsten habt ihr keine closure definiert, sondern es wird direkt der Mainscreen angezeigt!
action Parameter?".
Dieser dient theoretisch dazu weitere Informationen an die aufrufende Methode zu übergeben. Man könnte ne Zahl oder
einen String reinschreiben. Trotz längerer Studie des von Urwigo kompilierten Codes konnte ich aber stets nur den
action ~= nil Vergleich finden.
action (enthält "Button1" bzw. "Button2") kann man dann unterscheiden welcher Button gedrückt wurde.
Ein sinnvolles Szenario wäre "Du bist an der Zone Goldbergwerk angekommen. Die bereits abgebauten Goldklumpen wandern hiermit in dein Inventar", Button1 = "OK", Button2 = "Nachricht zukünftig nicht mehr anzeigen"
Nun aber genug der komplexen closure-Theorie. Zum Abschluss etwas leichtere Kost.
calcCenterZonePoint liefert euch die GPS-Koordinate, die genau zwischen point1 und point2 liegt. Ist ganz praktisch um die Hälfte der Laufstrecke oder den Mittelpunkt eines Fußballfeldes zu bestimmen.
printTable gibt beim debuggen den Wert einer Tabelle aus. Da jedes "Objekt" in lua als Tabelle definiert ist, kann das schon mal ganz hilfreich sein.
getmetatable() abgerufen werden.
Als Ergebnis seht ihr beim Debuggen alle Infos über eure Zone.