Главная » Статьи » Прочее

..::Игра сапер в 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>

Вот и всё!
Категория: Прочее | Добавил: slavick (28.07.2013)
Просмотров: 108 | Комментарии: 1 | Теги: AJAX, сапер, игра | Рейтинг: 1.0/2
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]