ホームページ >バックエンド開発 >PHPチュートリアル >PHPはランダムな色を生成し、隣接する要素は異なる色になります
php Random php Random
タイトル通り、このレイアウト形式です いわゆる隣接する要素は色が異なります。そうであれば、6 色だけでは達成できません。 -説明してください... そうでない場合は、ここで「隣接する要素」の概念を定義できます
ルールをより明確にします
いわゆる隣接する要素は異なる色を持っています。そうである場合、4 と 5 は隣接していますか? 、 6 色だけは実現できません。 ニーズをもう一度説明してください...そうでない場合は、ここで「隣接する要素」の概念を定義してください
さて、4 と 5 は隣接しています。 。 6種類に満たない場合は追加も可能です。
1 2 3
2 3 6
これは要件を満たしていますか?
いわゆる隣接する要素は異なる色を持っていますか? 隣接している場合、達成できない色は 6 つだけです...そうでない場合は、それでは、ここで「隣接する要素」の概念を定義してください
さて、4と5は隣接しています。 。 6種類に満たない場合はさらに追加することも可能です。
制限された色の使用の制限と制限されていない色の種類は、別の方法で実装する必要があります (できる)。前者は色の数が限られており、後者は直接ランダムに選択し、機能しない場合はランダムに判断できます。再度選択しました
1 2 1
1 2 1
4 色マップ?
アルゴリズムが苦手です
私のアイデアは、左から右、上から下に移動し、数字(1〜n)を埋めて、前の隣り(水平、垂直、斜め)までスキップすることですグリッドが表示されますが、表示されない場合はスキップされます。この番号を選択します
たとえば、右上隅では、2 行目に到達する前に、それに隣接する左側にはグリッド 2 しかないため、 1~n、1 は直接一致します。右上隅に記入してください
1 2 3
2 3 6
これは要件を満たしていますか?
これは一貫していますが、このスタイルは滝の流れを通して読み込まれます。高さが決まっていないので、非常にわかりにくいです。真ん中の 2 5 3 がすべて 1 に近い可能性があります。
1 2 3
2 3 6
これは要件を満たしていますか?
このページは石積みと無限スクロールを使用しており、各行に 3 つのブロックがあり、幅は固定、高さは可変です。次に、隣接する背景色が異なることを認識する必要がありますが、それを実現する方法がわかりません。
#5 も要件を満たしている場合は、奇数の直線は 1 2 1、偶数の直線は 3 4 3 であると言えます...循環するだけです
$d = array(1,2,3,4,5,6);$a = array($d[rand(0, 5)]);$loop = 300; //用于防止死循环while(count($a) < 210 && $loop--) { $p = count($a); $n = $d[0]; $d[] = array_shift($d); switch($p % 3) { case 1: if($a[$p-1] == $n) continue; if(isset($a[$p-3]) && $a[$p-3] == $n) continue; $a[] = $n; break; case 2: if($a[$p-1] == $n) continue; if(isset($a[$p-2]) && $a[$p-2] == $n) continue; if(isset($a[$p-3]) && $a[$p-3] == $n) continue; if(isset($a[$p-6]) && $a[$p-6] == $n) continue; if(isset($a[$p-8]) && $a[$p-8] == $n) continue; $a[] = $n; break; case 0: if(isset($a[$p-3]) && $a[$p-3] == $n) continue; if(isset($a[$p-4]) && $a[$p-4] == $n) continue; if(isset($a[$p-6]) && $a[$p-6] == $n) continue; $a[] = $n; break; }// $a[] = $n; //如果从case中移到这里,将导致错误结果!BUG}$t = array_map(function($r){ return join(',', $r);}, array_chunk($a, 3));print_r($t);Array