<?php

/********************************************************\
*                                                        *
*                   © Herjan Treurniet                   *
*                  herjan@treurniet.com                  *
*  Mag vrij gebruikt worden mits dit blokje blijf staan  *
*          en je je aan de GNU/GPL-regels houdt          *
*                                                        *
\********************************************************/

/********************************************************\
*                                                        *
*                         Config                         *
*                                                        *
\********************************************************/

$margin = 15; // Hoe groot moeten de figuurtjes zijn?
$rows = 2; // Hoeveel rijen wil je onder elkaar?
$space = 6; // Hoeveel ruimte wil je tussen de figuurtjes?
$blocks = 6; // Hoeveel figuurtjes wil je per rij?

//Alle waarden zijn in pixels!!

/********************************************************\
*                                                        *
*                      Einde config                      *
*                                                        *
\********************************************************/

if(isset($_GET['image'])) //Kijk of het plaatje gemaakt moet worden
	{
		
		header("Content-type: image/gif"); //Vertel de browser dat het een plaatje is
		session_start(); //Start de sessie
		
		$space = floor($space/2); //Bereken de ruimte tussen de blokjes
		$width = $blocks * ($margin+(2*$space)); //Bereken de totale breedte van het plaatje
		$height = $rows * ($margin+(2*$space)); //Bereken de totale hoogte van het plaatje
		$img = imagecreatetruecolor($width, $height); //Maak een plaatje
		$white = imagecolorallocate($img, 255, 255, 255); //Maak de kleur wit
		$colors['red'] = imagecolorallocate($img, 255, 0, 0); //Maak de kleur rood
		$colors['blue'] = imagecolorallocate($img, 0, 0, 255); //Maak de kleur blauw
		$colors['green'] = imagecolorallocate($img, 0, 200, 0); //Maak de kleur groen
		imagefill($img, 0, 0, $white); //Maak het plaatje helemaal wit
		$left = 0; //Zet de margin vanaf de linkerkant op 0
		$used = array(); //Maak een array waarin het script kan zetten hoe vaak hij elk figuur heeft gebruikt
		$row = 0; //Vertel het script dat hij bij de eerste rij is
		$rows--; //Haal 1 van het aantal rijen af, want het script begint bij 0 ipv 1
		$blocknr = 0; //Vertel het script dat het het 0de blokje van het geheel is
		
		for($i = 0; $i < $blocks; $i++) //Voer voor alle figuurtjes het volgende script uit
			{
			 	$number = $_SESSION['captcha']['touse'][$blocknr]; //Haal uit de sessie wat voor figuurtje hij moet maken
				switch($number) //Voer wat expressions uit met $number
					{
						case 0: //Als $number 0 is
							imagefilledrectangle($img, ($left+$space), ($row*($margin+(2*$space))+$space), ($left+$margin+$space), ($row*($margin+(2*$space))+$margin+$space), $colors[array_rand($colors)]); //Maak een vierkantje
							$used['vierkantjes']++; //Stop in een variabele dat je vierkantje een keer gebruikt hebt
							$last = 'vierkantjes'; //Zeg dat het laatstgebruikte figuurtje een vierkantje is
						break; //Einde van "Als $number 0 is"


						case 1: //Als $number 1 is
							imagefilledellipse($img, ($left+$space+floor($margin/2)), ($row*($margin+(2*$space))+$space+floor($margin/2)), $margin, $margin, $colors[array_rand($colors)]); //Maak een rondje
							$used['rondjes']++; //Stop in een variabele dat je rondje een keer gebruikt hebt
							$last = 'rondjes'; //Zeg dat het laatstgebruikte figuurtje een rondje is
						break; //Einde van "Als $number 1 is"


						case 2: //Als $number 2 is
							$points = array(
								($left+$space), ($row*($margin+(2*$space))+$margin+$space),
								($left+$space+floor($margin/2)), ($row*($margin+(2*$space))+$space),
								($left+$margin+$space), ($row*($margin+(2*$space))+$margin+$space)
							); //Stop alle punten voor de driehoek in een array
							imagefilledpolygon($img, $points, 3, $colors[array_rand($colors)]); //Maak een driehoekje
							$used['driehoekjes']++; //Stop in een variabele dat je driehoekje een keer gebruikt hebt
							$last = 'driehoekjes'; //Zeg dat het laatstgebruikte figuurtje een driehoekje is
						break; //Einde van "Als $number 2 is"
					} //Einde van de expressions voor $number
				$left += $margin+(2*$space); //Zet de left-margin van het plaatje omhoog
				if($i == ($blocks-1) && $row < $rows) //Als dit het laatste figuurtje van de rij is
					{
						$i = -1; //Vertel het script dat het het -1de figuurtje is (geen idee waarom het met 0 niet werkt :S)
						$row++; //Vertel het script dat hij bij de volgende rij is
						$left = 0; //Zet de margin vanaf de linkerkan weer op 0
					}
				$blocknr++; //Vertel het script dat hij bij het volgende blokje is
			}
		
		//print_r($_SESSION);
		
		imagegif($img); //Output de image naar de browser
		imagedestroy($img); //Verwijder het plaatje uit het geheugen
		exit(); //Stop het script
	}

