JavaScripts -> Fun -> Arsenal Snake (Spiel)

Arsenal Snake ist eine JavaScript-Umsetzung des bekannten Spieles. Lauffähig unter Opera und IE, unter Mozilla nur mit Einschränkungen wegen der Find-As-You-Type-Technologie.

Kompatibilität getestet:
Beispiel Anzeigen >>

Script-Code

<script type="text/javascript">
<!--

// = = ================================================================== = =
// = = Arsenal Snake v1.0 (c) 2003 Triple-M / http://www.htmlarsenal.de = =
// = = ================================================================== = =

// --------------------------------------------------------------------------
// -- Dieses Script und viele andere im --
// -- This script and many more in the --
// --------------------------------------------------------------------------
// -- HTML ARSENAL - Die Quelle für HTML, JavaScript, PHP --
// -- HTML ARSENAL - Your Source for HTML, JavaScript, PHP --
// --------------------------------------------------------------------------
// -- -= http://www.htmlarsenal.de =- --
// --------------------------------------------------------------------------

// Benutzung / Usage
// =================

// Einfach ein Script mit dem Inhalt arsenalsnake(); in den Body-Bereich
// Simply include a script with the content arsenalsnake(); in the body area

// Veränderbare Einstellungen / Adjustable Settings
// ================================================

var bg_color="#000000"; // Hintergrund des Spielfeldes / Background of field
var sn_color="#ffffff"; // Schlangenfarbe / Snake color
var br_color="#ff0000"; // Randfarbe / Border Color
var nu_color="#00ff00"; // Nummernfarbe / Number color
var wa_color="#0000ff"; // Wandfarbe / Wall color

// Script-Code
// ===========

// Ab hier bitte nichts mehr verändern
// Please do not change anything from here on

var td_size=15;
var nu_size=12;

var i,j;
var dx,dy;
var ldx,ldy;
var nx,ny,nn;
var ll;

var field=new Array(40);
for(i=0;i<40;i++) {
  field[i]=new Array(25);
}

var snakex=new Array(100);
var snakey=new Array(100);
var snakel=1;
var snakea=5;

var points=0;
var to=0;
var paused=false;

function down(kevent) {
  var k;
  if(window.event.keyCode)k=window.event.keyCode;
  else k=kevent.which;
  switch (k) {
    case 83: if(ldy!=1) { dx=0; dy=-1; } break;
    case 88: if(ldy!=-1) { dx=0; dy=1; } break;
    case 89: if(ldx!=1) { dx=-1; dy=0; } break;
    case 67: if(ldx!=-1) { dx=1; dy=0; } break;
    default: break;
  }
}

document.onkeydown=down;

function as_empty() {
  for(i=0;i<40;i++) for(j=0;j<25;j++) {
    field[i][j]=false;
  }
}

function arsenalsnake() {

  document.writeln('<style type="text/css">');
  document.writeln('table.as { margin:auto; margin-bottom:10px; border-collapse:collapse; border:5px solid '+br_color+'; width:'+(td_size*40)+'px; height:'+(td_size*25)+'px; table-layout:fixed; }');
  document.writeln('table.as td { border:0px none; width:'+td_size+'px; height:'+td_size+'px; padding:0px; text-align:center; vertical-align:center; background-color:'+bg_color+'; color:'+nu_color+'; font-size:'+nu_size+'px; font-family:Verdana,sans-serif; }');
  document.writeln('table.command { margin:auto; border-collapse:collapse; border:5px solid '+br_color+'; width:'+(td_size*40)+'px; table-layout:fixed; }');
  document.writeln('table.command td.button { border:5px solid '+br_color+'; width:25%; font-family:Verdana,sans-serif; font-size:12px; font-weight:bold; background-color: #c0c0c0; color:#000000; text-align:center; cursor:hand; }');
  document.writeln('table.command td.status { border:5px solid '+br_color+'; width:100%; font-family:Verdana,sans-serif; font-size:12px; background-color: '+bg_color+'; color:'+nu_color+'; text-align:center; }');
  document.writeln('</style>');
  document.writeln('<table class="as">');
  for(i=0;i<25;i++) {
    document.writeln('<tr>');
    for(j=0;j<40;j++) document.writeln('<td id="as_'+j+'_'+i+'">&nbsp;</td>');
    document.writeln('</tr>');
  }
  document.writeln('</table>');
  document.writeln('<table class="command">');
  document.writeln('<tr>');
  document.writeln('<td class="button" onClick="points=0; as_start(0)">Neu starten</td>');
  document.writeln('<td class="button" onClick="as_help();">Hilfe</td>');
  document.writeln('<td class="button" onClick="as_pause()">Pause</td>');
  document.writeln('<td class="button" onClick="window.open(\'http://www.htmlarsenal.de\',\'_blank\',\'location=yes, menubar=no, resizable=yes, scrollbars=yes, status=no, toolbar=yes, maximized=yes\')" >HTML Arsenal</td>');
  document.writeln('</tr>');
  document.writeln('<tr><td id = "status" class="status" colspan="4"> - ARSENAL SNAKE v1.0 -</td></tr>');
  document.writeln('</table>');
  window.setTimeout('document.getElementById("status").firstChild.nodeValue="[s] - oben, [y] - links, [x] - unten, [c] - rechts"',2000);
}

