


Sharing the process of implementing the happy Xiaoxiaole algorithm in PHP
Happy Xiaoxiaole should be familiar to everyone. The following article mainly introduces you to the relevant information on how to use PHP to implement the Happy Xiaoxiaole algorithm. The requirements and sample codes are introduced in great detail. , it has certain reference learning value for everyone’s study or work. Friends who need it can follow the editor to learn together.
Preface
This article mainly introduces how PHP implements the happy Xiaoxiaole algorithm that we all know, and shares it for your reference. Learning, I won’t say much more below, let’s take a look at the detailed introduction.
1. Requirement description:
1. Randomly appear 5 colors in an 8*8 matrix square Color blocks.
2. When three or more color blocks are connected horizontally or vertically, eliminate these color blocks.
3. After the color blocks are eliminated, the upper color blocks move downward, and random colored color blocks fall down to fill the matrix vacancies.
4. Repeat steps 2 and 3.
5. Eliminating 3 blocks of the same color adds 10 points, 4 adds 15 points, 5 adds 20 points, 6 adds 30 points, 7 adds 40 points, and 8 adds 70 points , 9 points will add 100 points, 10 points will add 150 points, and each additional one will add 50 points more than the previous one.
2. The above code
<?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; }
The running results are as follows:
12345 represents 5 colors respectively.
=================================开始第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
Summary
The above is the detailed content of Sharing the process of implementing the happy Xiaoxiaole algorithm in PHP. For more information, please follow other related articles on the PHP Chinese website!

To protect the application from session-related XSS attacks, the following measures are required: 1. Set the HttpOnly and Secure flags to protect the session cookies. 2. Export codes for all user inputs. 3. Implement content security policy (CSP) to limit script sources. Through these policies, session-related XSS attacks can be effectively protected and user data can be ensured.

Methods to optimize PHP session performance include: 1. Delay session start, 2. Use database to store sessions, 3. Compress session data, 4. Manage session life cycle, and 5. Implement session sharing. These strategies can significantly improve the efficiency of applications in high concurrency environments.

Thesession.gc_maxlifetimesettinginPHPdeterminesthelifespanofsessiondata,setinseconds.1)It'sconfiguredinphp.iniorviaini_set().2)Abalanceisneededtoavoidperformanceissuesandunexpectedlogouts.3)PHP'sgarbagecollectionisprobabilistic,influencedbygc_probabi

In PHP, you can use the session_name() function to configure the session name. The specific steps are as follows: 1. Use the session_name() function to set the session name, such as session_name("my_session"). 2. After setting the session name, call session_start() to start the session. Configuring session names can avoid session data conflicts between multiple applications and enhance security, but pay attention to the uniqueness, security, length and setting timing of session names.

The session ID should be regenerated regularly at login, before sensitive operations, and every 30 minutes. 1. Regenerate the session ID when logging in to prevent session fixed attacks. 2. Regenerate before sensitive operations to improve safety. 3. Regular regeneration reduces long-term utilization risks, but the user experience needs to be weighed.

Setting session cookie parameters in PHP can be achieved through the session_set_cookie_params() function. 1) Use this function to set parameters, such as expiration time, path, domain name, security flag, etc.; 2) Call session_start() to make the parameters take effect; 3) Dynamically adjust parameters according to needs, such as user login status; 4) Pay attention to setting secure and httponly flags to improve security.

The main purpose of using sessions in PHP is to maintain the status of the user between different pages. 1) The session is started through the session_start() function, creating a unique session ID and storing it in the user cookie. 2) Session data is saved on the server, allowing data to be passed between different requests, such as login status and shopping cart content.

How to share a session between subdomains? Implemented by setting session cookies for common domain names. 1. Set the domain of the session cookie to .example.com on the server side. 2. Choose the appropriate session storage method, such as memory, database or distributed cache. 3. Pass the session ID through cookies, and the server retrieves and updates the session data based on the ID.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

Atom editor mac version download
The most popular open source editor

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.