Ein Algorithmusbeispiel: PHP implementiert Happy Xiaoxiaole
Dieser Artikel stellt hauptsächlich vor, wie PHP den fröhlichen Xiaoxiaole-Algorithmus implementiert, den wir alle kennen.
Empfohlen: „PHP-Video-Tutorial“
1. Anforderungsbeschreibung:
1. Farbblöcke mit 5 Farben erscheinen zufällig in einem 8*8-Matrixquadrat.
2. Wenn drei oder mehr Farbblöcke horizontal oder vertikal verbunden sind, entfernen Sie diese Farbblöcke.
3. Nachdem die Farbblöcke entfernt wurden, bewegen sich die oberen Farbblöcke nach unten und Farbblöcke mit zufälligen Farben fallen herunter, um die Lücken in der Matrix zu füllen.
4. Wiederholen Sie die Schritte 2 und 3.
5. Das Eliminieren von 3 Blöcken derselben Farbe fügt 10 Punkte hinzu, 4 fügt 15 Punkte hinzu, 5 fügt 20 Punkte hinzu, 6 fügt 30 Punkte hinzu, 7 fügt 40 Punkte hinzu, 8 fügt 70 Punkte hinzu, 9 fügt 100 Punkte hinzu, 10 Jeder fügt 150 Punkte hinzu , und jeder weitere bringt 50 Punkte mehr als der vorherige.
Zweitens der obige 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; }
Die laufenden Ergebnisse lauten wie folgt:
12345 repräsentiert jeweils 5 Farben.
=================================开始第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
Das obige ist der detaillierte Inhalt vonEin Algorithmusbeispiel: PHP implementiert Happy Xiaoxiaole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.
