﻿ //Variable zum speichern des Klicks auf die erste bzw. zweite Karte
wahl1=0 
wahl2=0
 //Wartezustand waehrend der Bildanzeige
warten=false 
//Gewuenschste Zahl der Bilder in der Waagerechten und Senkrechten
spielfeldbreite=4 
spielfeldhoehe=4 
//Variable zum Abspeichern der gefundenen  Kartenpaerchen
treffer=0  
//Variable zum Zaehlen der Spielzuege
spielzuege=0  

//Hier die Bilder aufuehren (das erste hier genannte Bild ist das Deckblatt)
bilder=new Array("memory0.gif", "memory1.gif", "memory2.gif","memory3.gif" ,"memory4.gif", "memory5.gif", "memory6.gif", "memory7.gif", "memory8.gif")
paare=bilder.length/2  //anzhal Moeglicher Paerchen errechnen
//hier werden die Bildobjecte erstelt und die bIlder vorgeladen
obilder=new Array()  
obilder[0]=new Image()
obilder[0].src=bilder[0]
x=1
for(i=1;i<(bilder.length*2)-1;i++)
{
obilder[i]=new Image()
obilder[i].src=bilder[x]
x++
if(x>bilder.length-1)
x=1
}

//Diese Funktion wird beim Klicken auf die Bilder ausgefuehrt
function clicker(nam)
{
//nur reagieren wenn:
//a) das bild noch nicht aufgedeckt wurde
//b) das spiel nicht im Wartezustand befindet
if(document.images['b'+nam].src.indexOf(bilder[0])!=-1&&warten==false)
{
 //Klick zaehlen
spielzuege++ 
//geklickte Karte aufdecken
document.images['b'+nam].src=obilder[anzahl[nam]].src

//wenn der erste von 2 Klicks
if(wahl1==0)
 //geklickte Bildnummer der Variablen wahl1 zuweisen
wahl1=nam 
else  
 //sonst die geklickte Bildnummer der variablen wahl2 zuweisen
wahl2=nam

//wenn wahl1 einen Wert hat und Wahl2 einen Wert hat, wahl1 und 2 aber nicht das gleiche Bild haben
if(wahl1!=0 &&wahl2!=0&&document.images["b"+wahl1].src!=document.images["b"+wahl2].src)
{
warten=true  // Bilder anzeigen Wartezustand auf true setzen
/*Funktion zum Verdecken der Bilder zeitverzoegert aufrufen
waehrend dieser Zeit ausgefuehrte Klicks werden ignoriert*/
setTimeout("zuruecksetzen(wahl1,wahl2)",1000)
}
//wahl1 und wahl2 haben einen wert und die Bilder sind gleich
else if(wahl1!=0 &&wahl2!=0&&document.images["b"+wahl1].src==document.images["b"+wahl2].src)
{
treffer++  //gefundene Paerchen hochzaehlen
wahl1=0 //Variablen zuruecksetzen
wahl2=0
//Maximale Paerchenzahl gefunden, spiel beenden
if(treffer==bilder.length-1)
{
alert("Fertig mit: " +parseInt(spielzuege/2) +" Spielzügen")
}
}
}
}
//zwei Karten wurden aufgedeckt, keine Übereinstimmung, Karten wieder zudecken
function zuruecksetzen(nr1,nr2)
{
document.images['b'+nr1].src=obilder[0].src
document.images['b'+nr2].src=obilder[0].src
wahl1=0
wahl2=0
warten=false   //Wartezustand beenden, Klicks wieder freigeben
}

// bilder nach zufall den spielfeldern zuordnen
function mischen()
{
for(i=1;i<obilder.length;i++)
{
document.images["b"+i].src=bilder[0]
}

treffer=0
spielzuege=0
anzahl=new Array((obilder.length))

for(i=0;i<anzahl.length;i++)
{
anzahl[i]=i
}

for(i=1;i<anzahl.length;i++)
{
 zuf= Math.ceil(Math.random()*(anzahl.length-1));
karte=anzahl[zuf]
anzahl[zuf]=anzahl[i]
anzahl[i]=karte
}
}


// Schiebe-Puzzle
// Die Liste mit den Bildern (unbedingt das leer-Bild einbauen)
var BildListe = new Array( "img11.jpg", "img21.jpg", "img31.jpg",
                           "img12.jpg", "img22.jpg", "img32.jpg",
                           "img13.jpg", "img23.jpg", "leer.jpg" );
// Anzahl der Zeilen und Zeilen
var Zeilen  = 3;		
var Spalten = 3; 		
// Koordinaten vom LeerBild
var LeerX = 3;
var LeerY = 3;
// Anzahl der Mischvorgaenge
var MaxMischen = 50;
// SpielStand
var SpielModus = "off";
// -----   Angleichungen fuer die Parameter
var LeerA = LeerX;
var LeerB = LeerY;
var LeerPosistion = ((LeerY - 1) * Spalten) + (LeerX - 1);
var BildAnzahl = BildListe.length;	
var loaded = 0;
var TempListe = new Array(BildAnzahl);

