var G; function Game() { this.gg_name='Линии (Lines)'; this.gg_version='1.2'; this.gg_bgcolor='#ffffff'; this.gg_bgcolor_status='#FFFFA8'; this.gg_bgcolor_info='#E7E7E7'; this.gg_field_size=9; var cur_url = new String(window.location); var url_re = /(7|8|10|11|12)\.html/i; if (cur_url.match(url_re)!=null) { this.gg_field_size = RegExp.$1 } this.gg_ball_num=7; this.gg_balls_per_turn=3; if (this.gg_field_size > 10) { this.gg_balls_per_turn = this.gg_field_size - 7; } this.gg_balls_per_line=5; this.gg_cell_size=40; this.gg_next_balls_panel_size='40'; this.gg_delay=300; this.gg_base_url=''; this.gg_ball_img_dir='/games/lines/images/'; this.gg_ajaxurl='/games/lines/lines.ajax.php'; this.gu_points=0; this.gu_turns=0; this.gu_save=''; this.gu_status=''; this.gu_show_next_balls=0; this.gi_points =new Array(); this.gi_points[5]=10; this.gi_points[6]=12; this.gi_points[7]=18; this.gi_points[8]=28; this.gi_points[9]=42; this.gi_points[10]=60; this.gi_points[11]=82; this.gi_points[12]=108; this.gi_x_pos_old=-1; this.gi_y_pos_old=-1; this.gi_x_pos_new=-1; this.gi_y_pos_new=-1; this.gi_ball_selected=false; this.gi_game_finished=false; this.gi_next_turn=true; this.gd_btn_captions = new Array('Новая игра', 'Загрузить', 'Сохранить', 'Настройки', 'Правила'); this.gd_btn_ids = new Array('_gamebuttonnew', '_gamebuttonload', '_gamebuttonsave', '_gamebuttonsettings', '_gamebuttonrules'); this.gd_btn_act = new Array('newGame()', 'alert(\'отключено\')', 'alert(\'отключено\')', 'winOpen(\'_gameparams\');', '#rules'); this.gd_gamepoints_txt = 'Очки' this.gd_gameturns_txt = 'Шаги' for (var i=0;i'; eval("this.gu_field_"+x_pos+"_"+y_pos+"=v;"); if (v>0 && v!=100) { rv=""; } if (this.gu_show_next_balls<2 && v>100) { rv=''; } eval("document.getElementById('cell_"+x_pos+"_"+y_pos+"').innerHTML=rv;"); } this.drawField=function drawField() { var w=this.gg_balls_per_turn+2; (this.gg_cell_size*this.gg_balls_per_turn) 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'); document.writeln('\n'); document.writeln('
'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); document.writeln('\n'); for (var i=0;i \n'); } document.writeln('\n'); document.writeln('
Очки: Ходы: 
\n'); document.writeln('
\n'); document.writeln('\n'); document.writeln('\n\n\n'); for (var j=0;j\n'); for (var i=0;i \n'); } document.writeln('\n'); } document.writeln('\n\n\n'); document.writeln('
\n
\n
\n'); document.writeln('
'); for (var i=0;i2) { var href='#'; var onclk = 'javascript:return true'; if (this.gd_btn_act[i] == "#rules") { href=this.gd_btn_act[i]; } else { onclk ='javascript:' + this.gd_btn_act[i] + ';'; } document.writeln('\n'); } } document.writeln('
\n'); } this.refreshGame=function() { var d=0; var line=''; var anim=''; var k=0; for (var i=0;i0) { anim=''; if (this.gi_x_pos_old==i && this.gi_y_pos_old==j) { anim='a'; } eval("document.getElementById('cell_"+i+"_"+j+"').innerHTML='';"); } } else { if (this.gu_show_next_balls<2) { eval("document.getElementById('cell_"+i+"_"+j+"').innerHTML='';"); } else { if (d>100) { eval("document.getElementById('cell_"+i+"_"+j+"').innerHTML='';"); } } if (d>100) { if (this.gu_show_next_balls==0) { document.getElementById('prevball_'+k).innerHTML=''; } else { document.getElementById('prevball_'+k).innerHTML=''; } k++; } } } } document.getElementById('gamepoints').innerHTML=this.gd_gamepoints_txt+': '+this.gu_points; document.getElementById('gameturns').innerHTML=this.gd_gameturns_txt+': '+this.gu_turns; } this.clearGame=function clearGame() { for (var i=0;i0) { c=p+100; } eval("this.gu_field_"+i+"_"+j+"=c;"); } } } this.setStatus('Начата новая игра.'); } this.setStatus=function setStatus(s) { if (document.getElementById('_gamestatus')) { document.getElementById('_gamestatus').innerHTML=s; } } this.beforeTurn=function beforeTurn(x,y) { var r=false; if (this.gi_x_pos_old==-1 && this.gi_y_pos_old==-1) { if (this.getCell(x,y)>0 && this.getCell(x,y)<=this.gg_ball_num) { this.gi_x_pos_old=x; this.gi_y_pos_old=y; this.doSelectedCell(true); this.setStatus('Шар выбран.'); } } else { if (this.gi_x_pos_old==x && this.gi_y_pos_old==y) { this.doSelectedCell(false); this.gi_x_pos_old=-1; this.gi_y_pos_old=-1; this.gi_x_pos_new=-1; this.gi_y_pos_new=-1; this.setStatus('Ячейка освобождена.'); this.gi_next_turn=false; } else { var v=this.getCell(x,y); if (v==0 || v>=100) { this.gi_x_pos_new=x; this.gi_y_pos_new=y; if (this.pathExists()) { r=true; this.setStatus('Шар перемещается.'); this.doSelectedCell(false); this.gi_next_turn=true; this.gu_turns++; } else { this.gi_x_pos_new=-1; this.gi_y_pos_new=-1; this.setStatus('Шар невозможно переместить в ячейку.'); this.gi_next_turn=false; } } else { this.doSelectedCell(false); this.gi_x_pos_old=x; this.gi_y_pos_old=y; this.doSelectedCell(true); this.gi_x_pos_new=-1; this.gi_y_pos_new=-1; this.setStatus('Шар выбран.'); this.gi_next_turn=true; } } } return r; } this.pathExists=function pathExists() { var r=false; var b=true; var ax=new Array(); var ay=new Array(); var cc; var v; var i; var k=0; var m=0; var j; ax[0]=this.gi_x_pos_old; ay[0]=this.gi_y_pos_old; cc='||'+ax[0]+','+ay[0]+'|'; while (b) { k=ax.length; j=k; b=false; for (i=m;i0) { v=this.getCell(ax[i]-1,ay[i]); if ((v==0 || v>=100) && cc.indexOf('|'+(ax[i]-1)+','+ay[i]+'|')<1) { ax[j]=ax[i]-1; ay[j]=ay[i]; cc=cc+'|'+ax[j]+','+ay[j]+'|'; b=true; if (this.gi_x_pos_new==ax[j] && this.gi_y_pos_new==ay[j]) { r=true; } j++; } } if (ax[i]<(this.gg_field_size-1)) { v=this.getCell(ax[i]+1,ay[i]); if ((v==0 || v>=100) && cc.indexOf('|'+(ax[i]+1)+','+ay[i]+'|')<1) { ax[j]=ax[i]+1; ay[j]=ay[i]; cc=cc+'|'+ax[j]+','+ay[j]+'|'; b=true; if (this.gi_x_pos_new==ax[j] && this.gi_y_pos_new==ay[j]) { r=true; } j++; } } if (ay[i]>0) { v=this.getCell(ax[i],ay[i]-1); if ((v==0 || v>=100) && cc.indexOf('|'+ax[i]+','+(ay[i]-1)+'|')<1) { ax[j]=ax[i]; ay[j]=ay[i]-1; cc=cc+'|'+ax[j]+','+ay[j]+'|'; b=true; if (this.gi_x_pos_new==ax[j] && this.gi_y_pos_new==ay[j]) { r=true; } j++; } } if (ay[i]<(this.gg_field_size-1)) { v=this.getCell(ax[i],ay[i]+1); if ((v==0 || v>=100) && cc.indexOf('|'+ax[i]+','+(ay[i]+1)+'|')<1) { ax[j]=ax[i]; ay[j]=ay[i]+1; cc=cc+'|'+ax[j]+','+ay[j]+'|'; b=true; if (this.gi_x_pos_new==ax[j] && this.gi_y_pos_new==ay[j]) { r=true; } j++; } } if (r==true) { b=false; i=k; } } m=k; } return r; } this.moveBall=function moveBall() { var r=0; if (this.gi_x_pos_old>-1 && this.gi_y_pos_old>-1 && this.gi_x_pos_new>-1 && this.gi_y_pos_new>-1) { var d=-1; if (this.getCell(this.gi_x_pos_new,this.gi_y_pos_new)>100) { r=1*this.getCell(this.gi_x_pos_new,this.gi_y_pos_new); d=this.getNumOfFreeCells(0); } this.setCell(this.gi_x_pos_new,this.gi_y_pos_new,this.getCell(this.gi_x_pos_old,this.gi_y_pos_old)); if (d==0) { this.setCell(this.gi_x_pos_old,this.gi_y_pos_old,r); } else { this.setCell(this.gi_x_pos_old,this.gi_y_pos_old,0); } this.gi_x_pos_old=-1; this.gi_y_pos_old=-1; this.gi_x_pos_new=-1; this.gi_y_pos_new=-1; } if (r>100) { for (var i=0;i100) { this.setCell(i,j,r); } } } } } this.getNumOfFreeCells=function getNumOfFreeCells(c) { var r=0; var v=0; for (var i=0;i=100) { r++; } } } } return r; } this.doTurn=function doTurn() { if (this.removeLines()==false) { for (var i=0;i=100) { this.setCell(i,j,this.getCell(i,j)-100); } } } var t=new String; for (var k=1;k<=this.gg_ball_num;k++) { t=t+k+''; } for (k=1;k<=(this.gg_balls_per_turn+1);k++) { var d=this.getNumOfFreeCells(0); r=Math.floor(Math.random()*(t.length)); var c=1*(t.substr(r,1)); var p=Math.floor(Math.random()*(d-1)); d=0; for (i=0;i=this.gg_balls_per_line && prev>0) { for (var m=start_pos;m=this.gg_balls_per_line && prev>0) { for (var m=start_pos;m=(this.gg_balls_per_line-1) && prev>0) { counter++; prev=100; } if (prev==this.getCell(i,j)) { counter++; } else { if (counter>=this.gg_balls_per_line && prev>0) { for (var m=0;m=(this.gg_balls_per_line-1) && prev>0) { counter++; prev=100; } if (prev==this.getCell(i,j)) { counter++; } else { if (counter>=this.gg_balls_per_line && prev>0) { for (var m=0;m=(this.gg_balls_per_line-1) && prev>0) { counter++; prev=100; } if (prev==this.getCell(i,j)) { counter++; } else { if (counter>=this.gg_balls_per_line && prev>0) { for (var m=0;m=(this.gg_field_size-this.gg_balls_per_line);n--) { counter=1; var start_pos_x=0; var start_pos_y=n; prev=0; i=0; for (var j=n;j>=0;j--) { if (j==0 && prev==this.getCell(i,j) && counter>=(this.gg_balls_per_line-1) && prev>0) { counter++; prev=100; } if (prev==this.getCell(i,j)) { counter++; } else { if (counter>=this.gg_balls_per_line && prev>0) { for (var m=0;m'; this.gi_ball_selected=true; } else { p=''; this.gi_ball_selected=false; } eval("document.getElementById('cell_"+this.gi_x_pos_old+"_"+this.gi_y_pos_old+"').innerHTML='"+p+"';"); } } function startGame() { G=new Game(); var win_width = (G.gg_field_size*G.gg_cell_size); document.getElementById('_gamearea').style.width = win_width + 'px' ; G.drawField(); newGame(); } function newGame() { G.clearGame(); G.setStatus("Загружается новая игра..."); callServer(null, G.gg_ajaxurl+'?'+G.gg_field_size +'/' + G.gg_balls_per_turn + '/' +Math.random(), null, null, readData, G); } function readData(obj, responseText, responseXML, statusCode, statusText) { if (statusCode==200 || statusCode==201) { response = responseXML.documentElement; obj.gu_save = responseXML.getElementsByTagName('data')[0].firstChild.data; obj.loadGame(obj.gu_save); obj.refreshGame(); } else { arg.setStatus("Загрузить информацию не удалось: "+statusText); } } function Move(x_pos,y_pos) { if (G.gi_game_finished==false) { if (G.beforeTurn(x_pos,y_pos)) { G.moveBall(); setTimeout('G.doTurn();G.refreshGame();',G.gg_delay); } } } function setSettings() { G.changeSettings(); G.refreshGame(); }