ホームページ >バックエンド開発 >PHPチュートリアル >PHPはランダムな色を生成し、隣接する要素は異なる色になります

PHPはランダムな色を生成し、隣接する要素は異なる色になります

WBOY
WBOYオリジナル
2016-06-23 14:21:001034ブラウズ

php Random php Random

タイトル通り、このレイアウト形式です
1 2 3
4 5 6
7 8 9
隣り合う要素の色が異なり、また、例えば5の場合は色を変える必要があります1 3 7 9 と同じになります。実装方法を教えてください。ランダムな色を生成することは可能ですが、異なる色を実装する方法を教えてください。色は6色くらいから選べます。ありがとうございます
ディスカッション(解決策)への返信

ルールをもっと明確にしてください

いわゆる隣接する要素は色が異なります。そうであれば、6 色だけでは達成できません。 -説明してください... そうでない場合は、ここで「隣接する要素」の概念を定義できます

ルールをより明確にします

いわゆる隣接する要素は異なる色を持っています。そうである場合、4 と 5 は隣接していますか? 、 6 色だけは実現できません。 ニーズをもう一度説明してください...そうでない場合は、ここで「隣接する要素」の概念を定義してください
さて、4 と 5 は隣接しています。 。 6種類に満たない場合は追加も可能です。

1 2 3

4 5 1

2 3 6

これは要件を満たしていますか?

ルールをもっと明確にしてください


いわゆる隣接する要素は異なる色を持っていますか? 隣接している場合、達成できない色は 6 つだけです...そうでない場合は、それでは、ここで「隣接する要素」の概念を定義してください
さて、4と5は隣接しています。 。 6種類に満たない場合はさらに追加することも可能です。

制限された色の使用の制限と制限されていない色の種類は、別の方法で実装する必要があります (できる)。前者は色の数が限られており、後者は直接ランダムに選択し、機能しない場合はランダムに判断できます。再度選択しました

1 2 1

3 4 3

1 2 1

4 色マップ?
アルゴリズムが苦手です

私のアイデアは、左から右、上から下に移動し、数字(1〜n)を埋めて、前の隣り(水平、垂直、斜め)までスキップすることですグリッドが表示されますが、表示されない場合はスキップされます。この番号を選択します
たとえば、右上隅では、2 行目に到達する前に、それに隣接する左側にはグリッド 2 しかないため、 1~n、1 は直接一致します。右上隅に記入してください


1 2 3

4 5 1

2 3 6

これは要件を満たしていますか?
これは一貫していますが、このスタイルは滝の流れを通して読み込まれます。高さが決まっていないので、非常にわかりにくいです。真ん中の 2 5 3 がすべて 1 に近い可能性があります。

1 2 3

4 5 1

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
(
[0] => 1,2,3
[1] => 4,5,6
[2] => 2,3,4
[3] => 5,6 ,1 [4] => 3,4,5
[5] => 4,5,6
[7] =>
[8] => 5,6,1
[9] =>
[10] => 3,4,5
12] => 1,2,3
[13] => 2,3,4
[16] => 3,4,5
[17] => 6,1,2
[18] => 4,5,6
[20] => ; 5,6,1
[21] => 2,3,4
=> 6,1,2
[24] => 1 ,2,3 [25] => 4,5,6
[26] =>4
[27] => 3,4 ,5 [29] => 6,1,2
[30] => 1,2,3
[32] =>
[33] => 2,3,4
[34] => 3,4,5
[36] => 37] => 4,5,6
[38] => 2,3,4
=> 5,6,1
[41] => 6,1,2
[42] => 4,5,6
[43] => 1,2,3
[44] => 5,6,1
[45] => 2,3,4
[46] => 6,1,2
[47] => 3,4,5
[48] => 1,2,3
[49] => 4,5,6
[50] => 2,3,4
[51] => 5,6,1
[52] => 3,4,5
[53] => 6,1,2
[54] => 4,5,6
[55] => 1,2,3
[56] => 5,6,1
[57] => 2,3,4
[58] => 6,1,2
[59] => 3,4,5
[60] => 1,2,3
[61] => 4,5,6
[62] => 2,3,4
[63] => 5,6,1
[64] => 3,4,5
[65] => 6,1,2
[66] => 4,5,6
[67] => 1,2,3
[68] => 5,6,1
[69] => 2,3,4
)
あらゆる连续三行都将满足你的需要

几天を弄り、终现一 php 的 バグ
如果本質的语法结构市出现问题の话,php 到了该进坟墓の時候了!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。