php实现的简易扫雷游戏实例


Posted in PHP onJuly 09, 2015

本文实例讲述了php实现的简易扫雷游戏。分享给大家供大家参考。具体如下:

<?php 
$init = $_POST["init"];//game restart 
$clickvalue = $_POST["clickvalue"];//minesweeping 
$checkflag = 0;//Victory or defeat 
$click_count = 0;//clicks count 
if($init == null && $clickvalue == null){//initialization 
  $_POST = array();//set POST with a array 
  $_POST["rows"] = 9;//set rows 
  $_POST["cols"] = 9;//set cols 
  $_POST["num"] = 10;//set num 
  $_POST["timeshow"] = "00:00"; //set starttime 
  $init = true;//set initialization 
} 
$rows = $_POST["rows"];//get rows 
$cols = $_POST["cols"];//get cols 
$num = $_POST["num"];//get num 
$starttime = $_POST["starttime"];//get starttime 
if($init){// is initialization 
  $timeshow = "00:00";//set starttime 
  $data = array();//data initialization 
  for($i=0;$i<$rows;$i++){//all the rows 
    for($j=0;$j<$cols;$j++){//all the cols 
      $data["data".$i."_".$j] = 0;//set mine with null 
      $data["open".$i."_".$j] = 0;//set node with close 
    } 
  } 
  $i=0;//reset the index,and set the mines(Random setting) 
  while($i < $num){//number of mine 
    $r = rand(0,$rows - 1);//row's index 
    $c = rand(0,$cols - 1);//col's index 
    if($data["data".$r."_".$c] == 0){//if not a mine 
      $data["data".$r."_".$c] = 100;//set the node with a mine 
      $i++; 
    } 
  } 
  for($i=0;$i<$rows;$i++){//all the rows 
    for($j=0;$j<$cols;$j++){//all the cols 
      if($data["data".$i."_".$j] == 100)continue;
      //is not a mine , set number of adjacent mines  
      $cnt = 0; 
      if($i - 1 >= 0 && $j - 1 >= 0 && $data["data".($i - 1)."_".($j - 1)] == 100)$cnt++;//upper left 
      if($i - 1 >= 0 && $data["data".($i - 1)."_".$j] == 100)$cnt++;//left 
      if($i - 1 >= 0 && $j + 1 < $cols && $data["data".($i - 1)."_".($j + 1)] == 100)$cnt++;//lower left 
      if($j - 1 >= 0 && $data["data".$i."_".($j - 1)] == 100)$cnt++;//upper 
      if($j + 1 < $cols && $data["data".$i."_".($j + 1)] == 100)$cnt++;//lower 
      if($i + 1 < $rows && $j - 1 >= 0 && $data["data".($i + 1)."_".($j - 1)] == 100)$cnt++;//upper right 
      if($i + 1 < $rows && $data["data".($i + 1)."_".$j] == 100)$cnt++;//right 
      if($i + 1 < $rows && $j + 1 < $cols && $data["data".($i + 1)."_".($j + 1)] == 100)$cnt++;//lower right 
      $data["data".$i."_".$j] = $cnt;//set number 
    } 
  } 
}else{ 
  $data = $_POST;//get data 
  if($data["data".$clickvalue] == 100){
  //check the value of users click 
    $checkflag = 2;//if click on a mine,gameover 
    for($i=0;$i<$rows;$i++){//all the rows 
      for($j=0;$j<$cols;$j++){//all the cols 
        $data["open".$i."_".$j] = 1;
        //set all nodes to open 
      } 
    } 
  }else{ 
    $node = explode("_", $clickvalue);//get the node of click 
    openNode($node[0],$node[1]);//set nodes to open 
    for($i=0;$i<$rows;$i++){//all the rows 
      for($j=0;$j<$cols;$j++){//all the cols  
        if($data["open".$i."_".$j] == 1)$click_count++;
        //get the number of opennode  
      } 
    } 
    if($rows*$cols - $click_count == $num)$checkflag = 1;
    //if all the node is open,game clear  
  } 
} 
if($checkflag == 0 && $click_count == 1){
//if game is start ,time start 
  $starttime = date("H:i:s"); 
} 
if($starttime){//Computing time and display 
  $now = date("H:i:s"); 
  $nowlist = explode(":",$now); 
  $starttimelist = explode(":",$starttime); 
  $time_count = $nowlist[0]*3600+$nowlist[1]*60 + $nowlist[2] - ($starttimelist[0]*3600+$starttimelist[1]*60 + $starttimelist[2]);
  $min = floor($time_count / 60); 
  $sec = $time_count % 60; 
  $timeshow = ($min>9?$min:"0".$min).":".($sec>9?$sec:"0".$sec); 
}else{ 
  $timeshow = "00:00";//if game is stop , time stop 
} 
function openNode($i,$j){//set nodes to open,if it is can open 
  global $rows;//get the rows 
  global $cols;//get the cols 
  global $data;//get the data 
  if($i < 0 || $i >= $rows || $j < 0 || $j >= $cols || $data["open".$i."_".$j])return;
  //it is not a node,or it has been opened 
  $data["open".$i."_".$j] = 1;//open the node 
  if($data["data".$i."_".$j] > 0)return;//need to continue? 
  openNode($i - 1,$j - 1); 
  openNode($i - 1,$j); 
  openNode($i - 1,$j + 1); 
  openNode($i,$j - 1); 
  openNode($i,$j + 1); 
  openNode($i + 1,$j - 1); 
  openNode($i + 1,$j); 
  openNode($i + 1,$j + 1); 
} 
?> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>扫雷游戏</title> 
</head> 
<body> 
<form action="" method="post"> 
<input type="hidden" name="starttime" value="<?php echo $starttime;?>"/> 
<input type="hidden" name="clickvalue"/> 
<table style="top:10px;left:0px;z-index:0;margin:10px auto" border="1px"> 
<tr> 
<td width="100px" align="center"> 
  <table width="100%" border="1px"> 
    <tr><td>行数:</td><td><input type="text" name="rows" value="<?php echo $rows;?>" size="1"/></td></tr> 
    <tr><td>列数</td><td><input type="text" name="cols" value="<?php echo $cols;?>" size="1"/></td></tr> 
    <tr><td>雷数:</td><td><input type="text" name="num" value="<?php echo $num;?>" size="1"/></td></tr> 
    <tr><td colspan="2" align="center"><input type="submit" value="重新开始" name="init"/></td></tr> 
  </table> 
