Quellcode
<SCRIPT type="text/javascript">
function rechts(e)
{
if (document.all)
{
Klick = "links";
if ((event.button == 2) || (event.button == 3))
{
if (event.srcElement.tagName == "IMG") Klick = "rechts";
}
}
else
{
Klick = "links";
if ((e.which == 3) && (e.target.tagName == "IMG"))
{
Klick = "rechts";
return false;
}
else return false;
}
} var variable = window.name;
if (variable!='')
{
var temp1=variable.lastIndexOf("c");
var temp2=variable.lastIndexOf("m");
num_rows=variable.slice(1,temp1);
num_columns=variable.slice(temp1+1,temp2);
num_mines=variable.slice(temp2+1,variable.length);
} else
{
var num_rows=8;
var num_columns=8;
var num_mines=10;
} var current_mines_set=0; var field_number= num_columns * num_rows; var sieg="Congratulations, you won the game!"; var game_status=0; var start; var covered = new Image;
covered.src ="covered.gif";
var no_mine = new Image;
no_mine.src = "0.gif";
var mine1 = new Image;
mine1.src = "1.gif";
var mine2 = new Image;
mine2.src = "2.gif";
var mine3 = new Image;
mine3.src = "3.gif";
var mine4 = new Image;
mine4.src = "4.gif";
var mine5 = new Image;
mine5.src = "5.gif";
var mine6 = new Image;
mine6.src = "6.gif";
var mine7 = new Image;
mine7.src = "7.gif";
var mine8 = new Image;
mine8.src = "8.gif";
var mine = new Image;
mine.src = "9.gif";
var exploded = new Image;
exploded.src = "exploded.gif";
var flag = new Image;
flag.src="flag.gif";
var falsemine = new Image;
falsemine.src="falsemine.gif";
var smileystandard = new Image;
smileystandard.src="smiley1.gif";
var smileypressed = new Image;
smileypressed.src="smiley2.gif";
var smileywon = new Image;
smileywon.src="smiley3.gif";
var smileyloose = new Image;
smileyloose.src="smiley4.gif";
var smiley_o = new Image;
smiley_o.src="smiley5.gif"; var field=new Array();
for (var a=-1; a < num_rows+1; a++)
{
field[a]=new Array();
for (var b=-1; b < num_columns+1; b++)
{
field[a][b]=0;
}
} function Bildwechsel(Bildnr,Bildobjekt)
{
window.document.images[Bildnr].src = Bildobjekt.src;
} function reload()
{
for (var a=-1; a < num_rows+1; a++)
{
for (var b=-1; b < num_columns+1; b++)
{
field[a][b]=0;
}
}
for (var i=0; i < num_rows; i++)
{
for (var j=0; j < num_columns; j++)
{
window.document.images[('Z'+i+'_'+j)].src=covered.src;
}
}
current_mines_set=0;
game_status=0;
field_number= num_columns * num_rows;
document.anzeige.mines.value=num_mines;
document.anzeige.time.value=0;
} function win_game()
{
game_status=3;
window.document.images['smiley'].src = smileywon.src;
for (var zeilen=0; zeilen < num_rows; zeilen++)
{
for (var spalten=0; spalten < num_columns; spalten++)
{
if (field[zeilen][spalten]==9)
{
var image_number='Z'+zeilen+'_'+spalten;
field[zeilen][spalten]+=11;
window.document.images[image_number].src=flag.src;
document.anzeige.mines.value=0;
}
}
}
alert(sieg);
} function lose_game(y,x)
{
game_status=2;
window.document.images['smiley'].src = smileyloose.src;
for (var zeilen=0; zeilen < num_rows; zeilen++)
{
for (var spalten=0; spalten < num_columns; spalten++)
{
var image_number='Z'+zeilen+'_'+spalten;
switch (field[zeilen][spalten])
{
case 9:
if ((zeilen==y) && (spalten==x))
window.document.images[image_number].src=exploded.src;
else window.document.images[image_number].src=mine.src;
break;
case 29:
window.document.images[image_number].src=flag.src;
break;
default:
if ((field[zeilen][spalten]>19) && (field[zeilen][spalten]<29))
window.document.images[image_number].src=falsemine.src;
break;
}
}
}
} function initialisierung(no_mine_y,no_mine_x)
{ game_status=1; var random_factor=eval(0.1 /( num_rows / num_mines * num_columns)); while (current_mines_set < num_mines)
{
for (var zeilen=0; zeilen < num_rows; zeilen++)
{
if (current_mines_set == num_mines) break;
for (var spalten=0; spalten < num_columns; spalten++)
{ if ((current_mines_set < num_mines) && (field[zeilen][spalten]!=9) &&
(Math.random() < random_factor) && ((spalten!=no_mine_x) || (zeilen!=no_mine_y)))
{ field[zeilen][spalten]=9;
current_mines_set++;
}
}
}
} for (zeilen=0; zeilen < num_rows; zeilen++)
{
for (spalten=0; spalten < num_columns; spalten++)
{
if (field[zeilen][spalten]==9)
{
if (field[zeilen-1][spalten-1]!=9) field[zeilen-1][spalten-1]++;
if (field[zeilen-1][spalten]!=9) field[zeilen-1][spalten]++;
if (field[zeilen-1][spalten+1]!=9) field[zeilen-1][spalten+1]++;
if (field[zeilen][spalten-1]!=9) field[zeilen][spalten-1]++;
if (field[zeilen][spalten+1]!=9) field[zeilen][spalten+1]++;
if (field[zeilen+1][spalten-1]!=9) field[zeilen+1][spalten-1]++;
if (field[zeilen+1][spalten]!=9) field[zeilen+1][spalten]++;
if (field[zeilen+1][spalten+1]!=9) field[zeilen+1][spalten+1]++;
}
}
} start = new Date();
} function show_neighbours(y,x,remote)
{
if (field[y-1][x-1] < (9+remote)) show_field(y-1,x-1);
if (field[y-1][x] < (9+remote)) show_field(y-1,x);
if (field[y-1][x+1] < (9+remote)) show_field(y-1,x+1);
if (field[y][x-1] < (9+remote)) show_field(y,x-1);
if (field[y][x+1] < (9+remote)) show_field(y,x+1);
if (field[y+1][x-1] < (9+remote)) show_field(y+1,x-1);
if (field[y+1][x] < (9+remote)) show_field(y+1,x);
if (field[y+1][x+1] < (9+remote)) show_field(y+1,x+1);
} function show_field(y,x)
{ if (game_status<2)
{ if (game_status==0) initialisierung(y,x); var image_number='Z'+y+'_'+x; if ((field[y][x] > 10) && (field[y][x] < 19))
{
var surrounding_flags=0;
if (field[y-1][x-1] > 19) surrounding_flags++;
if (field[y-1][x] > 19) surrounding_flags++;
if (field[y-1][x+1] > 19) surrounding_flags++;
if (field[y][x-1] > 19) surrounding_flags++;
if (field[y][x+1] > 19) surrounding_flags++;
if (field[y+1][x-1] > 19) surrounding_flags++;
if (field[y+1][x] > 19) surrounding_flags++;
if (field[y+1][x+1] > 19) surrounding_flags++;
if ((surrounding_flags+10)==field[y][x]) show_neighbours(y,x,1);
} if ((field[y][x] < 10) && (y >= 0) && (y < num_rows) && (x >= 0) && (x < num_columns))
{
switch (field[y][x])
{
case 0:
window.document.images[image_number].src=no_mine.src;
break;
case 1:
window.document.images[image_number].src=mine1.src;
break;
case 2:
window.document.images[image_number].src=mine2.src;
break;
case 3:
window.document.images[image_number].src=mine3.src;
break;
case 4:
window.document.images[image_number].src=mine4.src;
break;
case 5:
window.document.images[image_number].src=mine5.src;
break;
case 6:
window.document.images[image_number].src=mine6.src;
break;
case 7:
window.document.images[image_number].src=mine7.src;
break;
case 8:
window.document.images[image_number].src=mine8.src;
break;
case 9:
lose_game(y,x);
break;
} field_number--;
if ((field_number==num_mines) && (field[y][x]!=9)) win_game();
field[y][x]+=10;
if (field[y][x]==10) show_neighbours(y,x,0);
}
}
} function toggle_flag(y,x)
{
var image_number='Z'+y+'_'+x;
if (field[y][x]<10)
{
field[y][x]+=20;
window.document.images[image_number].src=flag.src;
document.anzeige.mines.value--;
}
else if (field[y][x]>19)
{
field[y][x]-=20;
window.document.images[image_number].src=covered.src;
document.anzeige.mines.value++;
}
} function look(y,x)
{
if (game_status<2) window.document.images['smiley'].src = smileystandard.src;
if (game_status>1)
{
}
else
{
if (game_status > 0)
{
time = new Date();
usertime=Math.floor(eval( ((time.getTime() - start.getTime())) / 1000));
document.anzeige.time.value=usertime;
}
if (Klick == "rechts") toggle_flag(y,x);
else show_field(y,x);
}
}
</SCRIPT> <FORM name="anzeige" action="" onsubmit="loadwinmine()">
<TABLE cellpadding="0" cellspacing="0">
<TR>
<TD height="12" width="12" style="background-image:URL('topleft.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="12" style="background-image:URL('top.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="12" width="12" style="background-image:URL('topright.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
</TR>
<TR>
<TD height="33" width="12" style="background-image:URL('left1.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="33" bgcolor="#C0C0C0" align="left">
<IMG width="1" height="1" src="spacer.gif" alt="">
<TABLE width="100%">
<TR>
<TD align="center">
<INPUT style="font-weight:bold; font-family:'System'; color:#FF0000; background-color:#000000; border-top-color:#808080; border-left-color:#808080; border-bottom-color:#C0C0C0; border-right-color:#C0C0C0; " type="Text" name="mines" value="num_mines" maxlength="3" size="3" readonly>
</TD>
<TD align="center" width="75%">
<IMG src="smiley1.gif" name="smiley" onmousedown="Bildwechsel(5,smileypressed); " onclick="reload(); " onmouseup="Bildwechsel(5,smileystandard)" ALT="Smiley">
</TD>
<TD align="center">
<INPUT style="text-align:right; font-weight:bold; font-family:'System'; color:#FF0000; background-color:#000000; border-top-color:#808080; border-left-color:#808080; border-bottom-color:#C0C0C0; border-right-color:#C0C0C0; " type="Text" name="time" value="num_mines" maxlength="3" size="3" readonly>
</TD>
</TR>
</TABLE>
</TD>
<TD height="33" width="12" style="background-image:URL('right1.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
</TR>
<TR>
<TD height="10" width="12" style="background-image:URL('middleleft.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="10" style="background-image:URL('middle.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="10" width="12" style="background-image:URL('middleright.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
</TR>
<TR>
<TD width="12" style="background-image:URL('left2.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD bgcolor="#C0C0C0">
<SCRIPT type="text/javascript"> document.onmousedown=rechts;
document.onclick=rechts;
document.body.oncontextmenu = Function("rechts(); return false; ");
document.anzeige.mines.value=num_mines;
document.anzeige.time.value=0;
for (var i=0; i < num_rows; i++)
{
for (var j=0; j < num_columns; j++)
{
document.write('<IMG src="covered.gif" onMouseDown="rechts; if (game_status<2) { window.document.images[\'smiley\'].src = smiley_o.src; }" onMouseup="look('+i+','+j+')" alt="field" name="Z'+i+'_'+j+'">');
}
document.write('<BR>');
}
</SCRIPT>
</TD>
<TD width="12" style="background-image:URL('right2.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
</TR>
<TR>
<TD height="12" width="12" style="background-image:URL('bottomleft.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="12" style="background-image:URL('bottom.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
<TD height="12" width="12" style="background-image:URL('bottomright.gif')" bgcolor="#C0C0C0">
<IMG width="1" height="1" src="spacer.gif" alt="">
</TD>
</TR>
</TABLE>
</FORM> |
Die erste Funktion prüft die Klicks mit der rechten Maustaste. Es ist notwendig, hier zwischen Mozilla/Netscape und Internet Explorer zu unterscheiden, da diese Mausklicks unterschiedlich handhaben (einer der Unterschiede zwischen dem JavaScript von MS und Netscape).