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

< 4 Gewinnt >


Das Strategiespiel 4 Gewinnt mit WML und WMLScript.

An der Spielintelligenz des Programms kann noch gearbeitet werden. Es beherrscht die grundlegenden Regeln, sowie einige Finessen und wird ansonsten weitgehend vom Zufall gesteuert.

WAP-Standard: 1.1+

4gewinnt.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="vg1" title="4 Gewinnt" ontimer="4gewinnt.wmls#init()">
    <timer value="1"/>
    <p>Programm wird geladen ...</p>
  </card>

  <card id="vg2" title="4 Gewinnt">
    <p align="center">
    <small>
      <table columns="7">
        <tr>
          <td>$(a14)</td>
          <td>$(a24)</td>
          <td>$(a34)</td>
          <td>$(a44)</td>
          <td>$(a54)</td>
          <td>$(a64)</td>
          <td>$(a74)</td>
        </tr>
        <tr>
          <td>$(a13)</td>
          <td>$(a23)</td>
          <td>$(a33)</td>
          <td>$(a43)</td>
          <td>$(a53)</td>
          <td>$(a63)</td>
          <td>$(a73)</td>
        </tr>
        <tr>
          <td>$(a12)</td>
          <td>$(a22)</td>
          <td>$(a32)</td>
          <td>$(a42)</td>
          <td>$(a52)</td>
          <td>$(a62)</td>
          <td>$(a72)</td>
        </tr>
        <tr>
          <td><a href="4gewinnt.wmls#insert(1)">$(a11)</a></td>
          <td><a href="4gewinnt.wmls#insert(2)">$(a21)</a></td>
          <td><a href="4gewinnt.wmls#insert(3)">$(a31)</a></td>
          <td><a href="4gewinnt.wmls#insert(4)">$(a41)</a></td>
          <td><a href="4gewinnt.wmls#insert(5)">$(a51)</a></td>
          <td><a href="4gewinnt.wmls#insert(6)">$(a61)</a></td>
          <td><a href="4gewinnt.wmls#insert(7)">$(a71)</a></td>
        </tr>
      </table>
      </small>
    </p>
    <p><a href="4gewinnt.wml">Neues Spiel</a></p>
  </card>

</wml>

Die unterste Zelle einer Spalte ist zugleich der Link, der den Einwurf eines Spielsteins in diese Spalte auslöst.


4gewinnt.wmls

extern function init() {
  var i, j;

  // alle 28 Zellen von a11 bis a74 mit "~" initialisieren
  for(i=1;i<8;i++) {
    for(j=1;j<5;j++) WMLBrowser.setVar("a"+i+j,"~");
  }

  WMLBrowser.setVar("game",1);
  WMLBrowser.go("4gewinnt.wml#vg2");
}


extern function insert(col) {
  // col ist die Spalte, in der der aktuelle
  // Spielstein eingeworfen wurde.
  var i, j;

  if(WMLBrowser.getVar("game")=="xxxx") {
    Dialogs.alert("Game Over\nDu hast gewonnen !");
    Lang.exit("");
  }
  else if(WMLBrowser.getVar("game")=="oooo") {
    Dialogs.alert("Game Over\nIch habe gewonnen !");
    Lang.exit("");
  }

  // keine Zelle mehr frei
  for(i=1;i<8;i++) {
    if(WMLBrowser.getVar("a"+i+4)=="~") i=8;
    if(i==7) {
      Dialogs.alert("Game Over\nUnentschieden !");
      Lang.exit("");
    }
  }

  // Spalte ist voll
  i=col*1;
  if(WMLBrowser.getVar("a"+i+4)!="~") {
    Dialogs.alert("Das geht nicht !");
    Lang.exit("");
  }

  // Spielstein einwerfen
  for(j=1;j<5;j++) {
    // wenn das gewählte Feld frei ist
    if(WMLBrowser.getVar("a"+i+j)=="~") {
      // es besetzen
      WMLBrowser.setVar("a"+i+j,"x");
      // und prüfen, ob ein 4er vorliegt
      if(check4(i,j,"x")=="x"){
        Dialogs.alert("Du hast gewonnen !");
        WMLBrowser.setVar("game","xxxx");
      }
      // anderenfalls Zug des Programms ausführen
      else pcMove();
      j=4;
    }
  }	

  // Neue Spiel-Situation anzeigen
  WMLBrowser.go("4gewinnt.wml#vg2");
}


function check4(c0,r0,p) {
  var i, j, k;

  // Für den eingeworfenen Stein im Feld (c0,r0) prüfen, ob
  // dieser auf einer Seite drei gleiche Nachbarn ("x" bzw. "o"),
  // oder zwei gleiche Nachbarn auf der einen Seite und
  // einen auf der anderen Seite besitzt.
  for(i=-1;i<2;i++) {
    for(j=-1;j<2;j++) {
      if(i!=0) k=0; else k=1,j=1;
      if(
      WMLBrowser.getVar("a"+(c0-1*i)+(r0+1*i*j-1*k))==p && 
      WMLBrowser.getVar("a"+(c0-2*i)+(r0+2*i*j-2*k))==p && (
      WMLBrowser.getVar("a"+(c0-3*i)+(r0+3*i*j-3*k))==p ||
      WMLBrowser.getVar("a"+(c0+1*i)+(r0-1*i*j+1*k))==p))
        return p;
    }
  }
}


