






























































































































































// === Parameter ===
var        anzahl_horizontal        = 4                        
var        anzahl_vertikal                = 3                       
var        img_width                = 80                       
var        img_height                = 120                        
var        pfad                        ="bilder/"             
var        wartezeit                = 1000                        
var        spacing                        = 1                        
var        hintergrundbild_name        = "hintergrund.gif"        
var        btn_neues_spiel                = "start.gif"                
var        btn_neues_spiel_aktiv        = "start_aktiv.gif"       

// === Interne Variablen ===
var        anzahl_gesamt                = anzahl_vertikal * anzahl_horizontal
var        hintergrundbild                = new Image()
var        neuesspiel                = new Image()
var        neuesspiel_aktiv        = new Image()
var        spielfeld                = new Array()
var        bilder                        = new Array()

var        schritte                = 0
var        spielstatus                = 0
var        spielfeld_feld                = 0
var        spielfeld_vertikal        = 0
var        spielfeld_horizontal        = 0
var        spielfeld_feld_2        = 0
var        spielfeld_vertikal_2        = 0
var        spielfeld_horizontal_2        = 0
var        anzeigeTimer                = null

// === Hilfsfunktionen ===

// Bildname
function bildname(f, v, h)
{
        return "bild_" + String(f) + "_" + String(v) + "_" + String(h)
}

// Generierung Spielsteinobjekt
function spielstein(nr)
{
        this.nr                = nr
        this.status        = false
}

// Spielstein (Hintergrundbild)
function setze_hintergrundbild(f, h, v)
{
        document.images[bildname(f, h, v)].src        = hintergrundbild.src
        spielfeld[f][h][v].status                = false
}

// Spielstein (Vordergrundbild)
function setze_bild(f, h, v)
{
        document.images[bildname(f, h, v)].src        = bilder[spielfeld[f][h][v].nr].src
        spielfeld[f][h][v].status                = true
}

// Gewaehlte Bilder zuruecksetzen
function anzeige(feld, hor, ver)
{
        if(anzeigeTimer)
        {
                clearTimeout(anzeigeTimer)
                anzeigeTimer        = null
        }
        setze_hintergrundbild(spielfeld_feld, spielfeld_horizontal, spielfeld_vertikal)
        setze_hintergrundbild(spielfeld_feld_2, spielfeld_horizontal_2, spielfeld_vertikal_2)
        spielstatus = 0
}

// Pruefung, ob Spiel beendet
function fertig()
{
        var        k, i, j

                for(k = 0; k < 2; k++)
                        for(i = 0; i < anzahl_vertikal; i++)
                                for(j = 0; j < anzahl_horizontal; j++)
                                        if(!spielfeld[k][i][j].status)
                                                return false
        return true
}

// Text beim Betreten eines Spielsteins
function betreten(feld, hor, ver)
{
        status = spielfeld[feld][hor][ver].status ? "Dieser Stein ist bereits umgedreht!" : "Dieser Stein kann angeklickt werden!"
}

// Text beim Verlassen eines Spielsteins
function verlassen(feld, hor, ver)
{
        status        = ""
}

// Spielmeldung
function meldung(s)
{
        status        = s
        alert(s)
}

// Bilder (Spielsteine) vorab laden
function bilder_laden()
{
        neuesspiel.src                = btn_neues_spiel
        neuesspiel_aktiv.src        = btn_neues_spiel_aktiv

        hintergrundbild.src        = pfad + hintergrundbild_name

        var        i
        for(i = 0; i < anzahl_gesamt; i++)
        {
                bilder[i]        = new Image()
                bilder[i].src        = pfad + String(i + 1) + ".gif"
        }
}

// Button "Neues Spiel" betreten
function neues_spiel_betreten()
{
        status        =        "Neues Spiel starten..."
        document.images["neues_spiel"].src        =        neuesspiel_aktiv.src
}

// Button "Neues Spiel" verlassen
function neues_spiel_verlassen()
{
        status        =        ""
        document.images["neues_spiel"].src        =        neuesspiel.src
}

// === Spielfunktionen ===

// Auswertung eines angeklickten Spielsteins
function klick(feld, hor, ver)
{
        // Spielstein schon umgedreht?
        if(spielfeld[feld][hor][ver].status)
        {
                meldung("Der Spielstein ist bereits umgedreht.")
                return
        }

        // Fehlerhafte Bilder noch dargestellt?
        if(spielstatus == 2)
                anzeige()

        // 1. Schritt?
        if(spielstatus == 0)
        {
                setze_bild(feld, hor, ver)
                spielfeld_feld                = feld
                spielfeld_horizontal        = hor
                spielfeld_vertikal        = ver
                spielstatus                 = 1
                spielfeld[feld][hor][ver].status        = true
                return
        }

        // 2. Schritt
        if(spielstatus == 1)
        {
                setze_bild(feld, hor, ver)

                // Schritte zaehlen
                schritte++

                // Zwei gleiche Bilder gewaehlt?
                if(spielfeld[feld][hor][ver].nr == spielfeld[spielfeld_feld][spielfeld_horizontal][spielfeld_vertikal].nr)
                {
                        spielstatus = 0
                        if(fertig())
                                alert("Fertig!\nEs waren " + schritte + " Schritte.")
                }
                else
                {
                        spielstatus                 = 2
                        spielfeld_feld_2        = feld
                        spielfeld_horizontal_2        = hor
                        spielfeld_vertikal_2        = ver
                        anzeigeTimer                = setTimeout("anzeige()", wartezeit)
                }
        }
}

