eKiwi

Füge das folgende Script in den body-Bereich deiner HTML-Seite ein:

 

<SCRIPT LANGUAGE="JavaScript1.1">
function preload() {
this.length = preload.arguments.length;
for (var i = 0; i < this.length; i++) {
this[i] = new Image();
this[i].src =preload.arguments[i];
}
}
var pics = new preload("disk1.gif","disk2.gif",
"disk3.gif","disk4.gif","disk5.gif","disk6.gif",
"disk7.gif","pole.gif", "disk1h.gif","disk2h.gif",
"disk3h.gif","disk4h.gif","disk5h.gif","disk6h.gif",
"disk7h.gif");
var selectedr = null;
var selectedc = null;
var maxposts = 3;
var maxdisks = 7;
var all_posts = 3;
var startpost = 1;
var endpost = (startpost-1 < 0 ? maxposts-1 : startpost-1);
var disks = 7;
var imgwidth = 160;
var imgheight = 14;
var game_is_over = false;
var board = new Array(maxposts);
board[0] = new Array(maxdisks + 1);
board[1] = new Array(maxdisks + 1);
board[2] = new Array(maxdisks + 1);
function initboard(startpost, disks) {
var len = board[0].length;
selectedc = null;
selectedr = null;
game_is_over = false;
endpost = (startpost-1 < 0 ? maxposts-1 : startpost-1);
for (i = 0; i < len; i++) {
board[0][i] = 0;
board[1][i] = 0;
board[2][i] = 0;
}
for (i = len-disks, j = 0; i < len; i++, j++) {
board[startpost][i] = len - j - 1;
}
}
function drawall() {
for (j=0; j<board.length; j++) {
for (i=0; i<board[j].length; i++) {
draw(j,i, getName( board[j][i]));
}
}
message("Versuche den Stapel Scheiben auf einen anderen Pfahl zu legen.");
}
function restart(start) {
startpost = start;
disks = document.forms[0].disc.options[document.forms[0].disc.selectedIndex].text;
initboard(startpost,disks);
drawall();
}
initboard(startpost, disks);
function getName( num ) {
if (num == 0) return "post.gif";
return "disk" + num + ".gif";
}
function message(str) {
if (!game_is_over)
document.disp.message.value = str;
}
function isempty(num) {
for (i = 0; i < board[num].length; i++) {
if ( board[num][i] != 0) return false;
}
return true;
}
function topmost(num) {
for (i = 0; i < board[num].length; i++) {
if (board[num][i] != 0) return i;
}
return -1;
}
function ispost(i,j) {
return (board[j][i] == 0);
}
function istopdisk(i,j) {
return (board[j][i-1] == 0);
}
function drawboard() {
document.writeln ("<CENTER>");
document.write("<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0>");
document.write("<tr>");
for (j = 0; j < board.length; j++) {
document.write("<td>");
document.write("<a href='javascript:clicked("+0+","+j+")'><img src='posttop.gif' border=0></a><br>");
for (i=0; i< board[0].length; i++) {
document.write("<a href='javascript:clicked("+i+","+j+")'>");
document.write("<img src='" + getName(board[j][i]) + "' name='pos"+ j + i + "' border=0><br>");
document.write("</a>");
}
document.writeln("</td>");
}
document.write("</tr></table>");
document.write("<form name='disp'><textarea name='message' wrap=virtual rows=2 cols=40></textarea><br>" +
"Scheiben: <select name=\"disc\" size=1><option>3<option>4<option>5<option>6<option selected>7</select><input "
+"type=button value=\"Spiel starten.\" onClick=\"restart(startpost);\"><input "
+"type=button value=\"Lösen!\" onClick=\"restart(startpost);setTimeout('hanoi(disks,startpost,endpost)',400)\"></form>");
}
function draw(x,y,name) {
document.images["pos"+x+""+y].src = "" + name;
}
function clicked(i,j) {
document.forms[0].message.focus(); // get rid of annoying outline in MSIE
if (game_is_over) restart(startpost = endpost);
if (!isselection() && ispost(i,j)) { message("Wähle eine Scheibe."); return; }
if (!ispost(i,j)) { toggle(j); return; };
if (ispost(i,j) && selectedc == j) { message("Lege die Scheibe auf einen Pfahl."); return; }
if (!legalmove(j)) { message("Illegaler Zug, die grössten Scheiben müssen immer unten liegen."); return; }
move(j); return;
}
function legalmove(j) {
if (isempty(j)) return true;
return (board[j][topmost(j)] < board[selectedc][selectedr]);
}
function isselection() {
return selectedc != null;
}
function toggle( num ) {
var toppos = topmost(num);
if (selectedc == num && selectedr == toppos) {
selectedc = null; selectedr = null;
draw(num,toppos,"disk" + board[num][toppos] + ".gif");
message("Wähle eine Scheibe.");
return;
}
if (isselection()) {
draw(selectedc,selectedr,"disk" + board[selectedc][selectedr] + ".gif");
}
selectedc = num; selectedr = toppos;
draw(num,toppos,"disk" + board[num][toppos] + "h.gif");
message("Klicke auf einen Pfahl, auf den die Scheibe gelegt werden soll.");
}
function move( num ) {
var toppos = (!isempty(num) ? topmost(num) : board[num].length);
board[num][toppos-1] = board[selectedc][selectedr];
board[selectedc][selectedr] = 0;
draw(selectedc,selectedr,"post.gif");
draw(num,toppos-1,"disk" + board[num][toppos-1] + ".gif");
selectedc = null; selectedr = null;
message("Wähle eine Scheibe.");
game_over();
}
function hanoi(no_of_disks, start_post, goal_post) {
if (no_of_disks > 0) {
var free_post = all_posts - start_post - goal_post;
hanoi (no_of_disks - 1, start_post, free_post);
toggle(start_post);
delay(1000);
move(goal_post);
delay(1000);
hanoi (no_of_disks - 1 , free_post, goal_post);
}
}
function delay(num) {
for (i = 0; i < num; i++) ;
}
function game_over() {
var filledpost = null;
var val = 0;
for (k = 0; k < board.length; k++) {
val += ( isempty(k) ? 1 : 0 );
if (!isempty(k)) filledpost = k;
}
if (val == 2 && isempty(startpost)) {
message("Du hast es geschafft, Yippi!");
game_is_over = true;
endpost = filledpost;
}
return game_is_over;
}
drawboard();
message("Versuche den Stapel Scheiben auf einen anderen Pfahl zu legen.");
// -->
</script>
 

Speichere außerdem die folgenden Bilder im selben Verzeichnis wie deine HTML-Datei (ändere nicht die Dateinamen):

 

 

 

 

 

 

 

 

  

 

 

Hinweis: Wenn du dir hier die Quelltexte kopierst, dann füge sie am besten mit einen Texteditor in dein HTML-Dokument ein, da die meisten Webeditoren es als normalen Text interpretieren.
 



Copyright Dunkel & Iwer GbR - Alle Rechte vorbehalten