国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

用PHP實現開心消消樂算法

tain335 / 2680人閱讀

摘要:一需求描述在一個的矩陣方格中隨機出現種顏色的色塊。當有三個或以上色塊在橫向或縱向上相連,則消除這些色塊。開始第步本次消除獲得積分數量開始第步本次消除獲得積分數量開始第步消除完畢共獲得積分數量

一、需求描述:
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分。

二、上代碼

 "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}
";
    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 .= "
";
    }
    echo "
".$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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/30618.html

相關文章

  • 【Pygame實戰】開心——消消,你,我,大家~

    摘要:正文開心消消樂分為二部分首先是開心然后是消消樂游戲嘛嘿嘿一開心小故事三則近視聰明的學生殺手二消消樂游戲素材圖片開心消消樂語音提示環境安裝本文是由寫的小游戲。 導語 你今天消消樂了嗎? ? 哈嘍哈嘍~木木子之前不是寫過一篇百變消消樂嘛? 可能你們不記得了,沒關系——今天重溫一下,來一篇開心?...

    changfeng1050 評論0 收藏0
  • Python生成歌詞詞云

    摘要:上面是生成詞云的方法封裝,還有一些其他方法根據詞頻生成詞云根據文本生成詞云根據詞頻生成詞云根據文本生成詞云將長文本分詞并去除屏蔽詞此處指英語,中文分詞還是需要自己用別的庫先行實現,使用上面的對現有輸出重新著色。 對于數據展示這一塊有時候會用到詞云,python中提供的wordcloud模塊可以很靈活的完成生成詞云除了使用python提供的wordcloud模塊以為還有在線的生成方式ht...

    junbaor 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<