// ENCODE=0 var G; function Game() { //Глобальные переменные игры //Версия this.gg_name='Судоку (Sudoku)'; //Версия this.gg_version='1.2'; //Размер поля NxN this.gg_size=3; //Размер одной ячейки по умолчанию (пикселов) this.gg_cell_size=40; //Цвет чисел игры this.gg_num_color='black'; //Директория рисунков this.gg_img_dir='/games/sudoku/images/'; //Сколько показывать ошибку в ячейке this.gg_delay=400; //Выбранное число this.gu_sel_num=-1; //Игра this.gg_ajaxurl='/games/sudoku/sudoku.ajax.php'; this.gg_layout=new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); this.gg_user_layout=this.gg_layout; this.gg_layout_raw=''; this.gg_ajaxmode=''; this.gg_level=''; this.gg_number=''; //Суффикс для выбора фонового рисунка (пустое - белый, -sel - желтый, -error - красный) this.gi_cellbg=''; //Фиксированные ячейки this.gi_fixed_cells='||'; //Игра завершена this.gi_game_finished=false; // Кнопки this.gd_btn_captions = new Array('Случайное', 'Варианты', 'Правила'); this.gd_btn_ids = new Array('_gamebuttonrand', '_gamebuttonvariants', '_gamebuttonrules'); this.gd_btn_act = new Array("getRandomGame()", '#variants', '#rules'); //Обнуляем игровое поле for (var i=0;i\n'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); for (j=0;j\n'); for (i=0;i\n'); document.writeln('
\n'); for (m=0;m\n'); for (k=0;k\n'); } document.writeln('\n'); } document.writeln('
\n'); document.writeln('\n'); } document.writeln('\n'); } document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); for (i=1;i<=(this.gg_size*this.gg_size);i++) { document.writeln(''+i+' '); } document.writeln('x'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); for (var i=0;i' + this.gd_btn_captions[i] +'\n'); } document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); } this.checkLines=function checkLines(x_pos_b,y_pos_b,x_pos,y_pos,v) { var r=true; var i; var j; //проверка в текущем квадрате for (i=0;i0) { eval("s=document.getElementById('cell_"+i+"_"+j+"_"+k+"_"+m+"').style.background;"); if (s.indexOf('-sel')>0) { ai[b]=i; aj[b]=j; ak[b]=k; am[b]=m; b++; } } } } } } if (b>0) { if (confirm('Одна или несколько ячеек помечены другим цветом. Вы хотите убрать цветовое выделение?')) { this.gi_cellbg=''; for (var i=0;i\n'); pw.document.write('\n'); pw.document.write('\n'); pw.document.write('\n'); pw.document.write('\n'); pw.document.write('URL внизу содержит текущую комбинацию Судоку, включая вставленные Вами числа. При открытии этой ссылки сначала загрузится первоначальная комбинация чисел (числа черного цвета), а потом уже Ваши числа (синего цвета). Вы можете скопировать эту строку в буфер обмена и, затем, например, отправить ее по E-Mail, ICQ и т.д. Ваши друзьям.
\n'); var s=this.saveToURL(); pw.document.write('\n'); pw.document.write('\n'); pw.document.write('\n'); } this.gameFinished=function gameFinished() { var r=true; for (var i=0;i0) { eval("document.getElementById('cell_"+x_pos_b+"_"+y_pos_b+"_"+i+"_"+j+"').style.color='black';"); this.gi_fixed_cells=this.gi_fixed_cells+x_pos_b+'.'+y_pos_b+'.'+i+'.'+j+'|'; } this.setCell(x_pos_b,y_pos_b,i,j,c); } } this.saveToURL=function saveToURL() { var s=new String; var b=false; for (var i=0;i0) { b=true; } } if (b) { for (var i=0;i0 && G.getCell(x_block,y_block,x_pos,y_pos)==0) { // if (G.checkLines(x_block,y_block,x_pos,y_pos,G.gu_sel_num)) // { G.setCell(x_block,y_block,x_pos,y_pos,G.gu_sel_num); if (G.gameFinished()) { G.gg_ajaxmode = 'check'; callServer(null, G.gg_ajaxurl+'?'+G.gg_ajaxmode+'/'+G.gg_level+'/'+G.gg_number+'/'+G.gg_user_layout.join(""), null, null, readData, G); } // } // else // { // G.showError(x_block,y_block,x_pos,y_pos,true); // setTimeout('G.showError('+x_block+','+y_block+','+x_pos+','+y_pos+',false);',G.gg_delay); // } } if (G.gu_sel_num==0) { G.setCell(x_block,y_block,x_pos,y_pos,G.gu_sel_num); } } } function SelectNum(sel_num) { if (G.gu_sel_num>-1) { eval("document.getElementById('gameselectednum"+G.gu_sel_num+"').style.fontWeight='normal';"); } eval("document.getElementById('gameselectednum"+sel_num+"').style.fontWeight='bold';"); G.gu_sel_num=sel_num; } //function setSettings() //{ // G.changeSettings(); //} function loadGame() { var cur_url = new String(window.location); var url_re = /(\d+)\-(\d+)\.html$/i; var s = '0/1'; if (cur_url.match(url_re)!=null) { s = RegExp.$1 + '/' + RegExp.$2; } G.gg_ajaxmode = 'new'; callServer(null, G.gg_ajaxurl+'?'+G.gg_ajaxmode+'/'+s, null, null, readData, G); } function getRandomGame() { var cur_url = new String(window.location); var url_re = /(0|1|2)\-(\d+)\.html$/i; var s = '0'; if (cur_url.match(url_re)!=null) { s = RegExp.$1; } G.gg_ajaxmode = 'rand'; callServer(null, G.gg_ajaxurl+'?'+G.gg_ajaxmode+'/'+s, null, null, readData, G); } function readData(obj, responseText, responseXML, statusCode, statusText) { if (statusCode==200 || statusCode==201) { response = responseXML.documentElement; if (obj.gg_ajaxmode == 'rand') { var new_url = new String(responseXML.getElementsByTagName('data')[0].firstChild.data); window.location = new_url; } if (obj.gg_ajaxmode == 'new') { obj.gg_layout_raw = new String(responseXML.getElementsByTagName('data')[0].firstChild.data); obj.gg_level = new String(responseXML.getElementsByTagName('level')[0].firstChild.data); obj.gg_number = new String(responseXML.getElementsByTagName('number')[0].firstChild.data); obj.loadGame(obj.gg_layout_raw); } else if (obj.gg_ajaxmode == 'check') { r = new String(responseXML.getElementsByTagName('data')[0].firstChild.data); if (r == '1') { alert('Поздравляем! Судоку заполнено верно. Игра завершена.'); G.gi_game_finished=true; } else { alert('Ошибка! Судоку заполнено неверно.'); G.gi_game_finished=false; } } } else { arg.setStatus("Загрузить информацию не удалось: "+statusText); } }