Etusivulle

Sivun PHP-lähdekoodin näyttäminen

Alla on sivun satunnaisetliput_kuva.php PHP-lähdekoodi.


<?PHP

$sivusuhteet = array(3 / 2, 4 / 3, 5 / 3, 5 / 4, 7 / 4);
$sivusuhde = $sivusuhteet[rand(0, count($sivusuhteet) - 1)];

$varit = array(
	array(0,   0,   0),     // musta
	array(255, 255, 255),   // valkoinen
	array(255, 0,   0),     // punainen
	array(255, 255, 0),     // keltainen
	array(0,   255, 0),     // vihreä
	array(0,   0,   255),   // sininen
);
shuffle ($varit);

$korkeus = 100;
$leveys = round($sivusuhde * $korkeus);

$kuva = imagecreate($leveys, $korkeus);

// Harmaa tausta
$vari = imagecolorallocate($kuva, 128, 128, 128);
imagefilledrectangle ($kuva, 0, 0, $leveys - 1, $korkeus - 1, $vari);

// Luetaan värit
$kuvanvarit = array();
foreach ($varit as $vari) {
	$kuvanvarit[] = imagecolorallocate($kuva, $vari[0], $vari[1], $vari[2]);
}

// Määritellään lipun tyyppivaihtoehdot eli polygonien pisteiden X- ja Y-koordinaatit. Ne on ilmoitettu 1/12-osina eli
// väliltä 0 - 12. 1/12-osia käytetään, koska 12 on pienin luku, joka on jaollinen 3:lla ja 4:llä.
//
// Tyylisääntöjä: 2 - 5 kenttää; ei kahta samanväristä kenttää vierekkäin; ei tyylejä, jotka ovat peilikuvia
// toisistaan; ei tyyppejä, jotka eroavat toisistaan vain mittasuhteilla; jos mahdollista, kentät saman kokoisia.
//