// -----   Funktionen
// Initialisierung des Puzzles
function Laden() {
 loaded = 1;
 NeuStart();
}
function SetzeBild(index, Source){
 var i = index + 1;
 document.images['img'+i].src = Source ;
}
// Karte Verschieben
function Schiebe( xpos, ypos ) {
 // Abbruch, wenn das LeerBild angeklickt wurde
 if (( xpos == LeerA ) && ( ypos == LeerB ))
 return;
 // Pruefen, ob das Leer-Bild in der selben Zeile liegt
 if (ypos == LeerB) {						
  Leer = ((LeerB-1) * Spalten) + LeerA - 1;
  // Liegt es Links, dann nach rechts schieben
  if (LeerA < xpos) {
	while (LeerA != xpos) {
    TempListe[Leer] = TempListe[Leer+1];
    TempListe[Leer+1] = BildListe[LeerPosistion];
    SetzeBild(Leer, TempListe[Leer]);
    LeerA += 1;
    Leer += 1;
    SetzeBild(Leer, TempListe[Leer]);
   }
  }
  // Liegt es Rechts dann nach links schieben
  else {
   while (LeerA != xpos) {
    TempListe[Leer] = TempListe[Leer-1];
    TempListe[Leer-1] = BildListe[LeerPosistion];
    SetzeBild(Leer, TempListe[Leer]);
    LeerA -= 1;
    Leer -= 1;
    SetzeBild(Leer, TempListe[Leer]);
   }
  }
 }
 else {
  // Pruefen, ob die Karte in der selben Spalte mit dem LeerBild liegt
  if (xpos == LeerA) {
   Leer = ((LeerB-1) * Spalten) + LeerA - 1;
   // Liegt sie darunter, dann nch oben schieben
   if (LeerB < ypos) {
    while (LeerB != ypos) {
     TempListe[Leer] = TempListe[Leer+Spalten];
     TempListe[Leer+Spalten] = BildListe[LeerPosistion];
     SetzeBild(Leer, TempListe[Leer]);
     LeerB += 1;
     Leer += Spalten;
     SetzeBild(Leer, TempListe[Leer])
    }
   }
   // liegt sie darueber, dann nach unten schieben
	else {
    while (LeerB != ypos) {
     TempListe[Leer] = TempListe[(Leer-Spalten)];
     TempListe[Leer-Spalten] = BildListe[LeerPosistion];
     SetzeBild(Leer, TempListe[Leer])
     LeerB -= 1;
     Leer -= Spalten;
     SetzeBild(Leer, TempListe[Leer])
    }
   }
  }
 }
 Pruefen();
}
function Klick( xpos, ypos ) {
  if ( SpielModus != "on" )
  {
   if( confirm( "Soll ich die Teile jetzt neu mischen?") )
   {
     Mischen();
   }
  } else
  {
    Schiebe( xpos, ypos );
  }
}
// Die BildListe in die temporaere Liste kopieren
function ZurueckSetzen() {
 for (var i = 0; i < BildAnzahl; i++) {
  TempListe[i] = BildListe[i];
 }
}
function Pruefen()
{
  var istgleich = false;
  var istgewonnen = true;
  for (var i = 0; i < BildAnzahl; i++)
  {
   istgleich = (  TempListe[i] == BildListe[i] )
   if ( istgleich == false ) { istgewonnen = false };
  }
  if ( istgewonnen )
  {
   if( confirm( "Du hast das Puzzle richtig zusammengesetzt!\nMöchtest du es noch einmal mischen?") )
   {
     Mischen();
   }
  }
}
// Neustart-Routine
function NeuStart() {
 SpielModus = "off";
 // Laden der Bildliste in die Dokumentbilder
 for (var i = 0; i < BildAnzahl; i++){
  SetzeBild(i, BildListe[i])
  TempListe[i] = BildListe[i];
 }
// ZurueckSetzen();
 LeerA = LeerX;
 LeerB = LeerY;
}
function Mischen() {
 SpielModus = "off";
 // Abbruch, wenn das Spiel nicht geladen wurde
 if (loaded == 0) {
  return;
 }
 var Temp;
 for (var MischVorgang = 0; MischVorgang < MaxMischen ; MischVorgang++) {
  // Mal horizontal ein wenig herumschieben
  Temp = LeerA;
  while ( Temp == LeerA) {
   Temp = (random (Spalten)) + 1;
  }
  Schiebe (Temp, LeerB);
  // und mal vertikal ein wenig schieben
  Temp = LeerB;
  while (Temp == LeerB) {
   Temp = (random (Zeilen)) + 1;
  }
  Schiebe (LeerA, Temp);
 }
 SpielModus = "on";
}
// Zufallsgenerator von
// Paul Houle
// Department of Physics,  Cornell University
today=new Date();
jran=today.getTime();
function rnd() {
	ia=9301;
	ic=49297;
	im=233280;
	jran = (jran*ia+ic) % im;
	return jran/(im*1.0);
	}
function random(number) {
	return Math.floor(rnd()*number);
	}