function as_pause() {
  if(to) {
    window.clearTimeout(to);
    to=0;
    paused=true;
  }
  else if(paused) {
    paused=false;
    to=window.setTimeout("as_move()",125);
  }
}

function as_help() {
  w=window.open("","help","location=no, dependant=yes, resizable=no, scrollbars=no, status=no, toolbar=no, width=400, height=300, left="+(screen.availWidth/2-200)+", top="+(screen.availHeight/2-150));
  w.document.open();
  w.document.writeln('<html><head><title>ARSENAL SNAKE HILFE</title><style type="text/css"><!--');
  w.document.writeln('body { background-color:#ffffff; color:#000000; font-family:Verdana,sans-serif; fonts-size:12px; text-align:justify }');
  w.document.writeln('h1 { text-align:center; font-size:16px }');
  w.document.writeln('-'+'->');
  w.document.writeln('</style></head>');
  w.document.writeln('<body>');
  w.document.writeln('<h1>Hilfe zu Arsenal Snake</h1>');
  w.document.writeln('<p>Klicken Sie auf &quot;Neu Starten&quot;, um ein neues Spiel zu starten.</p>');
  w.document.writeln('<p>Steuern Sie Ihre Schlange mit [s],[y],[x] und [c], um sie zu den Zahlen zu führen. Für jede gefressene Zahl gibt es Punkte. Wenn Sie in einem Level die <b>9</b> gefressen haben, wird das nächste Level geladen.</p>');
  w.document.writeln('<p>Insgesamt hat Arsenal Snake 9 Level. Nach dem 9.Level ist das Spiel zu Ende.</p>');
  w.document.writeln('<p style="text-align:center"><a href="javascript:window.close()">[Schließen]</a></p>');
  w.document.writeln('</body></html>');
  w.document.close();
}



function as_distribute(num) {
  var okay=true;
  var x,y,i;
  do {
    okay=true;
    x=Math.floor(Math.random()*40);
    y=Math.floor(Math.random()*25);
    if(field[x][y])okay=false;
    for(i=0;i<snakel;i++) if((x==snakex[i]) && (y==snakey[i])) okay=false;
  } while(okay==false);
  document.getElementById("as_"+x+"_"+y).firstChild.nodeValue=num;
  nx=x;
  ny=y;
  nn=num;
}