session_start(); //Start de sessie

if($_SERVER['REQUEST_METHOD'] == "POST") //Als je deze pagina opent door te posten
	{
		$howmany = $_POST['howmany']; //Stop het gegeven antwoord in een variabele
		if(!ctype_digit($_POST['howmany'])) //Kijk of het gegeven antwoord wel een getal is
			{
				echo 'Hee, wel een getal invoeren!!'; //Zoniet, laat het de client weten...
				exit(); //...en beëindig het script!
			}
		$answer = ''.$_SESSION['captcha']['used'][$_SESSION['captcha']['shape']].''; //Stop het goede antwoord als string in een variabele
		if($answer == $howmany) //Als het gegeven antwoord gelijk is aan het goede antwoord
			{
				echo 'Goed'; //Laat de client weten dat het antwoord goed is
			}
		else //Als het gegeven antwoord niet gelijk is aan het goede antwoord
			{
				echo 'Fout<br />
Je zei: '.$howmany.'<br />
Het was: '.$answer; //Laat de client weten dat het antwoord fout is en vertel hem het goede antwoord
			}
	}
else //Als je deze pagina niet bereikt door te posten
	{
		unset($_SESSION['captcha']); //Gooi de oude gegevens weg
	 	for($i = 0; $i < $blocks * $rows; $i++) //Voer voor elk figuurtje dit script uit:
	 		{
				$_SESSION['captcha']['touse'][$i] = rand(0, 2); //Bepaal welk figuurtje het wordt
				switch($_SESSION['captcha']['touse'][$i]) //Voer wat expressions uit met het figuurtje
					{
						case 0: //Als figuurtje 0 is
							$used['vierkantjes']++; //Stop in een variabele dat er een vierkantje is gebruikt
							$lastshape = 'vierkantjes'; //Stop in een variabele dat het laatstgebruikte figuurtje een vierkantje is
						break; //Einde van "Als figuurtje 0 is"


						case 1: //Als figuurtje 1 is
							$lastshape = 'rondjes'; //Stop in een variabele dat er een rondje is gebruikt
							$used['rondjes']++; //Stop in een variabele dat het laatstgebruikte figuurtje een rondje is
						break; //Einde van "Als figuurtje 1 is"


						case 2: //Als figuurtje 2 is
							$lastshape = 'driehoekjes'; //Stop in een variabele dat er een driehoekje is gebruikt
							$used['driehoekjes']++; //Stop in een variabele dat het laatstgebruikte figuurtje een driehoekje is
						break; //Einde van "Als figuurtje 2 is"
					} //Einde van de expressions voor het figuurtje
				if($i == ($blocks * $rows - 1)) //Als dit het laatste blokje is
					{
						$_SESSION['captcha']['shape'] = $lastshape; //Stop in de sessie wat het laatste figuurtje is
					}
			}
		$_SESSION['captcha']['used'] = $used; //Stop in de sessie hoe vaak elk figuurtje gebruikt is
		echo '
<form method="post" action="'.$_SERVER['PHP_SELF'].'">
	<img src="'.$_SERVER['PHP_SELF'].'?image" alt="Plaatje" /><br /><br />
	Hoeveel '.$_SESSION['captcha']['shape'].' zie je in het plaatje hierboven?
	<input type="text" name="howmany" maxlength="5" size="2" /><br /><br />
	<input type="submit" value="Volgende">
</form>
'; //Echo het formulier
	}

?>