Advertisement
VrIgHtEr

Minesweeper

Jul 31st, 2011
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 5 8.20 KB | None | 0 0
  1. <!DOCTYPE HTML>
  2.  
  3. <html>
  4.  
  5.     <head>
  6.  
  7.         <meta charset="UTF-8">
  8.  
  9.         <title>
  10.  
  11.             minesweeper
  12.  
  13.         </title>
  14.  
  15.         <script type="text/javascript">
  16.  
  17.         var xsize;
  18.  
  19.         var ysize;
  20.  
  21.         var bombs;
  22.  
  23.  
  24.  
  25.         var gamestarted;
  26.  
  27.         var gameover;
  28.  
  29.         var gamewon;
  30.  
  31.         var gamemustend;
  32.  
  33.        
  34.  
  35.         var state;
  36.  
  37.         var traps;
  38.  
  39.         var browserie=(navigator.appName.indexOf("Internet Explorer")!=-1);
  40.  
  41.         var firstpressed;
  42.  
  43.        
  44.  
  45.         var starttime;
  46.  
  47.         var bleft;
  48.  
  49.        
  50.  
  51.         var timer=null;
  52.  
  53.         var buttons;
  54.  
  55.        
  56.  
  57.         function leftclicked(id)
  58.  
  59.         {
  60.  
  61.             if(firstpressed)
  62.  
  63.             {
  64.  
  65.                 open(id);
  66.  
  67.             }
  68.  
  69.             else
  70.  
  71.             {
  72.  
  73.                 firstpressed=true;
  74.  
  75.                 if(traps[id]==-1)
  76.  
  77.                 {
  78.  
  79.                     do
  80.  
  81.                     {
  82.  
  83.                         reset();
  84.  
  85.                     }while(traps[id]==-1);
  86.  
  87.                 }
  88.  
  89.                 open(id);
  90.  
  91.             }
  92.  
  93.             updatebuttons(true);
  94.  
  95.         }
  96.  
  97.        
  98.  
  99.         function rightclicked(id)
  100.  
  101.         {
  102.  
  103.             firstpressed=true;
  104.  
  105.             if(state[id]==0)
  106.  
  107.             {
  108.  
  109.                 state[id]=2;
  110.  
  111.                 bleft--;
  112.  
  113.             }
  114.  
  115.             else if(state[id]==2)
  116.  
  117.             {
  118.  
  119.                 state[id]=0;
  120.  
  121.                 bleft++;
  122.  
  123.             }
  124.  
  125.             updatebuttons(false);
  126.  
  127.         }
  128.  
  129.        
  130.  
  131.         function middleclicked(id)
  132.  
  133.         {
  134.  
  135.             if((state[id]==1)&&(traps[id]>0)&&(countflagged(id)==traps[id]))opensurrounding(id);
  136.  
  137.             updatebuttons(true);
  138.  
  139.         }
  140.  
  141.        
  142.  
  143.         function buttonclicked(id,event)
  144.  
  145.         {
  146.  
  147.             if(gameover)return;
  148.  
  149.             if((!gamestarted)&&(event.button!=(browserie?4:1)))
  150.  
  151.             {
  152.  
  153.                 gamestarted=true;
  154.  
  155.                 starttime=new Date().getTime();
  156.  
  157.                 document.getElementById("gamebtn").style.backgroundColor="#DDDDDD";
  158.  
  159.                 timer=setTimeout("updatetimer(true);",100);
  160.  
  161.             }
  162.  
  163.             if(browserie)
  164.  
  165.             {
  166.  
  167.                 if(event.button==1)leftclicked(id);
  168.  
  169.                 else if(event.button==2)rightclicked(id);
  170.  
  171.                 else if(event.button==4)middleclicked(id);
  172.  
  173.             }
  174.  
  175.             else
  176.  
  177.             {
  178.  
  179.                 if(event.button==0)leftclicked(id);
  180.  
  181.                 else if(event.button==2)rightclicked(id);
  182.  
  183.                 else if(event.button==1)middleclicked(id);
  184.  
  185.             }
  186.  
  187.         }
  188.  
  189.        
  190.  
  191.         function updatetimer(retrigger)
  192.  
  193.         {
  194.  
  195.             document.getElementById("timer").innerHTML="Time: "+((new Date().getTime()-starttime)/1000).toFixed(3);
  196.  
  197.             if(retrigger)timer=setTimeout("updatetimer(true);",100);
  198.  
  199.         }
  200.  
  201.        
  202.  
  203.         function open(id)
  204.  
  205.         {
  206.  
  207.             if(state[id]!=0)return;
  208.  
  209.             state[id]=1;
  210.  
  211.             if(traps[id]==0)opensurrounding(id);
  212.  
  213.             if(traps[id]==-1)gamemustend=true;
  214.  
  215.         }
  216.  
  217.        
  218.  
  219.         function countflagged(id)
  220.  
  221.         {
  222.  
  223.             var count=0;
  224.  
  225.             var x=id%xsize,y=Math.floor(id/xsize);
  226.  
  227.             if(x>0)if(state[id-1]==2)count++;
  228.  
  229.             if(x<(xsize-1))if(state[id+1]==2)count++;
  230.  
  231.             if(y>0)if(state[id-xsize]==2)count++;
  232.  
  233.             if(y<(ysize-1))if(state[id+xsize]==2)count++;
  234.  
  235.             if((x>0)&&(y>0))if(state[id-xsize-1]==2)count++;
  236.  
  237.             if((x<(xsize-1))&&(y>0))if(state[id-xsize+1]==2)count++;
  238.  
  239.             if((x>0)&&(y<(ysize-1)))if(state[id+xsize-1]==2)count++;
  240.  
  241.             if((x<(xsize-1))&&(y<(ysize-1)))if(state[id+xsize+1]==2)count++;
  242.  
  243.             return count;
  244.  
  245.         }
  246.  
  247.  
  248.  
  249.         function opensurrounding(id)
  250.  
  251.         {
  252.  
  253.             var x=id%xsize,y=Math.floor(id/xsize);
  254.  
  255.             if(x>0)open(id-1);
  256.  
  257.             if(x<(xsize-1))open(id+1);
  258.  
  259.             if(y>0)open(id-xsize);
  260.  
  261.             if(y<(ysize-1))open(id+xsize);
  262.  
  263.             if((x>0)&&(y>0))open(id-xsize-1);
  264.  
  265.             if((x<(xsize-1))&&(y>0))open(id-xsize+1);
  266.  
  267.             if((x>0)&&(y<(ysize-1)))open(id+xsize-1);
  268.  
  269.             if((x<(xsize-1))&&(y<(ysize-1)))open(id+xsize+1);
  270.  
  271.         }
  272.  
  273.        
  274.  
  275.         function reset()
  276.  
  277.         {
  278.  
  279.             state=new Array(xsize*ysize);
  280.  
  281.             for(var i=0;i<state.length;i++)state[i]=0;
  282.  
  283.             traps=new Array(xsize*ysize);
  284.  
  285.             var bombsleft=bombs;
  286.  
  287.             for(var i=0;i<traps.length;i++)traps[i]=0;
  288.  
  289.             while(bombsleft>0)
  290.  
  291.             {
  292.  
  293.                 var pos=Math.floor(Math.random()*traps.length);
  294.  
  295.                 if(traps[pos]!=-1)
  296.  
  297.                 {
  298.  
  299.                     traps[pos]=-1;
  300.  
  301.                     bombsleft--;
  302.  
  303.                 }
  304.  
  305.             }
  306.  
  307.             for(var i=0;i<traps.length;i++)traps[i]=((traps[i]==-1)?-1:counttraps(i));
  308.  
  309.             gamestarted=false;
  310.  
  311.             gameover=false;
  312.  
  313.             gamewon=false;
  314.  
  315.             gamemustend=false;
  316.  
  317.             firstpressed=false;
  318.  
  319.             bleft=bombs;
  320.  
  321.             if(timer!=null)clearTimeout(timer);
  322.  
  323.             document.getElementById("timer").innerHTML="Time: 0.000";
  324.  
  325.             document.getElementById("gamebtn").style.backgroundColor="#888888";
  326.  
  327.             updatebuttons(false);
  328.  
  329.         }
  330.  
  331.        
  332.  
  333.         function updatebuttons(check)
  334.  
  335.         {
  336.  
  337.             for(var i=0;i<traps.length;i++)
  338.  
  339.             {
  340.  
  341.                 var btn=buttons[i];
  342.  
  343.                 btn.value="";
  344.  
  345.                 btn.style.background="#FFFFFF";
  346.  
  347.                 if(state[i]==0)btn.style.background="#999999";
  348.  
  349.                 if(gameover&&(traps[i]==-1))btn.style.background="#333333";
  350.  
  351.                 if(state[i]==2)btn.style.background="#00FF00";
  352.  
  353.                 if(gameover&&(state[i]==2)&&(traps[i]!=-1))btn.style.background="#FF0000";
  354.  
  355.                 if((state[i]==1)&&(traps[i]>0))btn.value=traps[i];
  356.  
  357.                 if((state[i]==1)&&(traps[i]==-1))btn.style.background="#FF00FF";
  358.  
  359.             }
  360.  
  361.             gamewon=checkwin();
  362.  
  363.             if((check&&gamewon)||gamemustend)
  364.  
  365.             {
  366.  
  367.                 endgame();
  368.  
  369.             }
  370.  
  371.             document.getElementById("bleft").innerHTML="Bombs: "+(gamewon?0:bleft);
  372.  
  373.         }
  374.  
  375.        
  376.  
  377.         function endgame()
  378.  
  379.         {
  380.  
  381.             gamemustend=false;
  382.  
  383.             gameover=true;
  384.  
  385.             if(gamewon)
  386.  
  387.             {
  388.  
  389.                 for(var i=0;i<traps.length;i++)
  390.  
  391.                 {
  392.  
  393.                     if(traps[i]==-1)state[i]=2;
  394.  
  395.                 }
  396.  
  397.                 document.getElementById("gamebtn").style.backgroundColor="#00FF00";
  398.  
  399.             }
  400.  
  401.             else
  402.  
  403.             {
  404.  
  405.                 document.getElementById("gamebtn").style.backgroundColor="#FF0000";
  406.  
  407.             }
  408.  
  409.             updatebuttons(false);
  410.  
  411.             clearTimeout(timer);
  412.  
  413.             updatetimer(false);
  414.  
  415.         }
  416.  
  417.        
  418.  
  419.         function checkwin()
  420.  
  421.         {
  422.  
  423.             for(var i=0;i<traps.length;i++)
  424.  
  425.             {
  426.  
  427.                 if((traps[i]!=-1)&&(state[i]!=1))return false;
  428.  
  429.             }
  430.  
  431.             return true;
  432.  
  433.         }
  434.  
  435.        
  436.  
  437.         function counttraps(id)
  438.  
  439.         {
  440.  
  441.             var count=0;
  442.  
  443.             var x=id%xsize,y=Math.floor(id/xsize);
  444.  
  445.             if(x>0)if(traps[id-1]==-1)count++;
  446.  
  447.             if(x<(xsize-1))if(traps[id+1]==-1)count++;
  448.  
  449.             if(y>0)if(traps[id-xsize]==-1)count++;
  450.  
  451.             if(y<(ysize-1))if(traps[id+xsize]==-1)count++;
  452.  
  453.             if((x>0)&&(y>0))if(traps[id-xsize-1]==-1)count++;
  454.  
  455.             if((x<(xsize-1))&&(y>0))if(traps[id-xsize+1]==-1)count++;
  456.  
  457.             if((x>0)&&(y<(ysize-1)))if(traps[id+xsize-1]==-1)count++;
  458.  
  459.             if((x<(xsize-1))&&(y<(ysize-1)))if(traps[id+xsize+1]==-1)count++;
  460.  
  461.             return count;
  462.  
  463.         }
  464.  
  465.        
  466.  
  467.         function createboard(x,y,b)
  468.  
  469.         {
  470.  
  471.             xsize=x;
  472.  
  473.             ysize=y;
  474.  
  475.             bombs=b;
  476.  
  477.            
  478.  
  479.             var boardhtml="<table cellspacing=\"0px\" style=\"border-collapse:collapse;line-height:0px;border:2px solid #000000\">";
  480.  
  481.             for(var i=0;i<ysize;i++)
  482.  
  483.             {
  484.  
  485.                 boardhtml+="<tr>";
  486.  
  487.                 for(var j=0;j<xsize;j++)
  488.  
  489.                 {
  490.  
  491.                     boardhtml+="<td style=\"padding:0px;\"><input type=\"button\" style=\"color:black;border:1px solid;width:20px;height:20px;font-weight:bold;\" onmousedown=\"buttonclicked("+(xsize*i+j)+",event)\" id=\""+(xsize*i+j)+"\" value=\" \"/><"+"/td>";
  492.  
  493.                 }
  494.  
  495.                 boardhtml+="<"+"/tr>";
  496.  
  497.             }
  498.  
  499.             boardhtml+="</"+"table>";
  500.  
  501.             document.getElementById("board").innerHTML=boardhtml;
  502.  
  503.             document.getElementById("controls").style.width=(20*x+4)+"px";
  504.  
  505.             buttons=new Array();
  506.  
  507.             for(var i=0;i<(x*y);i++)
  508.  
  509.             {
  510.  
  511.                 buttons[buttons.length]=document.getElementById(i);
  512.  
  513.             }
  514.  
  515.             reset();
  516.  
  517.         }
  518.  
  519.         </script>
  520.  
  521.     </head>
  522.  
  523.     <body oncontextmenu="return false;">
  524.  
  525.         <div id="board">
  526.  
  527.         </div>
  528.  
  529.         <table id="controls" style="background-color:#CCCCCC;border:1px solid black;width:10px;">
  530.  
  531.             <tr>
  532.  
  533.                 <td style="width:40%;border:1px solid black;text-align:left">
  534.  
  535.                     <span id="bleft">0</span>
  536.  
  537.                 </td>
  538.  
  539.                 <td style="width:20%;text-align:center;">
  540.  
  541.                     <input id="gamebtn" style="vertical-align:middle;width:100%;height:20px" onmousedown="reset()" type="button" value=" " />
  542.  
  543.                 </td>
  544.  
  545.                 <td style="text-align:right;width:40%;border:1px solid black;">
  546.  
  547.                     <span id="timer">0</span>
  548.  
  549.                 </td>
  550.  
  551.             </tr>
  552.  
  553.         </table>
  554.  
  555.         <table style="background-color:#CCCCCC;border:1px solid black;width:10px;border-top:none">
  556.  
  557.             <tr>
  558.  
  559.                 <td style="text-align:left">
  560.  
  561.                     <input onmousedown="createboard(9,9,10)" type="button" value="Easy" />
  562.  
  563.                 </td>
  564.  
  565.                 <td style="text-align:center;">
  566.  
  567.                     <input onmousedown="createboard(16,16,40)" type="button" value="Medium" />
  568.  
  569.                 </td>
  570.  
  571.                 <td style="text-align:right;">
  572.  
  573.                     <input onmousedown="createboard(30,16,99)" type="button" value="Hard" />
  574.  
  575.                 </td>
  576.  
  577.             </tr>
  578.  
  579.         </table>
  580.  
  581.         <script type="text/javascript">
  582.  
  583.             createboard(16,16,40);
  584.  
  585.         </script>
  586.  
  587.     </body>
  588.  
  589. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement