|
< Battleships >
Der Spiele-Klassiker Battleships / Schiffe versenken mit WML und WMLScript.
Das Programm ist noch ohne Spielintelligenz und wartet auf Erweiterungen.
WAP-Standard: 1.1+
battleships.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 title="Battleships" ontimer="bs.wmls#init()">
<timer value="1"/>
<p>Programm wird geladen ...</p>
</card>
<card id="bs2" title="Battleships">
<p align="center">
<table columns="11">
<tr>
<td><a href="bs.wmls#fire(1,5)">
<img src="$(a15)" alt=""/></a></td>
<td><a href="bs.wmls#fire(2,5)">
<img src="$(a25)" alt=""/></a></td>
<td><a href="bs.wmls#fire(3,5)">
<img src="$(a35)" alt=""/></a></td>
<td><a href="bs.wmls#fire(4,5)">
<img src="$(a45)" alt=""/></a></td>
<td><a href="bs.wmls#fire(5,5)">
<img src="$(a55)" alt=""/></a></td>
<td><img src="line.wbmp" alt=""/></td>
<td><img src="$(b15)" alt=""/></td>
<td><img src="$(b25)" alt=""/></td>
<td><img src="$(b35)" alt=""/></td>
<td><img src="$(b45)" alt=""/></td>
<td><img src="$(b55)" alt=""/></td>
</tr>
<tr>
<td><a href="bs.wmls#fire(1,4)">
<img src="$(a14)" alt=""/></a></td>
<td><a href="bs.wmls#fire(2,4)">
<img src="$(a24)" alt=""/></a></td>
<td><a href="bs.wmls#fire(3,4)">
<img src="$(a34)" alt=""/></a></td>
<td><a href="bs.wmls#fire(4,4)">
<img src="$(a44)" alt=""/></a></td>
<td><a href="bs.wmls#fire(5,4)">
<img src="$(a54)" alt=""/></a></td>
<td><img src="line.wbmp" alt=""/></td>
<td><img src="$(b14)" alt=""/></td>
<td><img src="$(b24)" alt=""/></td>
<td><img src="$(b34)" alt=""/></td>
<td><img src="$(b44)" alt=""/></td>
<td><img src="$(b54)" alt=""/></td>
</tr>
<tr>
<td><a href="bs.wmls#fire(1,3)">
<img src="$(a13)" alt=""/></a></td>
<td><a href="bs.wmls#fire(2,3)">
<img src="$(a23)" alt=""/></a></td>
<td><a href="bs.wmls#fire(3,3)">
<img src="$(a33)" alt=""/></a></td>
<td><a href="bs.wmls#fire(4,3)">
<img src="$(a43)" alt=""/></a></td>
<td><a href="bs.wmls#fire(5,3)">
<img src="$(a53)" alt=""/></a></td>
<td><img src="line.wbmp" alt=""/></td>
<td><img src="$(b13)" alt=""/></td>
<td><img src="$(b23)" alt=""/></td>
<td><img src="$(b33)" alt=""/></td>
<td><img src="$(b43)" alt=""/></td>
<td><img src="$(b53)" alt=""/></td>
</tr>
<tr>
<td><a href="bs.wmls#fire(1,2)">
<img src="$(a12)" alt=""/></a></td>
<td><a href="bs.wmls#fire(2,2)">
<img src="$(a22)" alt=""/></a></td>
<td><a href="bs.wmls#fire(3,2)">
<img src="$(a32)" alt=""/></a></td>
<td><a href="bs.wmls#fire(4,2)">
<img src="$(a42)" alt=""/></a></td>
<td><a href="bs.wmls#fire(5,2)">
<img src="$(a52)" alt=""/></a></td>
<td><img src="line.wbmp" alt=""/></td>
<td><img src="$(b12)" alt=""/></td>
<td><img src="$(b22)" alt=""/></td>
<td><img src="$(b32)" alt=""/></td>
<td><img src="$(b42)" alt=""/></td>
<td><img src="$(b52)" alt=""/></td>
</tr>
<tr>
<td><a href="bs.wmls#fire(1,1)">
<img src="$(a11)" alt=""/></a></td>
<td><a href="bs.wmls#fire(2,1)">
<img src="$(a21)" alt=""/></a></td>
<td><a href="bs.wmls#fire(3,1)">
<img src="$(a31)" alt=""/></a></td>
<td><a href="bs.wmls#fire(4,1)">
<img src="$(a41)" alt=""/></a></td>
<td><a href="bs.wmls#fire(5,1)">
<img src="$(a51)" alt=""/></a></td>
<td><img src="line.wbmp" alt=""/></td>
<td><img src="$(b11)" alt=""/></td>
<td><img src="$(b21)" alt=""/></td>
<td><img src="$(b31)" alt=""/></td>
<td><img src="$(b41)" alt=""/></td>
<td><img src="$(b51)" alt=""/></td>
</tr>
</table>
</p>
</card>
</wml>
Eine aufwendige Tabellenkonstruktion, die je nach Bedarf leicht verkleinert oder vergrößert werden kann. Zum Beispiel mit 5x5 Grafiken statt 7x7. (Allerdings beträgt der kompilierte Code der wml-Datei bereits jetzt schon knapp 1300 byte !)
Der Openwave Bowser (SDK 5.0) zeigt hier überings ein seltsames Fehlverhalten: Ab dem 33. Bild (von oben links gezählt) werden Bilder nur angezeigt, wenn sie bereits unter den ersten 32 zu finden sind. (?)
Der Nokia SimApp 2.0 Emulator kommt mit der Tabelle überhaupt nicht zurecht.
bs.wmls
extern function init() {
var i, j;
// Das Spielfeld mit leeren Bildern füllen
for(i=1;i<6;i++) {
for(j=1;j<6;j++) {
WMLBrowser.setVar("a"+i+j,"blank.wbmp");
WMLBrowser.setVar("b"+i+j,"blank.wbmp");
}
}
// Schiffe des Computers platzieren
// Ein 3er und zwei 2er
setShip("a",3,"hidden");
setShip("a",2,"hidden");
setShip("a",2,"hidden");
// Schiffe des Spielers platzieren
// Ein 3er und zwei 2er
setShip("b",3,"ship");
setShip("b",2,"ship");
setShip("b",2,"ship");
// Treffer zählen
WMLBrowser.setVar("playerHits",0);
WMLBrowser.setVar("computerHits",0);
WMLBrowser.setVar("game",1);
WMLBrowser.go("battleships.wml#bs2");
}
// Schiffe platzieren
function setShip(team,length,picture) {
var i, j, k, s, run = true;
// Hinreichend freie Felder finden
while(run==true) {
run = false;
i = Lang.random(4)+1;
j = Lang.random(4)+1;
k = Lang.random(1);
for(s=0;s<length;s++) {
if(length>s &&
WMLBrowser.getVar(team+(i+k*s)+(j+(1-k)*s))!="blank.wbmp") {
run = true;
s=length;
}
}
}
for(s=0;s<length;s++)
WMLBrowser.setVar(team+(i+k*s)+(j+(1-k)*s),picture+".wbmp");
}
// Schuss des Spielers
extern function fire(i,j) {
if(WMLBrowser.getVar("game")==0) {
Dialogs.alert("Game Over !");
Lang.exit("");
}
else if(WMLBrowser.getVar("a"+i+j)=="miss.wbmp" ||
WMLBrowser.getVar("a"+i+j)=="hit.wbmp") {
Dialogs.alert("Das geht nicht !");
Lang.exit("");
}
// Treffer oder Fehlschuss des Spielers anzeigen
if(WMLBrowser.getVar("a"+i+j)=="blank.wbmp")
WMLBrowser.setVar("a"+i+j,"miss.wbmp");
else if(WMLBrowser.getVar("a"+i+j)=="hidden.wbmp") {
WMLBrowser.setVar("a"+i+j,"hit.wbmp");
var pH = WMLBrowser.getVar("playerHits")*1+1;
WMLBrowser.setVar("playerHits",pH);
if(pH==7) {
Dialogs.alert("Gewonnen !");
WMLBrowser.setVar("game",0);
}
}
if(pH!=7) counter();
WMLBrowser.go("battleships.wml#bs2");
}
// Schuss des Computers
function counter() {
var i, j, run = true;
// Zufällig freies Feld auswählen
while(run==true) {
run = false;
i = Lang.random(4)+1;
j = Lang.random(4)+1;
if(WMLBrowser.getVar("b"+i+j)!="blank.wbmp" &&
WMLBrowser.getVar("b"+i+j)!="ship.wbmp") run = true;
}
// Treffer oder Fehlschuss des Computers anzeigen
if(WMLBrowser.getVar("b"+i+j)=="blank.wbmp")
WMLBrowser.setVar("b"+i+j,"miss.wbmp");
else if(WMLBrowser.getVar("b"+i+j)=="ship.wbmp") {
WMLBrowser.setVar("b"+i+j,"hit.wbmp");
var cH = WMLBrowser.getVar("computerHits")*1+1;
WMLBrowser.setVar("computerHits",cH);
if(cH==7) {
Dialogs.alert("Verloren !");
WMLBrowser.setVar("game",0);
}
}
}
Um es auf dem begrenzten Spielfeld nicht allzu leicht zu machen, werden versenkte Schiffe nicht besonders gekennzeichnet. (Ist auch leichter zu programmieren :-)
Download Battleships.zip (mit allen Bildern ca. 2,5 kb)
Copyright © 2002-2003 by wmlscript.de - Alle Rechte vorbehalten
Impressum | Datenschutz | eMail
|