// version : 20/12/2007 //====================== // Variables communes //-------------------- grille = new Array (); repons = new Array (); histor = new Array (); var nb_histor = 0; var nb_ope_sui = 0; var overout_case_menu = 0; var nb_clignote = 0; var coul_clignote = 0; var chrono_onoff = 1; var chrono_inc = 0; // Onload //-------- function onl(){ chrono_timeout(); } // Chrono //-------- function chrono_timeout(){ if(chrono_onoff==1){ chrono_inc++; var x = Math.floor(chrono_inc/60); var y = chrono_inc - x*60; document.frm2.chrono.value = " "+x+"m"+y+"s"; setTimeout("chrono_timeout()",1000); } } // Actualisation de la page //-------------------------- function actu_page(){ var adresse_page = "visite.php?pag=cid505&idf="+idf; if(document.frm1.jou.value>0) adresse_page += "&idd="+document.frm1.jou.value; if(document.frm1.dif.value>0) adresse_page += "&idm="+document.frm1.dif.value; if(document.frm1.num.value>0) adresse_page += "&ids="+document.frm1.num.value; location.href = adresse_page; } // Génération de la grille //------------------------ function gen_grille(){ document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = true; // Lecture de la chaine de base //------------------------------ for(i=0; i<81; i++){ grille[i] = chaine_base.substring(i,i+1); grille[i] = grille[i]*1; } // Boucle d'affichage de la grille //--------------------------------- var code_html = ""; code_html += "
"; for(y=0; y<3; y++){ for(x=0; x<3; x++){ code_html += ""; for(j=0; j<3; j++){ for(i=0; i<3; i++){ var num_case = y*27 + x*3 + j*9 + i; code_html += ""; } if(j<2) code_html += ""; } code_html += "
"; if(grille[num_case]==0) code_html += "
"; else code_html += "
"; code_html += "
"; if(x<2) code_html += "
"; } if(y<2) code_html += "
"; } code_html += "
"; sudoku.innerHTML = code_html; } // Click sur une case //-------------------- function clicsur(num_case){ if(chrono_onoff==1){ // Suppression d'un chiffre //-------------------------- if(document.frm2.mode.value==4){ if(grille[num_case]>0){ nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false; nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_0"; document.frm2.num_ope.value = nb_histor; grille[num_case] = 0; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); } } else{ var x_case = 0; var y_case = 0; eval("x_case = pox(divcas_"+num_case+")-30; y_case = poy(divcas_"+num_case+")-30;"); var code_html = ""; code_html += "
"; for(i=1; i<=9; i++){ code_html += ""; if(i==3 || i==6 || i==9) code_html += "
"; } code_html += "
"; menu_sudoku.innerHTML = code_html; menu_sudoku.style.left = x_case + 'px'; menu_sudoku.style.top = y_case + 'px'; menu_sudoku.style.visibility = 'visible'; } } } // Cacher le menu //---------------- function over_case_menu(){ overout_case_menu = 1; } function out_case_menu(){ overout_case_menu = 0; setTimeout("verif_case_menu()",200); } function verif_case_menu(){ if(overout_case_menu==0) menu_sudoku.style.visibility = 'hidden'; } // Modification d'une case //------------------------- function selnum(num_case,num_sel){ // Sélecion d'un chiffre seul //---------------------------- if(document.frm2.mode.value==1){ menu_sudoku.style.visibility = 'hidden'; if(grille[num_case]!=num_sel){ nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false; nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+num_sel; document.frm2.num_ope.value = nb_histor; grille[num_case] = num_sel; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); // Voir si la grille est pleine //------------------------------ var grille_pleine = 1; for(i=0; i<81; i++) if(grille[i]==0 || grille[i]>9) grille_pleine = 0; if(grille_pleine==1) setTimeout("detecter_err()",1000); } } else{ menu_sudoku.style.visibility = 'hidden'; if(grille[num_case]<10){ if(document.frm2.mode.value==2){ var x = num_sel*10; nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false; nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+x; document.frm2.num_ope.value = nb_histor; grille[num_case] = x; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); } else{ var x = "123456789_"; x = x.replace(num_sel,""); x = x.replace("_","0"); x = x*1; nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false; nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+x; document.frm2.num_ope.value = nb_histor; grille[num_case] = x; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); } } else{ var x = "_"+grille[num_case]; if(x.indexOf(num_sel,0)>0){ x = x.replace(num_sel,""); x = x.replace("_",""); x = x*1; } else{ x = x.replace("_",num_sel); x = x*1; } nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false; nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+x; document.frm2.num_ope.value = nb_histor; grille[num_case] = x; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); } } } // Remise à zero totale //---------------------- function raz_total(){ nb_histor = 0; document.frm2.num_ope.value = nb_histor; nb_ope_sui = 0; overout_case_menu = 0; nb_clignote = 0; coul_clignote = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = true; // Boucle sur toutes les cases //----------------------------- for(i=0; i<81; i++){ // Lecture de la chaine de base //------------------------------ grille[i] = chaine_base.substring(i,i+1); grille[i] = grille[i]*1; if(grille[i]>0) eval("divcas_"+i+".innerHTML = \"\";"); else eval("divcas_"+i+".innerHTML = \"\";"); } } // Opération précédente //---------------------- function operation_preced(){ if(nb_histor>0){ var x = histor[nb_histor]; var pos1 = x.indexOf("_",0); var pos2 = x.indexOf("_",pos1+1); var num_case = x.substring(0,pos1); var avant = x.substring(pos1+1,pos2); grille[num_case] = avant; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",500); nb_histor--; if(nb_histor==0) document.frm2.ope_pre.disabled = true; document.frm2.num_ope.value = nb_histor; nb_ope_sui++; document.frm2.ope_sui.disabled = false; } } // Opération précédente //---------------------- function operation_suivante(){ if(nb_ope_sui>0){ var x = histor[nb_histor+1]; var pos1 = x.indexOf("_",0); var pos2 = x.indexOf("_",pos1+1); var num_case = x.substring(0,pos1); var apres = x.substring(pos2+1,x.length); grille[num_case] = apres; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",500); nb_ope_sui--; if(nb_ope_sui==0) document.frm2.ope_sui.disabled = true; nb_histor++; document.frm2.ope_pre.disabled = false; document.frm2.num_ope.value = nb_histor; } } // Actualiser l'affichage d'une case //----------------------------------- function actu_aff_case(num_case){ if(grille[num_case]>9){ var code_html = ""; var x = "_"+grille[num_case]; code_html += ""; for(i=1; i<=9; i++){ if(x.indexOf(i,0)>0) code_html += ""; else code_html += ""; if(i==3 || i==6) code_html += "
"; } code_html += "
"; eval("divcas_"+num_case+".innerHTML = \""+code_html+"\";"); } else{ if(grille[num_case]==0) eval("divcas_"+num_case+".innerHTML = \"\";"); else eval("divcas_"+num_case+".innerHTML = \"\";"); } } // Faire clignoter une case //-------------------------- function clignote(num_case){ nb_clignote = 5; coul_clignote = 0; clignote_timeout(num_case); } function clignote_timeout(num_case){ if(nb_clignote>0){ nb_clignote-- if(coul_clignote==0){ coul_clignote = 1; eval("divcas_"+num_case+".style.border = \"rgb(255,50,50) 1px solid\";"); } else{ coul_clignote = 0; eval("divcas_"+num_case+".style.border = \"rgb(200,200,255) 1px solid\";"); } setTimeout("clignote_timeout("+num_case+")",100); } else{ coul_clignote = 0; eval("divcas_"+num_case+".style.border = \"rgb(200,200,255) 1px solid\";"); } } // Détecter les erreurs //---------------------- function detecter_err(){ var nb_erreur = 0 // Boucle sur chaque ligne //------------------------- for(i=0; i<9; i++){ comp_chif = new Array (0,0,0,0,0,0,0,0,0,0); for(j=0; j<9; j++){ comp_chif[grille[i*9+j]]++; } for(j=1; j<10; j++){ if(comp_chif[j]>1){ nb_erreur++; for(k=(i*9); k<(i*9+9); k++) eval("divcas_"+k+".style.border = \"rgb(255,0,0) 1px solid\";"); var x = i+1; alert(txjs[0]+nb_erreur+" : "+txjs[1]+" "+comp_chif[j]+" "+txjs[2]+" "+j+" "+txjs[3]+" "+x); for(k=(i*9); k<(i*9+9); k++) eval("divcas_"+k+".style.border = \"rgb(200,200,255) 1px solid\";"); } } } // Boucle sur chaque collone //--------------------------- for(i=0; i<9; i++){ comp_chif = new Array (0,0,0,0,0,0,0,0,0,0); for(j=0; j<9; j++){ comp_chif[grille[j*9+i]]++; } for(j=1; j<10; j++){ if(comp_chif[j]>1){ nb_erreur++; for(k=0; k<9; k++){ var x = k*9+i; eval("divcas_"+x+".style.border = \"rgb(255,0,0) 1px solid\";"); } var x = i+1; alert(txjs[0]+nb_erreur+" : "+txjs[1]+" "+comp_chif[j]+" "+txjs[2]+" "+j+" "+txjs[4]+" "+x); for(k=0; k<9; k++){ var x = k*9+i; eval("divcas_"+x+".style.border = \"rgb(200,200,255) 1px solid\";"); } } } } // Boucle sur chaque carré //------------------------- for(i=0; i<3; i++){ for(j=0; j<3; j++){ comp_chif = new Array (0,0,0,0,0,0,0,0,0,0); for(k=0; k<3; k++){ for(l=0; l<3; l++){ comp_chif[grille[i*27+j*3+l*9+k]]++; } } for(k=1; k<10; k++){ if(comp_chif[k]>1){ nb_erreur++; for(l=0; l<3; l++){ for(m=0; m<3; m++){ var x = i*27+j*3+m*9+l; eval("divcas_"+x+".style.border = \"rgb(255,0,0) 1px solid\";"); } } var y = j+1; var x = i+1; alert(txjs[0]+nb_erreur+" : "+txjs[1]+" "+comp_chif[k]+" "+txjs[2]+" "+k+" "+txjs[5]+" "+y+"/"+x); for(l=0; l<3; l++){ for(m=0; m<3; m++){ var x = i*27+j*3+m*9+l; eval("divcas_"+x+".style.border = \"rgb(200,200,255) 1px solid\";"); } } } } } } // Aucune erreur //--------------- if(nb_erreur==0){ // Voir si la grille est pleine //------------------------------ var grille_pleine = 1; for(i=0; i<81; i++) if(grille[i]==0 || grille[i]>9) grille_pleine = 0; if(grille_pleine==1){ chrono_onoff = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = true; document.frm2.det_err.disabled = true; document.frm2.rem_zer.disabled = true; document.frm2.mode.disabled = true; message_sudoku.innerHTML = ""; message_sudoku.style.visibility = 'visible'; //alert(txjs[6]); } else{ alert(txjs[7]); } } } // Fermer le message //------------------- function ferme_mess(){ message_sudoku.innerHTML = ""; message_sudoku.style.visibility = 'hidden'; }