//
//   Javascript für ein Tic-Tac-Toe-Spiel     Autor: Arndt Brünner, 30.4.2001
//                                            

// Ändern Sie diese Parameter passend ab

tttImgPath="scripts/TicTacToe/";       // Pfad von der html-Datei zu den Bildern 
						   // falls gleiches Verzeichnis, dann:   = "";
tttBackground=tttImgPath+"karo.gif";   // Hintergrundbild des Spielfeldes
tttMeldungen=false;                    // Meldung über den Gewinner am Spielende
tttnBlink=5;				   // Anzahl der Blinkroutinen bei Gewinn
tttBlinkIntervall=100;                 // Blinkintervall in Millisekunden

// Weiter unten (Zeilen 60 und 64) kann das Erscheinungsbild des Spielfeldes modifiziert werden

// An den folgenden Parametern nichts ändern!

t=new Array(0,0,0,0,0,0,0,0,0);
fertig =new Boolean;
d=new Array(8);
d[0]=new Array(0,1,2);
d[1]=new Array(3,4,5);
d[2]=new Array(6,7,8);
d[3]=new Array(0,3,6);
d[4]=new Array(1,4,7);
d[5]=new Array(2,5,8);
d[6]=new Array(0,4,8);
d[7]=new Array(2,4,6);
s=new Array(0,0,0,0,0,0,0,0);
u=new Array(9);
u[0]=new Array(0,3,6,-1);
u[1]=new Array(0,4,-1,-1);
u[2]=new Array(0,5,7,-1);
u[3]=new Array(1,3,-1,-1);
u[4]=new Array(1,4,6,7);
u[5]=new Array(1,5,-1,-1);
u[6]=new Array(2,3,7,-1);
u[7]=new Array(2,4,-1,-1);
u[8]=new Array(2,5,6,-1);
beginner=1;
tttImg='src="'+tttImgPath+'ttt0.gif" border="0" ';
tttImgI=0;
tttBild=new Array(2);
tttBild[0]=new Image;
tttBild[1]=new Image;
tttBild[2]=new Image;
tttBild[0].src=tttImgPath+"ttt-1.gif";
tttBild[1].src=tttImgPath+"ttt0.gif";
tttBild[2].src=tttImgPath+"ttt1.gif";
tttFertig=false; mini=false;
tttBlinker=0;                          
level=2;

function tttDrawFeld(size,bgcolor1,bgcolor2)
{
if (size<5) size=32;
if (size>160) size=160;

//********************* Hier kann das Erscheinungsbild des Spieles geändert werden: ******************
document.write('<table border="1" rules="none" bgcolor="'+bgcolor1+'" cellpadding="10"><tr><td align=center>');
document.write('<p><font size="+2" color="#663333">Tic-Tac-Toe</font></p>');

//********************* und hier das Erscheinungsbild des Spielfeldes: *************************************************
document.write('<table bgcolor="'+bgcolor2+'" background="'+tttBackground+'" frame="box" bordercolordark="#000000" rules="all" border="1" >');

for (i=0;i<3;i++)
{
	document.write('<tr>');
	for (j=0;j<3;j++) 
	{document.write('<td ><a href="javascript:tttEintragen('+(i*3+j)+',1)" title="">');
	document.write('<img '+tttImg+' height="'+size+'" width="'+size+'"></td>');}
	document.write('</tr>');
}
document.write('</table>');
document.write('');
document.write('<p><form><input type=button value="Neues Spiel starten" onclick="tttNeu()"></p><p>');
document.write('<select onChange="beginner=1-this.selectedIndex*2"><option>Sie haben den ersten Zug</option>');
document.write('<option>Der Computer hat den ersten Zug</option></select></p><p>');
document.write('<select onChange="level=this.selectedIndex+1"><option>blutiger Anf&auml;nger</option>');
document.write('<option>Feierabendspieler</option><option selected>ge&uuml;bter Fachmann</option>');
document.write('<option >absoluter K&ouml;nner</option></select></p><small><a href="mailto:arndt.bruenner@t-online.de">&#169;Arndt Brünner, Gelnhausen 2001</a></small></form></td></tr></table>');

for (i=0;i<document.images.length;i++)
{if (String(document.images[i].src).indexOf('ttt0.gif')>-1){tttImgI=i;break;}}

}

function tttDrawMini()
{
document.write('\n<table border="0" background="'+tttImgPath+'kreuz.gif" cellpadding="0" cellspacing="0">\n');
for (i=0;i<3;i++)
{
	document.write('<tr>');
	for (j=0;j<3;j++) 
	{document.write('<td ><a href="javascript:tttEintragen('+(i*3+j)+',1)" title="">\n');
	document.write('<img border="0" src="'+tttImgPath+'Minittt0.gif" height="16" width="16"></td>\n');}
	document.write('</tr>\n');
}
document.write('</table>\n');
mini=true; beginner=1; level=5;
tttnBlink=10;tttBlinkIntervall=100;
tttBild[0].src=tttImgPath+"Mini_ttt-1.gif";
tttBild[1].src=tttImgPath+"Minittt0.gif";
tttBild[2].src=tttImgPath+"Mini_ttt1.gif";
for (i=0;i<document.images.length;i++)
{if (String(document.images[i].src).indexOf('Minittt0.gif')>-1){tttImgI=i;break;}}
}

function tttEintragen(i,f)
{
	if (tttFertig ) {tttNeu(); if(beginner==-1) return;}
    if (t[i] == 0) t[i] = f;
	else  return;
    tttSumme(i, f);
	tttZeichne();
	if (tttGewinn()) return;
	if (f==1) window.setTimeout("tttComputerzug()",100);
}

