讲师中心 微信公众号
AI工具推荐 视频效率加速

php开发的简易扫雷游戏

陌瑶吖_3148

陌瑶吖_3148

发布时间:2016-05-25 17:05:35

|

2201人浏览过

|

来源于php中文网

原创

[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代码,规避类型转换陷阱、数组怪癖及常见安全漏洞。

下载

                   

热门AI工具

更多
LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

160

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

80

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

80

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

40

2026.09.22

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

60

2026.09.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

60

2026.09.22

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

60

2026.09.22

NumPy常见函数使用方法
NumPy常见函数使用方法

本专题整理 NumPy 常见函数使用方法相关教程,覆盖函数大全、参数用法、数组运算、统计聚合、排序处理、where 条件筛选、linspace 创建数列等常用场景,帮助读者快速掌握 NumPy 函数调用思路和实际数据处理技巧。

80

2026.09.22

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

80

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn