Home
Scripts
Games
   · Battleships
   · BlackJack
   · Zahlen-Puzzle
   · Slotmachine
   · 4 Gewinnt
Referenz
Links
Gäste
Kontakt

< 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


Battleships im
WAP-Browser:

Battleships / Schiffe versenken mit WML und WMLScript

Links die versteckten Schiffe des Computers.
Rechts die halbverdeckten Schiffe des Spielers.

Battleships / Schiffe versenken mit WML und WMLScript 2

Battleships / Schiffe versenken mit WML und WMLScript 3

Battleships / Schiffe versenken mit WML und WMLScript 4

Knapp gewonnen !


Alle angebotenen Spiele können Sie mit einem WAP- und WMLScript-fähigen Entgerät auf

www.wmlscript.de/wap

testen.