function tttSieger(i,j)
{
    if (tttFertig) return;
    if (tttMeldungen==true)
   {
    switch(i){
    case 0: alert( "Unentschieden");break;
    case 1: alert( "Sie haben gewonnen!");break;
    case -1: alert( "Der Computer hat gewonnen!");break;
    default: alert ("Fehler");
	}
   }
    tttFertig=true;
   if (j>-1) setTimeout("tttBlinken("+i+","+j+")",tttBlinkIntervall);
	if ((mini)&&(i==0)) setTimeout("tttAutostart()",1000);
}

function tttAutostart()
{
	if(Math.random()<0.4) beginner=-1; else beginner=1;
	tttNeu();
}

function tttBlinken(i,j)
{
	tttBlinker++;
	for (k=0;k<3;k++)	{
	L=d[j][k];
	if ((tttBlinker % 2) == 1) document.images[L+tttImgI].src=tttBild[1].src;
	else document.images[L+tttImgI].src=tttBild[i+1].src;
	}
	if (tttBlinker >= tttnBlink*2) 
	{tttBlinker=0; if (mini) setTimeout("tttAutostart()",1000);
 	return;}
	setTimeout("tttBlinken("+i+","+j+")",tttBlinkIntervall);
}

function tttGewinn()
{
    GewinnGefunden=new Boolean;
	GewinnGefunden=false;
	tttg=new Boolean(false);
	var tttz=0;
    for (i = 0; i<7; i++)
        {if (Math.abs(s[i]) == 3){ GewinnGefunden=true; break;}}
    if (!GewinnGefunden)
    {
    for (i = 0; i<9; i++)
        if (t[i] != 0) tttz++;
    if (tttz == 9) {tttSieger(0,-1);return true; }
    }
    for (i = 0; i<8 ; i++)
	{
	ttts=s[i];
	if (ttts==3) {tttSieger(1,i);return true;}
	if (ttts==-3) {tttSieger(-1,i); return true;}
	}
	return false;
}

function tttSumme(i,f)    
{
    var j=0, k=0;
    for (j = 0; j<8; j++)
        for (k = 0; k<3; k++)
		if (i == d[j][k]) s[j] += f;
}

function tttZeichne()
{
	for (i=0;i<9;i++)
	document.images[i+tttImgI].src=tttBild[t[i]+1].src;
}

function tttNeu()
{
for(i=0;i<9;i++) t[i]=0;
for(i=0;i<8;i++) s[i]=0;
tttFertig=false;
if (beginner==-1) tttEintragen (Math.floor(Math.random() * 9), -1);
else tttZeichne();

}

function tttComputerzug()
{
    var i=0, n=0, b=new Array(9);
    var max=0, maxi=0, j=0, gefunden=new Boolean;
    gefunden=false;
    max = 0; maxi = -1;
    if ((level>1) && (Math.random()>1-level/3))
    {
    for (j = -2;j<3;j+=4)
        {for (i = 0;i< 8; i++)
            if (s[i] == j) {i = tttLeereZelle(i); gefunden=true; break;} if (gefunden) break;}
    }
    if (gefunden==false)
    {
    for (i = 0; i<9; i++)
    {
        b[i] = 0;
        if (t[i] == 0)
        {
	      var p=0;
            for (k = 0; k<4;k++)
		{
                p = u[i][k];
                if (p > -1)
		    {
			if (beginner==1)
			{
                      if (s[p] == -1)
                           b[i] += tttSim(i, p);
                       else b[i] +=1 ;
			}
			else
			{
			      if (s[p] == -1)
                            b[i] +=  tttSim(i, p)/2;
                        else if (s[p] == 0)
                            b[i] += 2;
                        else if (s[p] == 1)
                            b[i] += 1;
			}
                }
            }
        }
    }
    n=1;
    for (i = 0; i<9; i++)
    {
        if ((b[i] >= max) && (Math.random() > 1-level/4 ))
	  {
	//	alert(b[i]);
            if (b[i] == max)
		{
                n++;
                if (Math.random() < 1 / n)
		    {
                    max = b[i];
                    maxi = i;
                }
            }
		else
		{
            	max = b[i];
	            maxi = i;
		}
        }
    }
    i = maxi;
    }

    if ((i == -1)||(t[i]!=0))
    {
	do{ i=Math.floor(Math.random()*9); } while((t[i] != 0)&&(i<9)); 
    }
   if(t[i]!=0) alert(i+"\n"+b[0]+" "+b[1]+" "+b[2]+"\n"+b[3]+" "+b[4]+" "+b[5]+"\n"+b[6]+" "+b[7]+" "+b[8]);
    tttEintragen(i, -1);
//    tttZeichne();
    if (tttGewinn()) {fertig = true; }
}

function tttLeereZelle(i)
{
    for (j = 0; j<3; j++ )
        if (t[d[i][j]] == 0) return d[i][j];
    return -1;
}

function tttSim(n, m)
{
    ss=new Array(8);
    tt=new Array(9);
    var pp=0;
    for (ii = 0; ii<8; ii++) ss[ii] = s[ii];
    for (ii = 0; ii<9; ii++) tt[ii] = t[ii];
    for (ii = 0; ii<3; ii++)
    {    pp = u[n][ii]; if (pp > -1) ss[pp] = ss[pp] - 1; }
    t[n] = -1;
    jj = tttLeereZelle(m);
    t[n] = 0; kk=0;
    for (ii = 0; ii<3; ii++)
    {
        pp = u[jj][ii];
        if (pp > -1) if (ss[pp] == 1) kk++;
        if (kk == 2) return -1;
    }
    return 1;
}