$tyypit = array(
	// Tyypit, jotka eivät sisällä vinoja viivoja

	array(
		// Kaksi vaakaraitaa
		array(0, 0, 12, 0, 12, 6, 0, 6),
		array(0, 6, 12, 6, 12, 12, 0, 12),
	),
	array(
		// Kolme vaakaraitaa
		array(0, 0, 12, 0, 12, 4, 0, 4),
		array(0, 4, 12, 4, 12, 8, 0, 8),
		array(0, 8, 12, 8, 12, 12, 0, 12),
	),
	array(
		// Kolme vaakaraitaa, ylin ja alin samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 4, 12, 4, 12, 8, 0, 8),
	),
	array(
		// Neljä vaakaraitaa
		array(0, 0, 12, 0, 12, 3, 0, 3),
		array(0, 3, 12, 3, 12, 6, 0, 6),
		array(0, 6, 12, 6, 12, 9, 0, 9),
		array(0, 9, 12, 9, 12, 12, 0, 12),
	),
	array(
		// Neljä vaakaraitaa, eka ja neljäs samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 3, 12, 3, 12, 6, 0, 6),
		array(0, 6, 12, 6, 12, 9, 0, 9),
	),
	array(
		// Neljä vaakaraitaa, eka ja kolmas samanvärisiä
		array(0, 0, 12, 0, 12, 9, 0, 9),
		array(0, 3, 12, 3, 12, 6, 0, 6),
		array(0, 9, 12, 9, 12, 12, 0, 12),
	),

	array(
		// Kaksi pystyraitaa
		array(0, 0, 6, 0, 6, 12, 0, 12),
		array(6, 0, 12, 0, 12, 12, 6, 12),
	),
	array(
		// Kolme pystyraitaa
		array(0, 0, 4, 0, 4, 12, 0, 12),
		array(4, 0, 8, 0, 8, 12, 4, 12),
		array(8, 0, 12, 0, 12, 12, 8, 12),
	),
	array(
		// Kolme pystyraitaa, eka ja kolmas samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(4, 0, 8, 0, 8, 12, 4, 12),
	),
	array(
		// Neljä pystyraitaa
		array(0, 0, 3, 0, 3, 12, 0, 12),
		array(3, 0, 6, 0, 6, 12, 3, 12),
		array(6, 0, 9, 0, 9, 12, 6, 12),
		array(9, 0, 12, 0, 12, 12, 9, 12),
	),
	array(
		// Neljä pystyraitaa, eka ja kolmas samanvärisiä
		array(0, 0, 9, 0, 9, 12, 0, 12),
		array(3, 0, 6, 0, 6, 12, 3, 12),
		array(9, 0, 12, 0, 12, 12, 9, 12),
	),
	array(
		// Neljä pystyraitaa, eka ja neljäs samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(3, 0, 6, 0, 6, 12, 3, 12),
		array(6, 0, 9, 0, 9, 12, 6, 12),
	),

	array(
		// Pystyraita, kaksi vaakaraitaa
		array(0, 0, 4, 0, 4, 12, 0, 12),
		array(4, 0, 12, 0, 12, 6, 4, 6),
		array(4, 6, 12, 6, 12, 12, 4, 12),
	),
	array(
		// Pystyraita, kolme vaakaraitaa
		array(0, 0, 3, 0, 3, 12, 0, 12),
		array(3, 0, 12, 0, 12, 4, 3, 4),
		array(3, 4, 12, 4, 12, 8, 3, 8),
		array(3, 8, 12, 8, 12, 12, 3, 12),
	),
	array(
		// Pystyraita, kolme vaakaraitaa, ylin ja alin samanvärisiä
		array(0, 0, 3, 0, 3, 12, 0, 12),
		array(3, 0, 12, 0, 12, 12, 3, 12),
		array(3, 4, 12, 4, 12, 8, 3, 8),
	),

	array(
		// Vasemmalla ylhäällä neliömäinen kenttä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 6, 0, 6, 6, 0, 6),
	),
	array(
		// Keskellä neliömäinen kenttä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(3, 3, 9, 3, 9, 9, 3, 9),
	),
	array(
		// Neljä kenttää 2 * 2 -muodostelmassa
		array(0, 0, 6, 0, 6, 6, 0, 6),
		array(6, 0, 12, 0, 12, 6, 6, 6),
		array(0, 6, 6, 6, 6, 12, 0, 12),
		array(6, 6, 12, 6, 12, 12, 6, 12),
	),
	array(
		// Neljä kenttää 2 * 2 -muodostelmassa, vasen ylä ja oikea ala samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(6, 0, 12, 0, 12, 6, 6, 6),
		array(0, 6, 6, 6, 6, 12, 0, 12),
	),
	array(
		// Neljä kenttää 2 * 2 -muodostelmassa, vasen ylä ja oikea ala samanvärisiä, vasen ala ja oikea ylä
		// samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 6, 0, 6, 6, 12, 6, 12, 12, 6, 12, 6, 6, 0, 6),
	),

	array(
		// Risti
		array(0, 0, 5, 0, 5, 5, 0, 5),
		array(7, 0, 12, 0, 12, 5, 7, 5),
		array(0, 7, 5, 7, 5, 12, 0, 12),
		array(7, 7, 12, 7, 12, 12, 7, 12),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),
	array(
		// Risti; vasen ylä ja vasen ala samanvärisiä
		array(0, 0, 5, 0, 5, 12, 0, 12),
		array(7, 0, 12, 0, 12, 5, 7, 5),
		array(7, 7, 12, 7, 12, 12, 7, 12),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),
	array(
		// Risti; vasen ylä ja oikea ylä samanvärisiä
		array(0, 0, 12, 0, 12, 5, 0, 5),
		array(0, 7, 5, 7, 5, 12, 0, 12),
		array(7, 7, 12, 7, 12, 12, 7, 12),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),
	array(
		// Risti; vasen ylä ja oikea ala samanvärisiä
		array(0, 0, 6, 0, 6, 6, 12, 6, 12, 12, 6, 12, 6, 6, 0, 6),
		array(7, 0, 12, 0, 12, 5, 7, 5),
		array(0, 7, 5, 7, 5, 12, 0, 12),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),
	array(
		// Risti; vasen ylä ja oikea ala samanvärisiä; vasen ala ja oikea ylä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 6, 6, 6, 6, 0, 12, 0, 12, 6, 6, 6, 6, 12, 0, 12),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),
	array(
		// Risti; muut neliöt kuin vasen ylä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 5, 0, 5, 5, 0, 5),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),
	array(
		// Risti; kaikki neliöt samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(7, 0, 7, 5, 12, 5, 12, 7, 7, 7, 7, 12, 5, 12, 5, 7, 0, 7, 0, 5, 5, 5, 5, 0),
	),

	// Tyypit, jotka sisältävät vinoja viivoja

	array(
		// Kaksi kenttää, viisto raja vasemmasta alakulmasta oikeaan yläkulmaan
		array(0, 0, 12, 0, 0, 12),
		array(0, 12, 12, 0, 12, 12),
	),

	array(
		// Kolme kenttää, keskimmäinen on suunnikas vasemmasta alakulmasta oikeaan yläkulmaan
		array(0, 0, 8, 0, 0, 12),
		array(8, 0, 12, 0, 4, 12, 0, 12),
		array(4, 12, 12, 0, 12, 12),
	),
	array(
		// Kolme kenttää, keskimmäinen on suunnikas vasemmasta alakulmasta oikeaan yläkulmaan, muut
		// kaksi samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(8, 0, 12, 0, 4, 12, 0, 12),
	),

	array(
		// Neljä kenttää, keskimmäiset ovat suunnikkaita vasemmalta alhaalta oikealle ylös
		array(0, 0, 6, 0, 0, 12),
		array(0, 12, 6, 0, 9, 0, 3, 12),
		array(3, 12, 9, 0, 12, 0, 6, 12),
		array(6, 12, 12, 0, 12, 12),
	),
	array(
		// Neljä kenttää, keskimmäiset ovat suunnikkaita vasemmalta alhaalta oikealle ylös,
		// eka ja kolmas kenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 12, 6, 0, 9, 0, 3, 12),
		array(6, 12, 12, 0, 12, 12),
	),
	array(
		// Neljä kenttää, keskimmäiset ovat suunnikkaita vasemmalta alhaalta oikealle ylös,
		// eka ja neljäs kenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 12, 6, 0, 9, 0, 3, 12),
		array(3, 12, 9, 0, 12, 0, 6, 12),
	),

	array(
		// Kolmio yläreunasta alareunan keskelle
		array(0, 0, 12, 0, 6, 12),
		array(6, 12, 12, 0, 12, 12),
		array(0, 0, 6, 12, 0, 12),
	),
	array(
		// Kolmio yläreunasta alareunan keskelle, kaksi muuta kenttää samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 12, 0, 6, 12),
	),

	array(
		// Kolmio vasemmasta reunasta keskipisteeseen
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 6, 6, 0, 12),
	),
	array(
		// Kolmio vasemmasta reunasta keskipisteeseen, kaksi vaakaraitaa
		array(0, 0, 12, 0, 12, 6, 0, 6),
		array(0, 6, 12, 6, 12, 12, 0, 12),
		array(0, 0, 6, 6, 0, 12),
	),
	array(
		// Kolmio vasemmasta reunasta keskipisteeseen, kolme vaakaraitaa
		array(0, 0, 12, 0, 12, 4, 0, 4),
		array(0, 4, 12, 4, 12, 8, 0, 8),
		array(0, 8, 12, 8, 12, 12, 0, 12),
		array(0, 0, 6, 6, 0, 12),
	),
	array(
		// Kolmio vasemmasta reunasta keskipisteeseen; kolme vaakaraitaa, ylin ja alin samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 4, 12, 4, 12, 8, 0, 8),
		array(0, 0, 6, 6, 0, 12),
	),

	array(
		// Neljä kenttää, rajat viistosti kulmasta kulmaan
		array(0, 0, 12, 0, 6, 6),
		array(6, 6, 12, 0, 12, 12),
		array(0, 12, 6, 6, 12, 12),
		array(0, 0, 6, 6, 0, 12),
	),
	array(
		// Neljä kenttää, rajat viistosti kulmasta kulmaan, ylä ja ala samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(6, 6, 12, 0, 12, 12),
		array(0, 0, 6, 6, 0, 12),
	),
	array(
		// Neljä kenttää, rajat viistosti kulmasta kulmaan, vasen ja oikea samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 12, 0, 6, 6),
		array(0, 12, 6, 6, 12, 12),
	),
	array(
		// Neljä kenttää, rajat viistosti kulmasta kulmaan, ylä ja ala samanvärisiä, vasen ja oikea samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 12, 0, 6, 6, 12, 12, 0, 12, 6, 6),
	),

	array(
		// V:n muotoinen kuvio
		array(0, 1, 6, 12, 0, 12),
		array(1, 0, 11, 0, 6, 9),
		array(6, 12, 12, 1, 12, 12),
		array(0, 0, 1, 0, 6, 9, 11, 0, 12, 0, 12, 1, 6, 12, 0, 1),
	),
	array(
		// V:n muotoinen kuvio; vasen ja oikea kolmiokenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(1, 0, 11, 0, 6, 9),
		array(0, 0, 1, 0, 6, 9, 11, 0, 12, 0, 12, 1, 6, 12, 0, 1),
	),
	array(
		// V:n muotoinen kuvio; kaikki kolmiokentät samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 1, 0, 6, 9, 11, 0, 12, 0, 12, 1, 6, 12, 0, 1),
	),

	array(
		// Viisto risti
		array(1, 0, 11, 0, 6, 5),
		array(7, 6, 12, 1, 12, 11),
		array(1, 12, 6, 7, 11, 12),
		array(0, 1, 5, 6, 0, 11),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti, vasen ja yläkenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(7, 6, 12, 1, 12, 11),
		array(1, 12, 6, 7, 11, 12),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti, vasen ja oikea kenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(1, 0, 11, 0, 6, 5),
		array(1, 12, 6, 7, 11, 12),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti, ylä- ja alakenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(7, 6, 12, 1, 12, 11),
		array(0, 1, 5, 6, 0, 11),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti; vasen ja oikea kenttä samanvärisiä; ylä- ja alakenttä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 12, 0, 6, 6, 12, 12, 0, 12, 6, 6),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti, muut kolmiokentät kuin vasen samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 1, 5, 6, 0, 11),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti, muut kolmiokentät kuin ylä samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(1, 0, 11, 0, 6, 5),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),
	array(
		// Viisto risti, kaikki kolmiokentät samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 0, 1, 0, 6, 5, 11, 0, 12, 0, 12, 1, 7, 6, 12, 11, 12, 12, 11, 12, 6, 7, 1, 12, 0, 12, 0, 11, 
		5, 6, 0, 1),
	),

	array(
		// Vino nelikulmio
		array(0, 0, 6, 0, 0, 6),
		array(6, 0, 12, 0, 12, 6),
		array(0, 6, 6, 12, 0, 12),
		array(6, 12, 12, 6, 12, 12),
		array(6, 0, 12, 6, 6, 12, 0, 6),
	),
	array(
		// Vino nelikulmio; vasen ylä- ja vasen ala -kolmio samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(6, 0, 12, 0, 12, 6),
		array(6, 12, 12, 6, 12, 12),
		array(6, 0, 12, 6, 6, 12, 0, 6),
	),
	array(
		// Vino nelikulmio; vasen ylä- ja oikea ylä -kolmio samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 6, 6, 12, 0, 12),
		array(6, 12, 12, 6, 12, 12),
		array(6, 0, 12, 6, 6, 12, 0, 6),
	),
	array(
		// Vino nelikulmio; vasen ylä- ja oikea ala -kolmio samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(6, 0, 12, 0, 12, 6),
		array(0, 6, 6, 12, 0, 12),
		array(6, 0, 12, 6, 6, 12, 0, 6),
	),
	array(
		// Vino nelikulmio; vasen ylä- ja oikea ala -kolmio samanvärisiä; vasen ala- ja oikea ylä -kolmio
		// samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(0, 6, 6, 6, 6, 0, 12, 0, 12, 6, 6, 6, 6, 12, 0, 12),
		array(6, 0, 12, 6, 6, 12, 0, 6),
	),
	array(
		// Vino nelikulmio; kaikki kolmiokentät samanvärisiä
		array(0, 0, 12, 0, 12, 12, 0, 12),
		array(6, 0, 12, 6, 6, 12, 0, 6),
	),
);

