亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

利用PHP實現開心消消樂的算法示例

2024-05-05 00:00:28
字體:
來源:轉載
供稿:網友

前言

本文主要介紹了關于PHP如何實現我們大家都知道的開心消消樂的算法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。

一、需求描述:

      1、在一個8*8的矩陣方格中隨機出現5種顏色的色塊。

      2、當有三個或以上色塊在橫向或縱向上相連,則消除這些色塊。

      3、色塊消除后,上方色塊往下平移,并掉下顏色隨機的色塊填充矩陣空缺。

      4、重復2、3步驟。

      5、消除3個相同色塊加10分,4個加15分,5個加20分,6個加30分,7個加40分,8個加70分,9個加100分,10個加150分,再往后每增加一個就比上一個多加50分。

二、上代碼

<?php//所有圖形初始化數據,key代表位置,value代表顏色$xxl = array( array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''), array('', '', '', '', '', '', '', ''),);$point = play($xxl, $point);//開始游戲echo "/n共獲得積分數量:{$point}";/*開始消除 *$xxl  array 所有圖形集合 *$point int  獲得積分數量*/$bu = 0;function play($xxl, $point){ global $bu; $bu ++; echo '=================================開始第'.$bu.'步=================================='; $color = array(1 => 'red',2 => 'green',3 => 'yellow',4 => 'blue',5 => 'black');//代表5種顏色 $samCol = array();//列上相連色塊集合 $nowCol = array();//列上相連色塊指針 $samArr = array();//相連色塊總集合 $group = 1;//組指針 //隨機填充顏色,并獲得行上相連色塊start foreach($xxl as $k1 => $v1){  $sam = array();//行上相連色塊集合  $now = 1;//行上相連色塊指針  foreach($v1 as $k2 => $v2){   if(empty($v2) || $v2 == ' '){    $v2 = $xxl[$k1][$k2] = array_rand($color);//隨機填充顏色   }   if(!isset($nowCol[$k2])){    $nowCol[$k2] = 1;   }   if($k1 === 0){    $samCol[$k2][$nowCol[$k2]][$k1 .'-'. $k2] = array($k1, $k2, $v2, $k1 .'-'. $k2 .'-'. $v2);   }else{    if($v2 != $xxl[$k1-1][$k2]){//同一列上和前一個顏色不一樣     $nowCol[$k2] ++;    }    $samCol[$k2][$nowCol[$k2]][$k1 .'-'. $k2] = array($k1, $k2, $v2, $k1 .'-'. $k2 .'-'. $v2);   }   if($k2 === 0){    $sam[$now][$k1 .'-'. $k2] = array($k1, $k2, $v2, $k1 .'-'. $k2 .'-'. $v2);   }else{    if($v2 != $xxl[$k1][$k2-1]){//同一行上和前一個顏色不一樣     $now++;    }    $sam[$now][$k1 .'-'. $k2] = array($k1, $k2, $v2, $k1 .'-'. $k2 .'-'. $v2);   }  }  //獲得行上相連色塊start  foreach($sam as $x => $y){   if(count($y) > 2){    $key = 'R-'.$group;    foreach($y as $x2 => $y2){     $y[$x2]['group']['r'] = $key;    }    $samArr += $y;    $group ++;   }  }  //獲得行上相連色塊end } //隨機填充顏色,并獲得行上相連色塊end //獲得列上相連色塊start $group = 1; foreach($samCol as $k => $v){  foreach($v as $x => $y){   if(count($y) > 2){    $key = 'L-'.$group;    foreach($y as $x2 => $y2){     $y[$x2]['group']['l'] = $key;     if(isset($samArr[$x2]['group']['r'])){//判斷本點是否已出現在橫向組里      $samArr[$x2]['group']['l'] = $key;     }    }    $samArr += $y;    $group ++;   }  } } //獲得列上相連色塊end //查找相連色塊start $res = array();//相連色塊集合 $hasRes = array(); foreach($samArr as $k => $v){  if(isset($hasRes[$k])){   continue;  }  $arr = array();  seek($samArr, $v, $arr);  $res[] = array_keys($arr);  $hasRes += $arr; } //查找相連色塊end show($xxl);//打印消除前的圖形 if(empty($res)){//如果沒有相連色塊則退出遞歸  echo '=================================消除完畢!==================================';  return $point; } $thisPoint = countPoint($res);//計算本次消除獲得積分 $point += $thisPoint;//累計到總積分 //消除相連色塊start $next = $xxl; foreach($res as $k => $v){  foreach($v as $k2 => $v2){   $y = $samArr[$v2][0];   $x = $samArr[$v2][1];   $xxl[$y][$x] = '*';   unset($next[$y][$x]);  } } //消除相連色塊end show($xxl);//打印消除時的圖形 $next = step($next); show($next);//打印消除后的圖形 echo "本次消除獲得積分數量:{$thisPoint}/n"; return play($next, $point);}/*計算獲得積分數量 *$xxl  array 相連色塊集合 */function countPoint($xxl){ //初始化積分配置start $config = array(3 => 10, 4 => 15, 5 => 20, 6 => 30, 7 => 40, 8 => 70, 9 => 100); for($i = 10; $i <= 64; $i++){  $config[$i] = 100 + ($i - 9) * 50; } //初始化積分配置end $point = 0; foreach($xxl as $v){  $key = count($v);  $point += $config[$key]; } return $point;}/*消掉并左移 *$xxl  array 所有圖形集合 */function step($xxl){ foreach($xxl as $k => $v){  $temp = array_merge($v);  $count = count($temp);  if($count == 8){   continue;  }  for($i = $count; $i <= 7; $i++){   $temp[$i] = ' ';  }  $xxl[$k] = $temp; } return $xxl;}/*找相鄰點 *$xxl  array 相連圖形集合 *$one   array 某一個點 *$arr   array 圖形集合里的相鄰的點*/function seek($xxl, $one, &$arr){// global $i; $near = array(); $near['up'] = ($one[0] - 1).'-'.$one[1];//上面的點 $near['down'] = ($one[0] + 1).'-'.$one[1];//下面的點 $near['left'] = $one[0].'-'.($one[1] - 1);//左面的點 $near['right'] = $one[0].'-'.($one[1] + 1);//右面的點 foreach($near as $v){  if(isset($xxl[$v]) && $xxl[$v][2] == $one[2]){//找到相鄰點   $xj = array_intersect($one['group'], $xxl[$v]['group']);   if(empty($xj)){//如果相鄰的點不是本組的就跳過    continue;   }   if(isset($arr[$v])){//如果該點已被遍歷過則跳過    continue;   }   $arr[$v] = $xxl[$v];   seek($xxl, $xxl[$v], $arr);//繼續找相鄰的點  } }}/*打印圖形 *$xxl  array 所有圖形集合 */function show($xxl){ //順時針旋轉矩陣start $arr = array(); foreach($xxl as $k => $v){  foreach($v as $k2 => $v2){   $arr[7-$k2][$k] = $v2;  } } ksort($arr); //順時針旋轉矩陣end $str = ''; foreach($arr as $v){  foreach($v as $v2){   $str .= ' '.$v2;  }  $str .= "/n"; } echo "/n".$str;}

運行結果如下:

12345分別代表5種顏色。

=================================開始第1步================================== 3 3 2 2 1 1 1 4 4 3 4 3 4 1 1 3 3 1 4 1 1 4 1 2 2 3 4 3 1 2 4 4 4 2 4 2 2 2 1 4 3 3 2 1 2 3 1 1 5 2 1 3 2 1 4 5 3 4 5 1 3 2 3 3 3 3 2 2 * * * 4 4 3 * 3 4 1 * 3 3 1 * 1 1 4 * 2 2 3 * 3 1 2 4 4 4 2 * * * * 1 4 3 3 2 1 * 3 1 1 5 2 1 3 * 1 4 5 3 4 5 1 3 2 3 3 3 3   4 4 3 2  3 3 1 3 1 2 2 3 1 4 4 4 4 2 2 3 4 2 1 4 3 3 2 1 1 3 1 1 5 2 1 3 1 1 4 5 3 4 5 1 3 2 3 3本次消除獲得積分數量:55=================================開始第2步================================== 3 3 2 2 3 3 2 4 4 3 3 2 1 3 3 3 3 1 3 3 4 1 4 2 2 3 5 1 2 4 4 4 4 2 2 3 4 2 1 4 3 3 2 1 1 3 1 1 5 2 1 3 1 1 4 5 3 4 5 1 3 2 3 3 3 3 2 2 3 3 2 4 4 3 3 2 1 * * * 3 1 3 3 4 1 4 2 2 3 5 1 2 * * * 4 2 2 3 4 2 1 4 3 3 2 1 1 3 1 1 5 2 1 3 1 1 4 5 3 4 5 1 3 2 3 3 3 3 2 2 3   4 3 3 2 1   3 1 3 3 4 3 2 4 2 3 5 1 2 1 4 2 4 2 2 3 4 2 1 4 3 3 2 1 1 3 1 1 5 2 1 3 1 1 4 5 3 4 5 1 3 2 3 3本次消除獲得積分數量:20=================================開始第3步================================== 3 3 2 2 3 4 1 3 4 3 3 2 1 4 2 5 3 1 3 3 4 3 2 4 2 3 5 1 2 1 4 2 4 2 2 3 4 2 1 4 3 3 2 1 1 3 1 1 5 2 1 3 1 1 4 5 3 4 5 1 3 2 3 3=================================消除完畢!==================================共獲得積分數量:75

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
伊人伊成久久人综合网小说| 日韩中文字幕第一页| 欧美中文在线字幕| 91啪国产在线| 亚洲va电影大全| 日韩极品精品视频免费观看| 日韩中文有码在线视频| 国产精品久久久久久久久免费看| 狠狠操狠狠色综合网| 亚洲人成绝费网站色www| 中文字幕在线看视频国产欧美| 国产999精品久久久影片官网| 国产精品久久av| 久久好看免费视频| 久久九九免费视频| 日韩在线观看免费高清| 日韩av成人在线观看| 亚洲电影免费观看| 青草青草久热精品视频在线网站| 久久久精品久久| 欧美美最猛性xxxxxx| 色综合久久天天综线观看| 在线日韩日本国产亚洲| 国产精品久久久久一区二区| 国产亚洲精品久久久久久| 国产一区二区三区欧美| 亚洲美女视频网站| 欧美一级电影免费在线观看| 日本久久91av| 欧美在线一区二区视频| 亚洲精品成人久久电影| 成人福利视频在线观看| 欧美高清在线播放| 欧美性视频在线| 国产精品av电影| 精品自在线视频| 欧美激情奇米色| 性金发美女69hd大尺寸| 一区二区国产精品视频| 国产精品99蜜臀久久不卡二区| 亚洲第一网中文字幕| 日韩中文字幕第一页| 日韩免费av片在线观看| 一区二区三区天堂av| 亚洲区bt下载| www.亚洲免费视频| 久久亚洲精品视频| 夜夜躁日日躁狠狠久久88av| 欧美极品少妇xxxxⅹ裸体艺术| 欧美中文在线视频| 日韩精品高清在线观看| 成人亚洲欧美一区二区三区| 欧美精品久久久久久久久| 亚洲天堂av图片| 中文字幕在线看视频国产欧美在线看完整| 国产一区欧美二区三区| 欧美中文字幕在线视频| 性欧美激情精品| 视频在线观看99| 2020国产精品视频| 热re91久久精品国99热蜜臀| 欧美乱大交xxxxx另类电影| 国产精品高潮呻吟久久av野狼| 日韩av电影免费观看高清| 欧美性猛交xxxx黑人猛交| 成人免费淫片aa视频免费| 夜夜嗨av色一区二区不卡| 九九久久精品一区| 国产日韩欧美自拍| 久久久久久亚洲精品中文字幕| 中文字幕日韩电影| 国产一区二区三区在线观看网站| 欧美一级成年大片在线观看| 国产精品丝袜视频| 久久久日本电影| 福利视频导航一区| 8x拔播拔播x8国产精品| 欧美视频一区二区三区…| 在线免费观看羞羞视频一区二区| 精品视频一区在线视频| 欧美亚洲国产日本| 尤物tv国产一区| 精品国产91久久久久久老师| 欧美理论电影在线观看| 亚洲欧洲偷拍精品| 欧美激情精品久久久久| 欧美理论电影在线观看| 国产成人精品视频在线| www.日韩视频| 人人做人人澡人人爽欧美| 亚洲影视中文字幕| 国产一区二区在线播放| 久久99精品久久久久久青青91| 2019国产精品自在线拍国产不卡| 日韩一区二区三区在线播放| 久久久精品在线| 欧美在线激情视频| 欧美精品精品精品精品免费| 亚洲直播在线一区| 亚洲视频综合网| 国产精品久久婷婷六月丁香| 97色伦亚洲国产| 欧美激情乱人伦一区| 久久激情视频免费观看| 97色在线视频观看| 亚洲国产成人一区| 欧美激情视频在线免费观看 欧美视频免费一| 国产日韩在线精品av| 亚洲国产精品高清久久久| 久久视频在线观看免费| 国产精品www网站| 亚洲欧美另类中文字幕| 精品无码久久久久久国产| 国产精品国语对白| 91免费欧美精品| 亚洲日韩欧美视频一区| 日韩中文字幕在线精品| 亚洲精选一区二区| 欧美性猛交xxxx黑人猛交| 97久久精品在线| 亚洲欧美精品中文字幕在线| 亚洲国产91色在线| 国产精品美腿一区在线看| 国产成人短视频| 伊人精品在线观看| 国产亚洲精品91在线| 久久躁狠狠躁夜夜爽| 日韩精品视频在线播放| 久久九九热免费视频| 日韩欧美在线视频日韩欧美在线视频| 国产精品久久久久福利| 伊人久久精品视频| 国产精品香蕉av| 亚洲xxx自由成熟| 国产精品久久久久久久久久久不卡| 欧美自拍大量在线观看| 欧美小视频在线观看| 亚洲国产成人精品一区二区| 亚洲人成电影在线观看天堂色| 免费不卡欧美自拍视频| 欧美性生交大片免网| 中文综合在线观看| 成人免费xxxxx在线观看| 26uuu亚洲国产精品| 国产精品成人观看视频国产奇米| 国产精品扒开腿做| 亚洲成在人线av| 性欧美xxxx视频在线观看| 九九综合九九综合| 亚洲激情第一页| 久久福利视频网| 国产精品视频在线播放| 日韩欧美在线视频日韩欧美在线视频| 亚洲欧美精品中文字幕在线| 久久91亚洲人成电影网站| 久久久久久久久国产| 亚洲国产精品女人久久久| 精品国产一区二区三区久久久狼| 亚洲xxx自由成熟| 成人免费观看a| 草民午夜欧美限制a级福利片| 91香蕉国产在线观看| 日韩精品小视频| 另类少妇人与禽zozz0性伦|