• 技术文章 >后端开发 >php教程

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

    2016-05-30 08:46:51原创521

    本文实例讲述了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); 
    } 
    ?> 
     
     
     
    扫雷游戏 
    
    
    行数:
    列数
    雷数:
    <?php echo $checkflag < 2?"☺":"☹";?> <?php if($checkflag == 1)echo "恭喜,雷全部清掉了!
    "; else if($checkflag == 2)echo "太挫了,又被雷炸死了
    "; ?>
    <?php for($i=0;$i<$rows;$i++){ ?> <?php for($j=0;$j<$cols;$j++){ ?> <?php } ?> <?php } ?>
    " value="<?php echo $data["open".$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 ?> ')" style="width:20px;height:20px;"> <?php } ?>

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

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 扫雷游戏
    上一篇:PHP使用pear自带的mail类库发邮件的方法_PHP 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php实现通过JSON RPC与go通讯(附代码)• 浅析怎么使用PHP做异步爬取数据• PHP8.3要有新函数了!(json_validate函数说明)• 设计API接口时,要注意这些地方!• PHP网站常见一些安全漏洞及防御方法
    1/1

    PHP中文网