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 discuz 主题表和回帖表的设计
Mar 13 PHP
PHP 文件上传功能实现代码
Jun 24 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
关于session在PHP5的配置文件中的详细设置参数说明
Apr 20 PHP
php实现的短网址算法分享
Jun 20 PHP
WordPress自定义时间显示格式
Mar 27 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
Oct 11 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
php使用str_replace替换多维数组的实现方法分析
Jun 15 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
laravel框架查询数据集转为数组的两种方法
Oct 10 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 smarty模版引擎中的缓存应用
2009/12/11 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
php实现telnet功能示例
2014/04/08 PHP
php数据访问之增删改查操作
2016/05/09 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
PHP7 windows支持
2021/03/09 PHP
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
30个经典的jQuery代码开发技巧
2014/12/15 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
angularjs封装$http为factory的方法
2017/05/18 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
js页面加载后执行的几种方式小结
2020/01/30 Javascript
[01:24]DOTA2上海特锦赛OG战队抵达 专车接机入驻总统套房
2016/02/23 DOTA
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python KMeans聚类问题分析
2018/02/23 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
把pandas转换int型为str型的方法
2019/01/29 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
Python使用ElementTree美化XML格式的操作
2020/03/06 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
社团2014年植树节活动总结
2014/03/11 职场文书
关于学习的决心书
2015/02/05 职场文书
七一活动主持词
2015/06/29 职场文书
十二月早安励志心语大全
2019/12/03 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