// Spiel initialisieren (verdecken und mischen)
function neues_spiel(bilder_setzen)
{
        schritte        = 0

        // Steine verdecken
        if(bilder_setzen)
        {
                var        k
                var        i
                var        j

                for(k = 0; k < 2; k++)
                        for(i = 0; i < anzahl_vertikal; i++)
                                for(j = 0; j < anzahl_horizontal; j++)
                                        setze_hintergrundbild(k, i, j)
        }

        // Steine mischen
        var        h1
        var        v1
        var        h2
        var        v2
        var        temp

        for(k = 0; k < anzahl_gesamt * 5; k++)
        {
                h1        = Math.floor(Math.random() * anzahl_horizontal)
                v1        = Math.floor(Math.random() * anzahl_vertikal)
                h2        = Math.floor(Math.random() * anzahl_horizontal)
                v2        = Math.floor(Math.random() * anzahl_vertikal)
                temp         = spielfeld[0][v1][h1]
                spielfeld[0][v1][h1]        = spielfeld[0][v2][h2]
                spielfeld[0][v2][h2]        = temp
        }
}

// Spielfeld aufbauen (Spielsteine setzen)
function spielfeld_aufbauen()
{
        var        k
        var        i
        var        j

        for(k = 0; k < 2; k++)
        {
                spielfeld[k]        = new Array()

                for(i = 0; i < anzahl_vertikal; i++)
                {
                        spielfeld[k][i]        = new Array()

                        for(j = 0; j < anzahl_horizontal; j++)
                                spielfeld[k][i][j]        = new spielstein(i * anzahl_horizontal + j)
                }
        }
}

// Spielfeld ausgeben (mit Hintergrundbild)
function aufstellung()
{
        with(document)
        {
                open("text/html")

                writeln("<DIV ALIGN=\"CENTER\">")
                writeln("<TABLE BORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"8\">")
                writeln("<TR ALIGN=\"CENTER\" VALIGN=\"MIDDLE\">")

                var        k
                var        i
                var        j

                for(k = 0; k < 2; k++)
                {
                        writeln("<TD COLSPAN=\"50%\">")
                        writeln("<TABLE BORDER=\"0\" CELLSPACING=\"" + spacing + "\" CELLPADDING=\"0\">")
                        for(i = 0; i < anzahl_vertikal; i++)
                        {
                                writeln("<TR>")
                                for(j = 0; j < anzahl_horizontal; j++)
                                        writeln("<TD><A HREF=\"javascript:klick(" + String(k) + "," + String(i) + "," + String(j) + ")\" onMouseOver=\"betreten(" + String(k) + "," + String(i) + "," + String(j) + "); return true\" onMouseOut=\"verlassen(" + String(k) + "," + String(i) + "," + String(j) + ")\"><IMG SRC=\"" + hintergrundbild.src + "\" NAME=\"" + bildname(k, i, j) + "\" BORDER=\"0\" WIDTH=\"" + img_width + "\" HEIGHT=\"" + img_height + "\" ALT=\"\"></A></TD>")
                                writeln("</TR>")
                        }
                        writeln("</TABLE>")
                        writeln("</TD>")
                }

                writeln("</TR>")
                writeln("</TABLE>")
                writeln("</DIV>")

                close()
        }
}

// Startfunktion
function start()
{
        
        bilder_laden()
        spielfeld_aufbauen()
        neues_spiel(false)
        aufstellung()
}





function MakeArray(n){
   this.length=n;
   for(var i=1; i<=n; i++) this[i]=i-1;
   return this
}

hex=new MakeArray(16);
hex[11]="A"; hex[12]="B"; hex[13]="C"; hex[14]="D"; hex[15]="E"; hex[16]="F";

function ToHex(x){ 
   var high=x/16;
   var s=high+""; 
   s=s.substring(0,2);  
   high=parseInt(s,10); 
   var left=hex[high+1]; 
   var low=x-high*16;
   s=low+"";
   s=s.substring(0,2);
   low=parseInt(s,10);
   var right=hex[low+1];
   var string=left+""+right;
   return string;
}

function rainbow(text){
   text=text.substring(3,text.length-4); 
   color_d1=255;                               
   mul=color_d1/text.length;
   for(i=0;i < text.length;i++){
      color_d1=255*Math.sin(i/(text.length/3)); "255*Math.sin(i/(text.length/3))"
      color_h1=ToHex(color_d1);
      color_d2=mul*i;
      color_h2=ToHex(color_d2);
      document.write("<FONT COLOR='#FF"+color_h1+color_h2+"'>"+text.substring(i,i+1)+'</FONT>');
   }
}