function check3(i,j) {
  // Prüft, ob von 5 waagerecht nebeneinander liegenden Zellen,
  // die äußeren beiden frei sind und von den mittleren 3
  // Zellen 2 von "x" besetzt sind und ein 3er bzw. 4er droht.
  // Also:  ~ x x ~ ~ oder ~ ~ x x ~ oder ~ x ~ x ~
  if(
  WMLBrowser.getVar("a"+i+j)=="~" &&
  WMLBrowser.getVar("a"+i+(j-1))!="~" &&
  WMLBrowser.getVar("a"+(i+4)+j)=="~" &&
  WMLBrowser.getVar("a"+(i+4)+(j-1))!="~") {
    var k;
    for(k=0;k<3;k++) {
      if(
      WMLBrowser.getVar("a"+(i+(k+0)%3+1)+j)=="x" &&
      WMLBrowser.getVar("a"+(i+(k+1)%3+1)+j)=="x" &&
      WMLBrowser.getVar("a"+(i+(k+2)%3+1)+j)=="~" &&
      WMLBrowser.getVar("a"+(i+(k+2)%3+1)+(j-1))!="~")
        return k;
    }
    return -1;
  }
}


function pcMove() {
  var i, j, i4x=0, j4x;

  for(i=1;i<8;i++) {
    for(j=1;j<5;j++) {
      // Prüfen, ob das gewählte Feld frei ist
      if(WMLBrowser.getVar("a"+i+j)=="~") {
        // Ob ein 4er komplettiert wird
        if(check4(i,j,"o")=="o") {
          WMLBrowser.setVar("a"+i+j,"o");
          Dialogs.alert("Ich habe gewonnen !");
          WMLBrowser.setVar("game","oooo");
          return;
        }
        // Merken, ob ein 4er verhindert werden kann
        else if(check4(i,j,"x")=="x") {
          i4x=i, j4x=j;
        }
        j=4;
      }
    }
  }

  // ggf. 4er verhindern
  if(i4x!=0) {
    WMLBrowser.setVar("a"+i4x+j4x,"o");
    return;
  }

  // Prüft, ob ein 3er mit Option auf einen sicheren 4er
  // verhindert werden kann
  var k, r, v=0;
  for(i=1;i<4;i++) {
    for(j=1;j<5;j++) {
      k=check3(i,j);
      if(k==-1) j=4;
      // wenn ~ x x ~ ~ oder ~ ~ x x ~
      else if(k==0||k==1) {
        while(v<10) {
          r = Lang.random(1);
          if(check4(i+k+(r*3),j+1,"x")!="x") {
            WMLBrowser.setVar("a"+(i+k+(r*3))+j,"o");
            return;
          }
          v++;
        }
      }
      // wenn ~ x ~ x ~
      else if(k==2) {
        v=0,r=1;
        while(v<10) {
          if(check4(i+r*2,j+1,"x")!="x") {
            WMLBrowser.setVar("a"+(i+r*2)+j,"o");
            return;
          }
          r = Lang.random(1)*2;
          v++;
        }
      }
    }
  }

  // Wenn möglich, die beste Position sichern
  if(WMLBrowser.getVar("a41")=="~" && Lang.random(2)>0) {
    WMLBrowser.setVar("a41","o");
    return;
  }

  // Zufällige Wahl der Spalte (1 bis 7),
  // ohne dem Spieler, zu einem 4er zu verhelfen.
  v=0;
  while(1>0) {
    r=Lang.random(6)+1;
    for(j=1;j<5;j++) {
      if(WMLBrowser.getVar("a"+r+j)=="~") {
        if(check4(r,j+1,"x")!="x" || v>20) {
          WMLBrowser.setVar("a"+r+j,"o");
          return;
        }
        j=4;
      }
    }
    v++;
    // ist notwendig, um eine Endlosschleife zu verhindern,
    // falls eine unfreiwillige Hilfe unvermeidbar ist.
  }
}

Die verschiedenen Zufallsfunktionen, sollen eine allzu große Berechenbarkeit des Programms vermeiden.


Download  4Gewinnt.zip (ca. 2,5 kb)




Copyright © 2002-2003 by wmlscript.de - Alle Rechte vorbehalten
Impressum | Datenschutz | eMail


4 Gewinnt im
WAP-Browser:

4 Gewinnt mit WML und WMLScript

4 Gewinnt mit WML und WMLScript 2

4 Gewinnt mit WML und WMLScript 3


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

www.wmlscript.de/wap

testen.