打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
PHP实现的扫雷源代码

<?
 session_start();
 

 
 print "<html>";
 print "<head>";
 print "<title>PHP挖地雷</title>";
 print "</head>";
 print "<body bgcolor=lightblue><center>";
 print "<font size=5 face=Verdana color = red><b>PHP挖地雷</b>";
 
 //echo "<pre>";
 //print_r($_POST);
 //echo "</pre>";
 
 extract($_SESSION);
 extract($_POST);
 //设置默认的地图大小和雷的数量
 if ($submit=="")
 {
  $NumMine=4;   //存储雷的数量
  $RowSize=5;   //存储行数
  $ColSize=5;   //存储列数
  $generer=1;   //控制玩家是否是点击的开始按钮或者点击的雷区
 }
 
 //第一次进入本页面中,初始化游戏
 if($generer==1)
 {
  srand((double)microtime()*100000000);
  $time_start=time();    //记录开始的时间
  
  //判断输入的数值是否正确
  if(($RowSize<=1) || ($ColSize<=1) || ($NumMine==0))
  {
   print "<p><br><font size=-1 color=red>行数,列数或地雷数输入错误!!</font>";
   exit;
  }
  if($NumMine > $RowSize*$ColSize)
  {
   print "<p><br><font size=-1 color=red>地雷数太多!</font>";
   exit;
  }
  
  unset($Mine);
  unset($Decouv);
  
  //初始化地图,Mine数组记录地雷的位置数组,Decouv数组记录整个地图的每个方块的状态
  //全部初始化为0
  for($Row=1;$Row<=$RowSize;$Row++)
  {
   for($Col=1;$Col<=$ColSize;$Col++)
   {
    $Mine[$Row][$Col]="0";
    $Decouv[$Row][$Col]="0";
   }
  }
  
  //临时记录你布雷的数量
  $index=0;
  //确定地图中地雷的位置
  while($index<$NumMine)
  {
   $Row=rand(1,$RowSize);
   $Col=rand(1,$ColSize);
   if($Mine[$Row][$Col]=="0")
   {
    $Mine[$Row][$Col]="1";
    $index++;
   }
  }
 }
 else
 {
  $perdu=0;           //记录玩家点的方格是否为地雷
  $reste=$RowSize*$ColSize;       //记录玩家没有点开方格的数量,判断用户是否赢得比赛,初始化为整个雷区的方格数
  
  //这两个for循环接受玩儿家点击之前的信息,并对玩儿家点击的方块进行判断
  for($Row=1;$Row<=$RowSize;$Row++)
  {
   for($Col=1;$Col<=$ColSize;$Col++)
   {    
    if($Decouv[$Row][$Col]=="1") {$reste=$reste-1;}  //计算用户已经点开了多少的方块,每次提交都重新计算一次
    
    $temp="submit".$Row.$Col;     //根据用户点击的submit的名字判断玩家点击的是哪个方块
    if($$temp=="X")
    {
     $reste=$reste-1;
     if($Mine[$Row][$Col]=="0")       //当用户点击的方块不是雷,则标记Decouv数组方块已经点开
     {
      $Decouv[$Row][$Col]="1";
     }
     else
     {
      $perdu=1;
     }
    }
   }
  }
  
  
  //如果perdu变量为1则说明用户点中了雷
  if($perdu==1)
  {
   print "<h2><font color=red>您输啦!</font></h2>";
   for($i=1;$i<=$RowSize;$i++)
   {
    for($j=1;$j<=$ColSize;$j++)
    {
     $Decouv[$i][$j]="1";
    }
   }
  }
  
  //玩家最终留下的方格数等于雷的数量并且玩儿家没有点中雷
  if(($reste==$NumMine)&&($perdu!=1))
  {
   print "<h2>你赢啦!</h2>";
   $time_stop=time();
   $time=$time_stop-$time_start;         //得到总共使用的分钟数
   
   print "<p><font size=-1><i>您所用的时间为: $time 秒</i></font>";
   for ($i=1;$i<=$RowSize;$i++)
   {
    for($j=1;$j<=$ColSize;$j++)
    {
     $Decouv[$i][$j]="1";
    }
   }
  }
 }
 print "<form method=post action='$PHP_SELF'>";
 $_SESSION['time_start'] = $time_start;
 $_SESSION['NumMine'] = $NumMine;
 $_SESSION['RowSize'] = $RowSize;
 $_SESSION['ColSize'] = $ColSize;
 $_SESSION['generer'] = 0;

 print "<p><table border=1 cellpadding=8>";
 
 //此双重for循环打印雷区
 for($Row=1; $Row<=$RowSize; $Row++)
 {
  print "<tr>";
  for($Col=1; $Col<=$ColSize; $Col++)
  {   
   $nb=0;         //通过此变量来计算每个方格四周的雷的数量
   //遍历每个方格的四周,记录雷数
   for($i=-1; $i<=1; $i++)
   {
    for($j=-1; $j<=1; $j++)
    {
     if($Mine[$Row+$i][$Col+$j] == "1")
     {
      $nb++;
     }
    }
    
   }
   
   
   //打印雷区表格
   print "<td width=20 height=20 align=center valign=middle>";
   
   //用户点击Row行,Col列的方格后
   if($Decouv[$Row][$Col]=="1")
   {
    if($nb==0)
    {
     print " ";    //如果此方格四周无雷,显示空格
    }
    else
    {
     //用户点中雷后,显示红色*,代表雷
     if($Mine[$Row][$Col]=="1")
     {
      print "<font color=red>*</font>";
     }
     else//如果玩家点中的不是雷,显示周围的雷的数量
     {
      print "$nb";
     }
    }
   }
   else
   {
    print "<input type=hidden name=submit value=okd>";
    print "<input type=submit name=submit".$Row.$Col." value=X>";
   }
  
   $_SESSION['Mine'] = $Mine;
   $_SESSION['Decouv'] = $Decouv;
   print "</td>";
  }
  print "</tr>";
 }
 print "</table>";
 print "</form>";
?>
<hr>
    <form method=post>
        行数 :   <input type=text name=RowSize value=5 size=2>
        <br>
        列数 :   <input type=text name=ColSize value=5 size=2>
        <br>
        地雷数 :  <input type=text name=NumMine value=4 size=2>
        <p>
        <input type=submit name=submit value=开始>
        <input type=hidden name=generer value=1>
    </form>
</body>
</html>

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
迈瑞的四道IQ笔试题
矩阵的存储及转置算法
python中使用xlrd、xlwt操作excel表格详解
Python读写Excel表格,就是这么简单粗暴又好用
python操作Excel模块openpyxl
python之处理excel表格
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服