// version : 22/08/2006 //====================== // 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; // Génération de la grille //------------------------- function gen_grille(){ // Grille vierge //--------------- for(i=0; i<81; i++) grille[i] = 0; // 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){ // Suppression d'un chiffre //-------------------------- if(document.frm.mode.value==4){ if(grille[num_case]>0){ grille[num_case] = 0; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); maj_suite_chiffres(); } } 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){ menu_sudoku.style.visibility = 'hidden'; if(grille[num_case]!=num_sel){ grille[num_case] = num_sel; clignote(num_case); setTimeout("actu_aff_case("+num_case+")",300); maj_suite_chiffres(); } } // Actualiser l'affichage d'une case //----------------------------------- function actu_aff_case(num_case){ 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\";"); } } // Mise à jour de l'input suite de chiffres //------------------------------------------ function maj_suite_chiffres(){ var texte_input = ""; for(i=0; i<81; i++){ if(i==9 || i==18 || i==27 || i==36 || i==45 || i==54 || i==63 || i==72) texte_input = texte_input + "\n"; texte_input = texte_input + "" + grille[i]; } document.frm.gri.value = texte_input; } // Mise à jour de la grille à partir de l'input //---------------------------------------------- function maj_grille(){ var x = document.frm.gri.value; var i = 0; var num_case = 0; var texte_input = ""; while(i=0){ grille[num_case] = y*1; actu_aff_case(num_case); if(num_case==9 || num_case==18 || num_case==27 || num_case==36 || num_case==45 || num_case==54 || num_case==63 || num_case==72) texte_input = texte_input + "\n"; texte_input = texte_input + "" + grille[num_case]; num_case++; } i++; } document.frm.gri.value = texte_input; } // Validation //------------ function validation(){ 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){ document.frm.ok.value = txjs[6]; document.frm.ok.disabled = true; document.frm.submit(); } }