// ** Memory Version 1.1 (c)2002 von Neni Milosevic **

// ** Dieser Code steht der Webgemeinde zur freien Verfügung, **

// ** Sie können also damit machen, was Sie wollen :-). **



// Die Anzahl Memory-Felder können Sie beliebig erweitern. Wichtig

// ist nur, dass Sie eine entsprechend grosse Tabelle erstellen mit

// der jeweiligen Anzahl Zellen und Bildern darin. Die Anzahl der

// Bilddateien beträgt die Hälfte der Anzahl Zellen (ist ja klar ;-)),

// und die Bilddateien müssen als Dateinamen bild0.gif bis bildX.gif 

// (das X steht hier für die Anzahl Bilddateien minus 1) haben und sich

// im gleichen Ordner befinden wie die HTML-Datei. Ferner braucht es noch

// die Anfangsbilddatei (verdeckte Felder), welche einfach bild.gif

// heissen muss. Wie in diesem Beispiel zu sehen, muss jedes Bild einen 

// Namen (name ="xyz") als Attribut im HTML-Code haben, der bild0 bis

// bildX (X hier Anzahl Felder minus 1) lauten muss, also z.B. name="bild5".

// Ferner muss im Link-Eintrag für jedes Memory-Bild folgender Code stehen:

// javascript:openimg(n); wobei n die Nummer des Bildes ist, also 0 bis

// Anzahl Felder minus 1.



// Hier werden einige Variablen und Arrays definiert.



var maximgs = 16; // Diese Variable muss der Anzahl Felder entsprechen,

                  // sie muss jeweils als einzige angepasst werden.



bilder = new Array(); //Bilderarray

memarray = new Array(); //Array mit den Bildpositionen

memopen = new Array(); //Array das speichert, ob ein Bild aufgedeckt ist.

maxi = Math.round(maximgs / 2); //die Hälfte der Feldanzahl

startbild = new Image();

startbild.src = "bild.jpg";





// Alle Arrays werden zu Anfang gefüllt. Die Bilder werden der Reihe nach

// eingefüllt.



for (i=0; i<maxi; i++) {

	bilder[i] = new Image();

	bilder[i].src = "bild" + i + ".jpg";

	memarray[i] = i; //Positionen der Reihe nach vergeben

	memarray[i+maxi] = i; //die zweite Felderhälfte entspricht am Anfang der ersten

	memopen[i] = 0; //Alle Bilder noch verdeckt...

	memopen[i+maxi] = 0;

}

var img1open = -1; //Position des ersten aufgedeckten Bildes in einem Versuch

var img2open = -1; //Position des zweiten umgedrehten Bildes in einem Versuch

var trycounter = 0; //der Versuchszähler





// Wir mischen die Karten! Der Mischvorgang geht so, dass mehrere Male zufällig

// zwei Bildpositionen ausgewählt und jeweils paarweise ausgetauscht werden.

// Die Funktion wird beim Laden der Seite (onload) und beim Klicken auf den

// Knopf "Neu mischen" aufgerufen.



function neumischen() {

	for (i=0; i<maximgs; i++) {

		memopen[i] = 0; //Alle Bilder wieder verdeckt

		bildstring = "bild" + i; //Allen Bildern wird wieder das Startbild zugewiesen...

		window.document.images[bildstring].src = startbild.src;

	}

	supermaxi = maximgs * 2; //Anzahl der paarweisen Tauschvorgänge: das Doppelte der Felderzahl

	for (i=0; i<supermaxi; i++) {

		rndimgno1 = Math.round(Math.random() * (maximgs-1)); //erstes Feld zufällig auswählen

		rndimgno2 = Math.round(Math.random() * (maximgs-1)); //zweites Feld zufällig auswählen

		if (rndimgno1 == rndimgno2) { //Austausch eines Feldes mit sich selbst vermeiden...

			if (rndimgno2 == (maximgs-1)) rndimgno2--;

			else rndimgno2++;

		}

		tempmem = memarray[rndimgno1]; //ab hier wird ausgetauscht...

		memarray[rndimgno1] = memarray[rndimgno2];

		memarray[rndimgno2] = tempmem;

	}

	img1open = -1; //Werte zurücksetzen...

	img2open = -1;

	trycounter = 0;

//Versuchszähler in Textfeld ausgeben

	window.document.forms["form1"].elements["text1"].value = trycounter;

}





//Diese Funktion wird beim Anklicken eines Bildes aufgerufen und dient zum Aufdecken.



function openimg(imgno) { //die Position des angeklickten Feldes wird übergeben (imgno)

	if (memopen[imgno] == 1) return; //wenn bereits aufgedecktes Bild geklickt wird, nix machen!

	if ((img1open != -1) && (img2open != -1)) { //falls zwei Bilder aufgedeckt worden sind, hier weiter...

		if (memarray[img1open] != memarray[img2open]) { //sind die beiden Bilder ungleich, dann...

			bildstring = "bild" + img1open; //...müssen sie zurückgesetzt werden...

			window.document.images[bildstring].src = startbild.src;

			memopen[img1open] = 0;

			bildstring = "bild" + img2open;

			window.document.images[bildstring].src = startbild.src;

			memopen[img2open] = 0;

		}

//wenn sie allerdings gleich sind, dann dürfen sie offen bleiben,

//nur die Aufgedeckt-Marker für den Versuch müssen zurückgesetzt werden.

		img1open = -1;

		img2open = -1;

	}

	if (imgno == -1) return; //Frühausstieg bei Timeout-Aufruf

	if (img1open == -1) { //falls noch kein Bild aufdedeckt wurde in diesem Versuch, hier weiter...

		img1open = imgno; //den Aufgedeckt-Marker auf die Feldposition setzen.

		bildstring = "bild" + img1open; //erstes Bild aufdecken...

		window.document.images[bildstring].src = bilder[memarray[img1open]].src;

		memopen[img1open] = 1; //Versuchsübergreifende Aufgedeckt-Position speichern

		trycounter++; // Versuchszähler um eins erhöhen...

		window.document.forms["form1"].elements["text1"].value = trycounter; //...und ausgeben

		return; //Funktion vorzeitig verlassen

	}

	if (img2open == -1) { //falls erst ein Bild aufgedeckt wurde in diesem Versuch, hier weiter...

		img2open = imgno; //Aufgedeckt-Marker auf Feldposition setzen

		bildstring = "bild" + img2open; //zweites Bild aufdecken...

		window.document.images[bildstring].src = bilder[memarray[img2open]].src;

		memopen[img2open] = 1; //Versuchsübergreifende Aufgedeckt-Position speichern

		setTimeout("openimg(-1)", 3000); //rekursivaufruf der Funktion mittels Timeout um nach...

                                     //... 2 sec. falsch aufgedeckte Felder wieder zuzudecken.

	}

}

		
									


