<?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扫雷(转载)。的更多相关文章

  1. (转载)WinformGDI+入门级实例——扫雷游戏(附源码)

    本文将作为一个入门级的.结合源码的文章,旨在为刚刚接触GDI+编程或对相关知识感兴趣的读者做一个入门讲解.游戏尚且未完善,但基本功能都有,完整源码在文章结尾的附件中. 整体思路: 扫雷的游戏界面让我从 ...

  2. Java课程设计——扫雷(winmine)

    因为是我的课程设计,要是有冲突就不好了,转载注明出处!!! 程序很简单,毕竟我是搞acm的,我就只介绍一下闪光点. 中心空白搜索的时候,我用的DFS: 有一点是要注意的,就是JFrame不支持重画,还 ...

  3. 【转载】C#防SQL注入过滤危险字符信息

    不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的 ...

  4. J2EE,J2SE,J2ME,JDK,SDK,JRE,JVM区别(转载)

    转载地址:http://blog.csdn.net/alspwx/article/details/20799017 一.J2EE.J2SE.J2ME区别 J2EE——全称Java 2 Enterpri ...

  5. iOS 扫雷游戏

    代码地址如下:http://www.demodashi.com/demo/11254.html 1.项目结构图 Viewcontroller:扫雷逻辑代码 LevelModel:扫雷难度选择代码 2. ...

  6. C++基础之:扫雷破解

    版权声明: 本文原创发布于博客园"优梦创客"的博客空间(网址:http://www.cnblogs.com/raymondking123/)以及微信公众号"优梦创客&qu ...

  7. 【转载】C#中List集合使用Max()方法查找到最大值

    在C#的List集合操作中,有时候需要查找到List集合中的最大值,此时可以使用List集合的扩展方法Max方法,Max方法有2种形式,一种是不带任何参数的形式,适用于一些值类型变量的List集合,另 ...

  8. 【转载】C#中List集合使用Contains方法判断是否包含某个对象

    在C#的List集合中,如果要查找List集合是否包含某一个值或者对象,如果不使用List集合类的扩展方法的话一般会使用for循环或者foreach遍历来查找,其实List集合类中的扩展方法Conta ...

  9. 【转载】C#中List集合使用Remove方法移除指定的对象

    在C#的List集合操作中,有时候需要将特定的对象或者元素移除出List集合序列中,此时可使用到List集合的Remove方法,Remove方法的方法签名为bool Remove(T item),it ...

随机推荐

  1. hdu2309ICPC Score Totalizer Software

    Problem Description The International Clown and Pierrot Competition (ICPC), is one of the most disti ...

  2. 在配置WCF服务的时候出现的错误总结

    1.由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序.如果应下载文件,请添加 MIME 映射. 我是通过安装图中的FramWork3.5.1搞定的. 网上的其他参考: http ...

  3. jeasyui制作计划-搭建php运行环境

    1.参考链接: http://jingyan.baidu.com/article/154b46315242b328ca8f4101.html http://jingyan.baidu.com/arti ...

  4. 为什么所有浏览器的userAgent都带Mozilla

    参看下面链接:<为什么所有的浏览器的userAgent都带Mozilla>

  5. 解决ios双击页面上移问题

    做webapp时,ios有个默认双击事件,会缩放页面,并将当前点击的位置居中到屏幕,本来也没什么,但是当页面中有fixed定位的元素时,这时候你就会神奇的发现,fixed元素所见不所得了! 还有就是页 ...

  6. wxwidgets demo

    环境说明: IOS: mac 10.9 wx:  wxWidgets-2.9.5  (http://www.wxwidgets.org/downloads/) gcc: $gcci686-apple- ...

  7. dict.get('key')和dict['key']的区别

    dict['key']只能获取存在的值,如果不存在会触发KeyError dict.get('key', default=None)如果不存在,返回一个默认值

  8. leetcode 237 Delete Node in a Linked List python

    题目: Write a function to delete a node (except the tail) in a singly linked list, given only access t ...

  9. 水池(DFS)

    水池数目 点我 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上仅标识了此处是否是水池,现在,你的任务来了,请用计算机算出该地图中 ...

  10. Ubuntu Mysql开通外网访问权限

    Ubuntu Mysql开通外网访问权限   1.编辑 my.cnf 文件: sudo vi /etc/mysql/my.cnf   2.将绑定地址行注释掉或者修改为指定 IP #bind-addre ...