$polygonit = $tyypit[rand(0, count($tyypit) - 1)];

// Peilataanko lippu vaaka- tai pystysuunnassa
$peilataankovaaka = false;
$peilataankopysty = false;
if (rand(0, 1) == 1) $peilataankovaaka = true;
if (rand(0, 1) == 1) $peilataankopysty = true;

// Piirretään polygonit
foreach ($polygonit as $avain => $polygoni) {
	$polygoni = MuunnaKoordinaatisto($polygoni, $leveys, $korkeus, $peilataankovaaka, $peilataankopysty);
	imagefilledpolygon ($kuva, $polygoni, count($polygoni) / 2, $kuvanvarit[$avain]);
}

header ("Content-type: image/png");
imagepng ($kuva);
imagedestroy ($kuva);



function MuunnaKoordinaatisto($sisaan, $leveys, $korkeus, $peilataankovaaka, $peilataankopysty) {
	// Muuntaa polygonin koordinaatiston.
	// Sisään: taulukko, jossa koordinaatit kuvan leveyden ja korkeuden 1/12-osina; kuvan leveys ja korkeus;
	// peilataanko kuva vaaka- ja pystysuunnassa.
	// Ulos: taulukko, jossa koordinaatit pikseleinä.

	$ulos = array();

	foreach ($sisaan as $avain => $koordinaatti) {
		$temp = $koordinaatti;

		if ($avain % 2 == 0) {
			// Vaakakoordinaatti
			if ($peilataankovaaka) $temp = 12 - $temp;
			$temp = round($temp / 12 * ($leveys  - 1));
		} else {
			// Pystykoordinaatti
			if ($peilataankopysty) $temp = 12 - $temp;
			$temp = round($temp / 12 * ($korkeus - 1));
		}

		$ulos[] = $temp;
	}

	return $ulos;
}

?>


Takaisin sivulle satunnaisetliput_kuva.php

Etusivulle