| Главная » Статьи » Прочее |
..::Игра сапер в ajax::..
Установка: 1) Перед < /body > Код <script>function minesweeper_webo4ka(){new _uWnd("minesweeper","Сапер",500,400,{autosize:0,fadespeed:777,shadow:1,},$("#minesweeper_webo4ka").html());}</script> <div id="minesweeper_webo4ka" style="display:none"> <script language='JavaScript'> var x=10; var y=10; var mines=5; var mn=new Array(); var nregex=/^\d+$/g; var usersmn=new Array(); var sm=x*y; var tm; var secs=0; var vmines=0; function makeField() { startTimer(0); x=document.getElementById("pw").value; y=document.getElementById("ph").value; mines=document.getElementById("mines").value; secs=0; if(x.search(nregex)==-1 || y.search(nregex)==-1 || mines.search(nregex)==-1) { alert("Введены некорректрые данные поля!"); return false; } x=Number(x); y=Number(y); mines=Number(mines); sm=x*y; if(mines>=sm || mines<1 || x<5 || y<5) { alert("Введены некорректрые данные поля!"); return false; } var i,j; var txt=""; var mnum=mines; var prob=mines/sm; mn=new Array(); usersmn=new Array(); for(j=0;j<y;j++) { for(i=0;i<x;i++) { txt+="<input type='button' onclick='setMine("+i+","+j+",event);return false;' id='m_"+i+"_"+j+"' value=' ' style='width:25px;width:25px;background-color:#99aaff;'>"; mn[j*x+i]=0; usersmn[j*x+i]=0; } txt+="<br>"; } var curr=0; while(mnum>0) { if(Math.random()<prob && mn[curr]!=3) { mnum--; mn[curr]=3; } curr++; if(curr>=sm) curr=0; } vmines=mines; document.getElementById("mns").innerHTML=txt; document.getElementById("sg").disabled=false; document.getElementById("nm").innerHTML="Мин: "+vmines; startTimer(1); } function startTimer(t) { if(t) { tm=setInterval("ttick()",1000); } else if(tm) { clearInterval(tm); tm=0; } } function ttick() { secs++; var minuts=parseInt(secs/60); var tsecs=secs-minuts*60; document.getElementById("tm").innerHTML="Время: "+minuts+" мин. "+tsecs+" сек."; } function setMine(mx,my,e) { var curr=my*x+mx; if(!e) e=event; if(e.ctrlKey==false) { if(usersmn[curr]==1) { alert("Вы поставили тут мину, сначала снимите её!"); return; } tryMine(mx,my); return; } if(usersmn[curr]==1) { document.getElementById("m_"+mx+"_"+my).value=""; document.getElementById("m_"+mx+"_"+my).style.backgroundColor='#99aaff'; vmines++; usersmn[curr]=0; } else { document.getElementById("m_"+mx+"_"+my).value="M"; document.getElementById("m_"+mx+"_"+my).style.backgroundColor='orange'; vmines--; usersmn[curr]=1; } document.getElementById("nm").innerHTML="Мин: "+vmines; } function tryMine(mx,my) { var curr=my*x+mx; if(mn[curr]==3) { openField(); alert("Вы проиграли!"); return false; } openBtn(mx,my); checkWinner(); } function checkWinner() { for(i=0;i<sm;i++) { if(mn[i]==0) return; } openField(); var minuts=parseInt(secs/60); var tsecs=secs-minuts*60; alert("Вы выиграли за время "+minuts+" мин. "+tsecs+" сек.!"); } function openBtn(mx,my) { var curr=my*x+mx; if(mn[curr]==3 || mn[curr]==1) return; mn[curr]=1; var tmp=getMines(mx,my); var mx1,mx2,my1,my2; mx1=mx-1; mx2=mx+1; my1=my-1; my2=my+1; document.getElementById("m_"+mx+"_"+my).value= tmp==0 ? ' ' : tmp; document.getElementById("m_"+mx+"_"+my).style.backgroundColor= tmp==0 ? 'white' : '#e0e0e0'; document.getElementById("m_"+mx+"_"+my).disabled=true; if(tmp==0) { if(mx1>=0) openBtn(mx1,my); if(mx2<x) openBtn(mx2,my); if(my1>=0) openBtn(mx,my1); if(my2<y) openBtn(mx,my2); if(mx1>=0 && my1>=0) openBtn(mx1,my1); if(mx2<x && my2<y) openBtn(mx2,my2); if(mx1>=0 && my2<y) openBtn(mx1,my2); if(mx2<x && my1>=0) openBtn(mx2,my1); } } function openField() { var tmp; startTimer(0); document.getElementById("sg").disabled=true; document.getElementById("tm").innerHTML=""; document.getElementById("nm").innerHTML=""; var curr; for(j=0;j<y;j++) { for(i=0;i<x;i++) { curr=j*x+i; if(mn[curr]==1) continue; document.getElementById("m_"+i+"_"+j).disabled=true; if(mn[curr]==3) { document.getElementById("m_"+i+"_"+j).value="M"; document.getElementById("m_"+i+"_"+j).style.backgroundColor='orange'; continue; } tmp=getMines(i,j); document.getElementById("m_"+i+"_"+j).value= tmp==0 ? ' ' : tmp; if(usersmn[curr]==1) { document.getElementById("m_"+i+"_"+j).style.backgroundColor='yellow'; } else { document.getElementById("m_"+i+"_"+j).style.backgroundColor= tmp==0 ? 'white' : '#e0e0e0'; } } } } function getMines(mx,my) { var curr=my*x+mx; var c1,c2,c3,c4,c5,c6,c7,c8; c1=c2=c3=c4=c5=c6=c7=c8=0; var mx1,mx2,my1,my2; mx1=mx-1; mx2=mx+1; my1=my-1; my2=my+1; if(mx1>=0) { c1= mn[my*x+mx1]==3 ? 1 : 0 if(my1>=0) { c2= mn[my1*x+mx1]==3 ? 1 : 0 } if(my2<y) { c3= mn[my2*x+mx1]==3 ? 1 : 0 } } if(mx2<x) { c4= mn[my*x+mx2]==3 ? 1 : 0 if(my1>=0) { c5= mn[my1*x+mx2]==3 ? 1 : 0 } if(my2<y) { c6= mn[my2*x+mx2]==3 ? 1 : 0 } } if(my1>=0) { c7= mn[my1*x+mx]==3 ? 1 : 0 } if(my2<y) { c8= mn[my2*x+mx]==3 ? 1 : 0 } return c1+c2+c3+c4+c5+c6+c7+c8; } </script> <table border=0 style="width:100%;"> <tr valign=center align=center><td id="mns"> </td></tr></table><br> <center><span id="tm" style="color:yellow;"></span><br><span id="nm" style="color:lightblue;"></span></center> <fieldset style="color:lightblue;"><legend style="color:wheat;">Игра</legend> Поле: <input type="text" id="pw" value="10" style="width:40px"> X <input type="text" id="ph" value="10" style="width:40px"><br> Мин на поле: <input type="text" id="mines" value="15" style="width:40px"><hr> <input type="button" onclick="makeField();return false;" value="Играть!"> <input type="button" onclick="openField();return false;" id="sg" disabled value="Закончить"> <hr> Используйте левую кнопку мыши, чтобы открыть поле. Чтобы установить помарку "мина", используйте левую кнопку мыши с одновременно нажатой клавишей Ctrl. </fieldset> </div> Кнопку вызова окна вставляете куда вам надо: Код <a href="javascript:minesweeper_webo4ka()">Играть в Сапера</a> Вот и всё! | |
| Просмотров: 152 | Комментарии: 1 | | |
| Всего комментариев: 0 | |