function as_level(lev) {
  as_empty();
  switch(lev) {
    case 0: break;
    case 1: for(i=10;i<30;i++) { field[i][5]=true; field[i][20]=true; } break;
    case 2: for(i=0;i<40;i++) if(i<20) { field[i][5]=true; field[i][15]=true;} else {field[i][10]=true; field[i][20]=true; } break;
    case 3: for(i=0;i<19;i++) { field[i][12]=true; field[39-i][12]=true; } break;
    case 4: for(i=0;i<23;i++) { field[10][i]=true; field[20][24-i]=true; field[30][i]=true; } break;
    case 5: for(i=0;i<18;i++) { field[i][12]=true; field[39-i][12]=true; } for(i=0;i<11;i++) { field[19][i]=true; field[20][i]=true; field[19][24-i]=true; field[20][24-i]=true; } break;
    case 6: for(i=0;i<12;i++) { field[10][i]=true; field[30][i]=true; field[10][24-i]=true; field[30][24-i]=true; } field[8][12]=true; field[12][12]=true; field[28][12]=true; field[32][12]=true; break;
    case 7: for(i=0;i<39;i++) { field[i][8]=true; field[39-i][10]=true; field[i][14]=true; field[39-i][16]=true; } for(i=0;i<3;i++) { field[39-i][6]=true; field[i][18]=true; } break;
    case 8: for(i=1;i<39;i++) field[i][12]=true; for(i=1;i<24;i++) {field[19][i]=true; field[20][i]=true;} for(i=0;i<3;i++) { field[3][11+i]=true; field[36][11+i]=true; } for(i=0;i<4;i++) { field[18+i][3]=true; field[18+i][21]=true; } for(i=0;i<2;i++) {field[i][10]=true; field[i][14]=true; field[39-i][10]=true; field[39-i][14]=true; field[17][i]=true; field[22][i]=true; field[17][24-i]=true; field[22][24-i]=true; } break;
  }

  for(i=0;i<40;i++) {
    for(j=0;j<25;j++) {
      if(field[i][j]) document.getElementById("as_"+i+"_"+j).style.backgroundColor=wa_color;
      else document.getElementById("as_"+i+"_"+j).style.backgroundColor=bg_color;
      document.getElementById("as_"+i+"_"+j).firstChild.nodeValue="";
    }
  }
  window.blur();
  window.focus();
}

function as_start(level) {
  if(to)window.clearTimeout(to);
  as_level(level);
  ll=level;
  ldx=dx=1;
  ldy=dy=0;
  snakel=1;
  snakea=5;
  snakex[0]=21;
  snakey[0]=13;
  as_distribute(1);
  document.getElementById("as_21_13").style.backgroundColor=sn_color;
  document.getElementById("status").firstChild.nodeValue="Level "+(level+1)+" gestartet...";
  window.setTimeout('document.getElementById("status").firstChild.nodeValue="Ihre Punktzahl: "+points',2000);
  to=window.setTimeout("as_move()",125);
}

function as_move() {
  var collision=false;
  for(i=snakel+1;i>0;i--) {
    snakex[i]=snakex[i-1];
    snakey[i]=snakey[i-1];
  }
  cx=snakex[0]=snakex[1]+dx;
  cy=snakey[0]=snakey[1]+dy;
  ldx=dx;
  ldy=dy;
  if((cx==nx) && (cy==ny)) {
    document.getElementById("as_"+cx+"_"+cy).firstChild.nodeValue="";
    points+=(ll+1)*10;
    if(nn==9) {
      if(ll==8) {
        document.getElementById("status").firstChild.nodeValue="Sie haben GEWONNEN! Herzlichen Glückwunsch!";
      } else {
        document.getElementById("status").firstChild.nodeValue="Level "+(ll+1)+" beendet!";
        window.setTimeout("as_start("+(ll+1)+")",100);
      }
      to=0;
      return;
    }
    else {
      document.getElementById("status").firstChild.nodeValue="Ihre Punktzahl: "+points;
      as_distribute(nn+1);
      snakea+=5;
    }
  }
  for(i=1;i<snakel;i++) {
    if((cx==snakex[i]) && (cy==snakey[i])) collision=true;
  }
  if((cx<0) || (cx>39) || (cy<0) || (cy>24) || collision || field[cx][cy]) {
    document.getElementById("status").firstChild.nodeValue="Sie haben leider verloren!";
    to=0;
  } else {

    document.getElementById("as_"+cx+"_"+cy).style.backgroundColor=sn_color;
    if(snakea>0) {
      snakel++;
      snakea--;
    } else {
      for(i=0;i<snakel;i++) {
        if((snakex[snakel]==snakex[i]) && (snakey[snakel]==snakey[i])) collision=true;
      }
      if(!collision)document.getElementById("as_"+snakex[snakel]+"_"+snakey[snakel]).style.backgroundColor=bg_color;
    }
    to=window.setTimeout("as_move()",125);
  }
}

// ----------------------------
// -- Ende / End Script-Code --
// ----------------------------
// -- Arsenal Snake --
// -- Author: Triple-M --
// -- www.htmlarsenal.de --
// -- 19.Feb.2004 --
// ----------------------------

//-->
</script>