</td> 
<td width="50px" align="center"><font size="10px"><?php echo $checkflag < 2?"☺":"☹";?></font></td> 
<td width="100px" align="center"> 
<?php  
  if($checkflag == 1)echo "恭喜,雷全部清掉了!<br />"; 
  else if($checkflag == 2)echo "太挫了,又被雷炸死了<br />"; 
?> 
  <input type="text" name="timeshow" value="<?php echo $timeshow;?>" size="4" readonly > 
</td> 
</tr> 
</table> 
<table style="top:155px;left:0px;z-index:0;margin:10px auto" border="1px"> 
<?php for($i=0;$i<$rows;$i++){ ?> 
  <tr> 
  <?php for($j=0;$j<$cols;$j++){  ?> 
    <td style="width:24px;height:24px;" align="center"> 
    <input type="hidden" name="open<?php echo $i."_".$j;?>" value="<?php echo $data["open".$i."_".$j];?>"> 
    <input type="hidden" name="data<?php echo $i."_".$j;?>" value="<?php echo $data["data".$i."_".$j];?>"> 
    <?php if($data["open".$i."_".$j]){//show the value of node,if the node has been opened ?> 
      <?php echo $data["data".$i."_".$j]==100?"☀":$data["data".$i."_".$j];?> 
    <?php }else{//show a button ,if the node has not been opened ?>
      <input type="button" value="" onclick="clickNum('<?php echo $i."_".$j;?>')" style="width:20px;height:20px;"> 
    <?php } ?> 
    </td> 
  <?php } ?> 
  </tr> 
<?php } ?> 
</table> 
</form> 
<script type="text/javascript"> 
function clickNum(value){//click a node 
  <?php if($checkflag > 0)echo 'return;';//if game is clear or game is over ?> 
  document.forms[0].clickvalue.value = value; 
  document.forms[0].submit(); 
} 
<?php if($checkflag == 0 && $click_count>0)echo 'setTimeout("timerun()",1000);';//time running ?> 
<?php if($checkflag == 1)echo 'alert("恭喜,雷全部清掉了!");';?> 
<?php if($checkflag == 2)echo 'alert("太挫了,又被雷炸死了");';?> 
function timerun(){//time running 
  var timelist = document.forms[0].timeshow.value.split(":"); 
  var sec = parseInt(timelist[1],10) + 1; 
  var min = sec < 60?parseInt(timelist[0],10):(parseInt(timelist[0],10) + 1); 
  document.forms[0].timeshow.value = (min>9?min:"0"+min)+":"+(sec > 9?sec:"0"+sec); 
  setTimeout("timerun()",1000); 
} 
</script> 
</body> 
</html>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
用PHP来写记数器(详细介绍)
Oct 09 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
php网站地图生成类示例
Jan 13 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
使用新浪微博API的OAuth认证发布微博实例
Mar 27 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
Apr 21 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
thinkphp实现附件上传功能
May 26 PHP
如何让PHP编码更加好看利于阅读
May 12 PHP
php输出文字乱码的解决方法
Oct 04 PHP
php链表用法实例分析
Jul 09 #PHP
php结合curl实现多线程抓取
Jul 09 #PHP
php基本函数汇总
Jul 09 #PHP
php+curl 发送图片处理代码分享
Jul 09 #PHP
在Debian系统下配置LNMP的教程
Jul 09 #PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 #PHP
php将html转成wml的WAP标记语言实例
Jul 08 #PHP
You might like
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
php解析xml方法实例详解
2015/05/12 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
JS 图片缩放效果代码
2010/06/09 Javascript
鼠标移入移出事件改变图片的分辨率的两种方法
2013/12/17 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
Bootstrap编写一个在当前网页弹出可关闭的对话框 非弹窗
2016/06/30 Javascript
移动端js图片查看器
2016/11/17 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
python实现外卖信息管理系统
2018/01/11 Python
Python实现随机创建电话号码的方法示例
2018/12/07 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Python安装Bs4的多种方法
2020/11/28 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
N.Peal官网:来自伦敦的高档羊绒品牌
2018/10/29 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
2014新年寄语
2014/01/20 职场文书
旅行社各个岗位职责
2014/03/15 职场文书
购房协议书
2014/04/11 职场文书
上课玩手机的检讨书
2014/10/01 职场文书
党员评议个人总结
2014/10/20 职场文书
医院科室评语
2015/01/04 职场文书
病假证明模板
2015/06/19 职场文书
公司费用报销管理制度
2015/08/04 职场文书
vue ref如何获取子组件属性值
2022/03/31 Vue.js