设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 6105|回复: 8
收起左侧

[PHP/ASP/JSP] 数字滑块N宫格推盘终于出3D立方版的了! 采用纯PHP源码实现的 - 只需要1个文件

[复制链接]
发表于 2018-1-21 17:21:23 | 显示全部楼层 |阅读模式
操控此游戏需要5个手机并接入同一个局域网,其中4个用于4个层的显示,型号最好一样,另外一个用于操控数字6个方向的移动,还原算法目前还是一片空白,大神可以继续研究。
单片机版:https://www.fedcba9876543210.com/thread-229-1-1.html
易语言版:https://www.fedcba9876543210.com/thread-530-1-1.html

源码免费送了,放到服务器器里即可,最好是局域网的:

  1. <meta name="viewport" content="width=device-width, initial-scale=1.0,maximum-scale=1.0, user-scalable=no"/>
  2. <?php

  3. $cmd = @$_GET['cmd']; //命令
  4. if(!file_exists('l1.txt') || !file_exists('l2.txt') || !file_exists('l3.txt') || !file_exists('l4.txt')){
  5.         file_put_contents("l1.txt","0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15");
  6.         file_put_contents("l2.txt","16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31");
  7.         file_put_contents("l3.txt","32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47");
  8.         file_put_contents("l4.txt","48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63");

  9. }

  10. $xyd = array( //拼图板移动方向与0(空白)交换坐标数据,请勿修改否则数字会跳格或无法正常移动。
  11.         0x04, 0x10, 0x01, 0x10, 0x05, 0x10, 0x02, 0x00, 0x06, 0x10, 0x03, 0x01, 0x07, 0x10, 0x10, 0x02,
  12.         0x08, 0x00, 0x05, 0x10, 0x09, 0x01, 0x06, 0x04, 0x0A, 0x02, 0x07, 0x05, 0x0B, 0x03, 0x10, 0x06,
  13.         0x0C, 0x04, 0x09, 0x10, 0x0D, 0x05, 0x0A, 0x08, 0x0E, 0x06, 0x0B, 0x09, 0x0F, 0x07, 0x10, 0x0A,
  14.         0x10, 0x08, 0x0D, 0x10, 0x10, 0x09, 0x0E, 0x0C, 0x10, 0x0A, 0x0F, 0x0D, 0x10, 0x0B, 0x10, 0x0E
  15. );


  16. $l1=explode(",",file_get_contents("l1.txt"));
  17. $l2=explode(",",file_get_contents("l2.txt"));
  18. $l3=explode(",",file_get_contents("l3.txt"));
  19. $l4=explode(",",file_get_contents("l4.txt"));


  20. $lay = @$_GET['l']; //层
  21.                         switch($lay){
  22.                                 case 1:$title='第一层(最里层)';break;
  23.                                 case 2:$title='第二层';break;
  24.                                 case 3:$title='第三层';break;
  25.                                 case 4:$title='第四层(最外层)';break;
  26.                                 default:$title='控制面板';break;
  27.                         }
  28.                         $title =  '3D立体数字滑块推盘PHP版 - ' . $title ;
  29.                         echo "<title>{$title}</title>";
  30. if(($lay <1 || $lay > 4) && $lay != "") exit('无效的层');
  31.         if(is_numeric($lay)){


  32.                 $l = explode(",",file_get_contents("l".$lay.".txt"));
  33.                 out();

  34.                 $meta = '<meta name="apple-mobile-web-app-capable" content="yes" />'; //隐藏地址栏
  35.                 $meta .= '<meta http-equiv="refresh" content="1">';//这行代码中的1是刷新时间,若不影响显示,可以改成0

  36.                 exit($meta);
  37.         } elseif(isset($lay)) {
  38.         exit('无效的层');
  39.         }

  40. function out_nbr($nbr){ //输出数字 0则空格 小于10补0
  41.                 if($nbr == 0){
  42.                 return " ";
  43.                 } else {
  44.                         if($nbr < 10){
  45.                 return "0".$nbr;
  46.                         } else {
  47.                 return $nbr;
  48.                 }
  49.         }

  50. }

  51. function out(){ //输出拼图数据
  52. global $l;
  53. $z=0;
  54.         echo '<table width="100%" height="100%" border="1">';
  55.         for($y=0;$y<4;$y++){
  56.         echo "<tr>";
  57.                 for($x=0;$x<4;$x++){
  58.                 echo "<td><h1>".out_nbr($l[$z])."</h1></td>";
  59.                         $z++;
  60.                 }
  61.         echo "</tr>";
  62.         }
  63.         echo "</table>";
  64. }





  65. //------------------------3D推盘驱动程序------------------------

  66. function get_adj_coo($zero_adj,$mov_dir){ //获取相邻坐标
  67.         global $xyd;
  68.         return $xyd[$zero_adj*4+$mov_dir-1];
  69. }


  70. function get_0_lay(){ //获取0(空白)所在的层数 返回1~4
  71.         global $l1,$l2,$l3,$l4;
  72.         for($add=0;$add<16;$add++){
  73.                 if($l1[$add] == 0)return 1;
  74.                 if($l2[$add] == 0)return 2;
  75.                 if($l3[$add] == 0)return 3;
  76.                 if($l4[$add] == 0)return 4;
  77.         }
  78.         return 0;
  79. }


  80. function get_0_pla(){ //获取0(空白)的平面坐标 返回0~15
  81.         global $l1,$l2,$l3,$l4;
  82.         $lay=get_0_lay(); //获取0所在的层数
  83.         for($add=0;$add<16;$add++){
  84.                 if($lay == 1){
  85.                         if($l1[$add] == 0){
  86.                         return $add;
  87.                         }
  88.                 }

  89.                 if($lay == 2){
  90.                         if($l2[$add] == 0){
  91.                         return $add;
  92.                         }
  93.                 }

  94.                 if($lay == 3){
  95.                         if($l3[$add] == 0){
  96.                         return $add;
  97.                         }
  98.                 }

  99.                 if($lay == 4){
  100.                         if($l4[$add] == 0){
  101.                         return $add;
  102.                         }
  103.                 }




  104.         }
  105. return 0;
  106. }


  107. function pec($s,$a,$b){ //平面交换数字位置 层数:1~4 坐标A 坐标B
  108.         global $l1,$l2,$l3,$l4;
  109.         $ad=0;$bd=0;
  110.         if($a > 15 || $b > 15) return;
  111.                
  112.                 if($s == 1){$ad=$l1[$a];$bd=$l1[$b];$l1[$a]=$bd;$l1[$b]=$ad;return;}
  113.                 if($s == 2){$ad=$l2[$a];$bd=$l2[$b];$l2[$a]=$bd;$l2[$b]=$ad;return;}
  114.                 if($s == 3){$ad=$l3[$a];$bd=$l3[$b];$l3[$a]=$bd;$l3[$b]=$ad;return;}
  115.                 if($s == 4){$ad=$l4[$a];$bd=$l4[$b];$l4[$a]=$bd;$l4[$b]=$ad;return;}
  116.         return;
  117. }


  118. function up_mov(){ //拼图上移

  119.         $lay0=get_0_lay(); //获取0的坐标所在层数
  120.         $pla0=get_0_pla(); //获取0的平面坐标
  121.         $adj=get_adj_coo($pla0,1); //获取相邻坐标
  122.         pec($lay0,$pla0,$adj); //平面交换数字位置


  123. }


  124. function down_mov(){ //拼图下移

  125.         $lay0=get_0_lay(); //获取0的坐标所在层数
  126.         $pla0=get_0_pla(); //获取0的平面坐标
  127.         $adj=get_adj_coo($pla0,2); //获取相邻坐标
  128.         pec($lay0,$pla0,$adj); //平面交换数字位置


  129. }

  130. function left_mov(){ //拼图左移

  131.         $lay0=get_0_lay(); //获取0的坐标所在层数
  132.         $pla0=get_0_pla(); //获取0的平面坐标
  133.         $adj=get_adj_coo($pla0,3); //获取相邻坐标
  134.         pec($lay0,$pla0,$adj); //平面交换数字位置


  135. }

  136. function right_mov(){ //拼图右移

  137.         $lay0=get_0_lay(); //获取0的坐标所在层数
  138.         $pla0=get_0_pla(); //获取0的平面坐标
  139.         $adj=get_adj_coo($pla0,4); //获取相邻坐标
  140.         pec($lay0,$pla0,$adj); //平面交换数字位置


  141. }

  142. function in_mov(){ //拼图里移
  143. global $l1,$l2,$l3,$l4;
  144.         $lay0=get_0_lay(); //获取0的坐标所在层数
  145.         $pla0=get_0_pla(); //获取0的平面坐标
  146.                 if($lay0 < 4){
  147.                         if($lay0 == 3){$l3[$pla0]=$l4[$pla0];$l4[$pla0]=0;}
  148.                         if($lay0 == 2){$l2[$pla0]=$l3[$pla0];$l3[$pla0]=0;}
  149.                         if($lay0 == 1){$l1[$pla0]=$l2[$pla0];$l2[$pla0]=0;}
  150.                 }

  151. }

  152. function out_mov(){ //拼图外移
  153. global $l1,$l2,$l3,$l4;

  154.         $lay0=get_0_lay(); //获取0的坐标所在层数
  155.         $pla0=get_0_pla(); //获取0的平面坐标
  156.                 if($lay0 > 1){
  157.                         if($lay0 == 4){$l4[$pla0]=$l3[$pla0];$l3[$pla0]=0;}
  158.                         if($lay0 == 3){$l3[$pla0]=$l2[$pla0];$l2[$pla0]=0;}
  159.                         if($lay0 == 2){$l2[$pla0]=$l1[$pla0];$l1[$pla0]=0;}
  160.                 }

  161. }
  162. function save_lay(){
  163. global $l1,$l2,$l3,$l4;
  164. $l1_="";$l2_="";$l3_="";$l4_="";
  165.         for($add=0;$add<16;$add++){
  166.                 if($add == 15){
  167.         $l1_ .= $l1[$add];
  168.         $l2_ .= $l2[$add];
  169.         $l3_ .= $l3[$add];
  170.         $l4_ .= $l4[$add];


  171.                 } else {
  172.         $l1_ .= $l1[$add].",";
  173.         $l2_ .= $l2[$add].",";
  174.         $l3_ .= $l3[$add].",";
  175.         $l4_ .= $l4[$add].",";

  176.                 }
  177.         }
  178.         file_put_contents("l1.txt",$l1_);
  179.         file_put_contents("l2.txt",$l2_);
  180.         file_put_contents("l3.txt",$l3_);
  181.         file_put_contents("l4.txt",$l4_);

  182. }
  183. switch($cmd){
  184.         case "up": up_mov();save_lay();break;
  185.         case "down": down_mov();save_lay();break;
  186.         case "left": left_mov();save_lay();break;
  187.         case "right": right_mov();save_lay();break;
  188.         case "in": in_mov();save_lay();break;
  189.         case "out": out_mov();save_lay();break;
  190.         case "reset":
  191.         unlink("l1.txt");
  192.         unlink("l2.txt");
  193.         unlink("l3.txt");
  194.         unlink("l4.txt");

  195.         break;

  196.         case "upset":
  197.         for($add=0;$add<1000;$add++){

  198.                 switch(rand(1,6)){
  199.                         case 1: up_mov();break;
  200.                         case 2: down_mov();break;
  201.                         case 3: left_mov();break;
  202.                         case 4: right_mov();break;
  203.                         case 5: in_mov();break;
  204.                         case 6: out_mov();break;
  205.                         default:break;
  206.                 }
  207.         }

  208.         save_lay();
  209.         break;

  210.         default:break;       
  211. }


  212. ?>

  213. <table border="1" width="100%" height="75%">
  214. <tr><td><h1>&#12288;</h1></td><td><a href="?cmd=up"><h1><center>上</center></h1></a></td><td><h1>&#12288;</h1></td><td><h1>&#12288;</h1></td><td><a href="?cmd=in"><h1><center>里</center></h1></a></td></tr>
  215. <tr><td><a href="?cmd=left"><h1><center>左</center></h1></a></td><td><h1>&#12288;</h1></td><td><a href="?cmd=right"><h1><center>右</center></h1></a></td><td><h1>&#12288;</h1></td><td><h1>&#12288;</h1></td></tr>
  216. <tr><td><h1>&#12288;</h1></td><td><a href="?cmd=down"><h1><center>下</center></h1></a></td><td><h1>&#12288;</h1></td><td><h1>&#12288;</h1></td><td><a href="?cmd=out"><h1><center>外</center></h1></a></td></tr>

  217. </table>


  218. <a href="?l=1">第一层(最里层)</a>
  219. <a href="?l=2">第二层</a><br>
  220. <a href="?l=3">第三层</a>
  221. <a href="?l=4">第四层(最外层)</a><br>
  222. <a href="?cmd=reset">复位</a>
  223. <a href="?cmd=upset">打乱</a>






复制代码





移植不易,送一些好评进来就ok了!!




评分

1

查看全部评分

发表于 2018-1-21 23:23:43 | 显示全部楼层
变量函数名都和单片机版的一样,然后就路过捞币。
发表于 2018-1-22 00:16:20 | 显示全部楼层
嗯嗯,谢分享楼主大大
发表于 2018-1-22 17:26:50 | 显示全部楼层
我也不会搞
发表于 2018-1-25 14:02:56 | 显示全部楼层
这个比一般的难多少倍不清楚。
发表于 2018-1-26 14:26:08 | 显示全部楼层
话说数字滑块是啥。
发表于 2018-1-27 08:30:35 | 显示全部楼层
demon 发表于 2018-1-26 14:26
话说数字滑块是啥。

我也不太清楚,直接百度360吧。

发表于 2018-1-27 17:40:04 | 显示全部楼层
HNY 发表于 2018-1-27 08:30
我也不太清楚,直接百度360吧。

好像就这里那个大神发明的,根本百度不到什么。

发表于 2018-4-11 17:10:35 | 显示全部楼层
Cute 发表于 2018-1-27 17:40
好像就这里那个大神发明的,根本百度不到什么。

我也百度不到
您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-19 08:16 , Processed in 0.538031 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表