|
< Zahlen-Puzzle >
Ein Zahlen-Puzzle mit WML und WMLScript.
WAP-Standard: 1.1+
puzzle.wml
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="sp1" title="Zahlen-Puzzle" ontimer="puzzle.wmls#init()">
<timer value="1"/>
<p>Programm wird geladen ...</p>
</card>
<card id="sp2" title="Zahlen-Puzzle">
<p>
<small>
<a href="puzzle.wmls#move(0)">$(a0)</a> 
<a href="puzzle.wmls#move(1)">$(a1)</a> 
<a href="puzzle.wmls#move(2)">$(a2)</a> 
<a href="puzzle.wmls#move(3)">$(a3)</a> 
  [$(counter)]
</small>
</p>
<p>
<small>
<a href="puzzle.wmls#move(4)">$(a4)</a> 
<a href="puzzle.wmls#move(5)">$(a5)</a> 
<a href="puzzle.wmls#move(6)">$(a6)</a> 
<a href="puzzle.wmls#move(7)">$(a7)</a>
</small>
</p>
<p>
<small>
<a href="puzzle.wmls#move(8)">$(a8)</a> 
<a href="puzzle.wmls#move(9)">$(a9)</a> 
<a href="puzzle.wmls#move(10)">$(a10)</a> 
<a href="puzzle.wmls#move(11)">$(a11)</a>
</small>
</p>
<p>
<small>
<a href="puzzle.wmls#move(12)">$(a12)</a> 
<a href="puzzle.wmls#move(13)">$(a13)</a> 
<a href="puzzle.wmls#move(14)">$(a14)</a> 
<a href="puzzle.wmls#move(15)">$(a15)</a>
</small>
</p>
<p><a href="puzzle.wml">Neues Spiel</a></p>
</card>
</wml>
Wenn der WAP-Browser alle Zahlen in gleicher Breite darstellt, kann auf eine Tabelle verzichtet werden. Das spart Code und vor allem Platz (in der Höhe !).
Andererseits könnten Tabellenränder aus Design-Gründen durchaus interessant sein.
Auch die Verwendung kleiner Bildchen im wbmp-Format ist möglich, wirft aber wieder neue Probleme auf (Bildgröße, Abstände).
puzzle.wmls
extern function init() {
var i, r, x;
var a = "01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 ~~";
for(i=0;i<16;i++) {
r = Lang.random(15-i);
x = String.elementAt(a,r," ");
WMLBrowser.setVar("a"+i,x);
if(i<15) a = String.removeAt(a,r," ");
}
WMLBrowser.setVar("counter",0);
WMLBrowser.go("puzzle.wml#sp2");
}
extern function move(p) {
var i, j, z = WMLBrowser.getVar("a"+p);
for(i=-1;i<2;i+=2) {
for(j=1;j<5;j+=3) {
if(WMLBrowser.getVar("a"+(p+i*j))=="~~") {
WMLBrowser.setVar("a"+(p+i*j),z);
WMLBrowser.setVar("a"+p,"~~");
}
}
}
var c = WMLBrowser.getVar("counter");
WMLBrowser.setVar("counter",++c);
WMLBrowser.go("puzzle.wml#sp2");
}
In der Funktion init() wird per Zufall ein Element aus dem String a herausgegriffen und der ersten Variablen a0 zugeordnet. Anschließend wird das Element in a gelöscht. Diese Prozedur wird fortgesetzt, bis alle Zahlen und das Zeichen für das freie Feld verteilt sind.
Die (i<15) Bedingung war notwendig, da es zum Teil Schwierigkeiten gab, wenn a auf ein Empty-String "" reduziert wurde.
In move() werden die Werte der angeklickten Variablen mit dem von ~~ vertauscht, wenn es möglich ist.
Download Puzzle.zip (ca. 1,5 kb)
Copyright © 2002-2003 by wmlscript.de - Alle Rechte vorbehalten
Impressum | Datenschutz | eMail
|