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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
实用函数7
Nov 08 PHP
jq的get传参数在utf-8中乱码问题的解决php版
Jul 23 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
PHP sprintf()函数用例解析
May 18 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
开启PHP Static 关键字之旅模式
Nov 13 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
通过PHP设置BugFree获取邮箱通知
Apr 25 PHP
PHP强制转化的形式整理
May 22 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远程连接MYSQL数据库非常慢的解决方法
2008/07/05 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
浅析php学习的路线图
2013/07/10 PHP
PHP中对缓冲区的控制实现代码
2013/09/29 PHP
PHP多线程类及用法实例
2014/12/03 PHP
php 从一个数组中随机的取出若干个不同的数实例
2016/12/31 PHP
PHP实现的防止跨站和xss攻击代码【来自阿里云】
2018/01/29 PHP
js 操作符实例代码
2009/10/24 Javascript
javascript cookies操作集合
2010/04/12 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
Vue原理剖析 实现双向绑定MVVM
2017/05/03 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
Python 错误和异常小结
2013/10/09 Python
使用Python的内建模块collections的教程
2015/04/28 Python
python判断给定的字符串是否是有效日期的方法
2015/05/13 Python
浅谈python socket函数中,send与sendall的区别与使用方法
2017/05/09 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
Python实现仿射密码的思路详解
2020/04/23 Python
食品营养与检测应届生求职信
2013/11/08 职场文书
机修工岗位职责
2013/11/24 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
大学生活动总结模板
2014/07/02 职场文书
歌舞青春观后感
2015/06/10 职场文书
士兵突击观后感
2015/06/16 职场文书
2016幼儿园教师节新闻稿
2015/11/25 职场文书
python使用pywinauto驱动微信客户端实现公众号爬虫
2021/05/19 Python
python解析json数据
2022/04/29 Python