Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Hirsipuu

MIB [04.09.2009 16:20:10]

#

Tein tälläisen hirsipuu-pelin, koska huomasin noiden Putkan hirsipuiden olevan "viallisia". Alaviivat on kirjoitettu yhteen, jolloin niistä ei voi päätellä sanan pituutta. Myöskään vääristä vastauksista ei tulee tätä perinteistä hirteen joutuvaa ukkelia.

No, minä nyt toteutin sen GD kirjastolla. Tässä se sitten on, otan vastaan parannusehdotuksia.

<?php
//hirsipuu.php
//Merkistö: ISO-8859-1, Ansi

function hirsipuu($sana) {
	//Muutetaan sana suuriksi kirjaimiksi
	$sana = strtoupper($sana);

	//Tämä sivu
	$sivu = $_SERVER["PHP_SELF"];
	//Sivun osoite, jolla hirsi piirretään
	$hirsisivu = "hirsi.php";

	//Mitkä kirjaimet on arvattu
	$arvaukset = strtoupper($_GET["a"]);
	//Kaikki aakkoset ja ääkköset
	$aakkoset = "abcdefghijklmnopqrstuvwxyzåäö";

	//Alustetaan väärät vastaukset nollaksi
	$vaarat = 0;

	//Array, jossa on kaikki erikoismerkit, joita ei laiteta arvattavaksi
	$ohitettavat = array(" ", "?", "%", "/", "\\", "&", "#", "\"", "!", ",", ".", "(", ")", "[", "]");

	//Käydään kaikki arvaukset läpi
	for($i = 0; $i < strlen($arvaukset); $i++) {
		$pos = strpos($sana, $arvaukset[$i]);

		//Jos merkkiä ei löytynyt, niin kasvatetaan $vaarat arvoa.
		if($pos === false) {
			$vaarat++;
		}
	}

	//Aloitetaan sivun tulostaminen
	echo "<table width=\"500\" height=\"110\" style=\"border: 1px solid black; background-color: white;\" valign=\"bottom\">";
	echo "<tr><td>";

	//Tulostetaan hirsikuva
	echo "<img src=\"$hirsisivu?vaarat=$vaarat\" style=\"padding: 0px\">";
	echo "</td><td align=\"right\" style=\"margin-right: 0px\" valign=\"bottom\">";

	//Jos on arvattu 10 tai useampi kerta väärin
	if($vaarat >= 10) {
		//Käydään $sana läpi, jotta tulostetaan oikea vastaus
		for($b = 0; $b < strlen($sana); $b++) {
			//Tulostetaan kaikki merkit alleviivattuna ja erotettuna toisistaan
			echo "<u>" . $sana[$b] . "</u>&nbsp;";
		}

		//Tulostetaan pari br-tagia, ja viesti käyttäjälle
		echo "<br><br><br><br>";
		echo "Olet arvannut 10 tai useamman kerran väärin! <a href=\"?\">Aloita alusta</a>";

		//Lopetetaan taulukko
		echo "</td></tr></table>";
		die();
	}

	//Käydään kaikki arvaukset ja aakkoset läpi
	for($i = 0; $i < strlen($sana); $i++) {
		//Etsii, onko $sanassa $sana[$i] (https://www.php.net/strpos)
		$strpos = strpos($arvaukset, $sana[$i]);

		$vaaria = 0;

		//Jos on kyseessä erikoismerkki
		if(in_array($sana[$i], $ohitettavat)) {
			//Jos merkki on välilyönti
			if($sana[$i] == " ") {
				echo "&nbsp;";
				continue;
			}
			//Tulostetaan merkki
			echo "<u>" . $sana[$i] . "</u>&nbsp;";
			continue;
		}

		//Jos kirjain löytyi
		if($strpos !== false) {
			//Tulostetaan alleviivattuna kirjain
			echo "<u>" . $sana[$i] . "</u>&nbsp;";
		} else {
			//Muutoin tulostetaan tyhjä viiva
			echo "<u>&nbsp;</u>&nbsp;";
		}
	}

	//Tulostetaan muutama rivinvaihto asioiden väliin
	echo "<br><br><br><br>";

	//Käydään kaikki aakkoset läpi
	for($a = 0; $a < strlen($aakkoset); $a++) {
		$strpos2 = strpos($arvaukset, strtoupper($aakkoset[$a]));

		//Jos kirjainta ei ole vielä arvattu,
		if($strpos2 === false) {
			//Tulostetaan arvauslinkki
			echo "<a href=\"$sivu?a=" . $_GET["a"] . $aakkoset[$a] . "\">" . $aakkoset[$a] . "</a>&nbsp;";
		} else {
			//Jos kirjain on arvattu, niin tulostetaan se yliviivattuna.
			echo "<u><strike>" . $aakkoset[$a] . "</strike></u>&nbsp;";
		}
	}
	//Tulostetaan kaikki muut HTML:t
	echo "</td></tr>";
	echo "</table>";
	echo "<a href=\"$sivu\">Uudestaan</a> | $vaarat/10 väärää vastausta.<br><br>";
}

//Esimerkki
hirsipuu("Perunasalaatti");
?>
<?php
//hirs.php
//Merkistö: ISO-8859-1, Ansi

//Väärien vastauksien lukema on $_GET["vaarat"] taulukossa
$vaarat = $_GET["vaarat"];
//Luodaan kuva
$kuva = imagecreatetruecolor(95, 100);

//Taustaväri
$bg = imagecolorallocate($kuva, 255, 255, 255);
imagefill($kuva, 0, 0, $bg);

//Alustetaan värejä
$musta = imagecolorallocate($kuva, 0, 0, 0);


//Näillä piirretään ukko.

//Kumpu
if($vaarat >= 1) imageellipse($kuva, 30, 100, 60, 60, $musta);
//Varsi
if($vaarat >= 2) imageline($kuva, 30, 70, 30, 10, $musta);
//Poikkipuu
if($vaarat >= 3) imageline($kuva, 80, 10, 30, 10, $musta);
//Tukipuu
if($vaarat >= 4) imageline($kuva, 45, 10, 30, 25, $musta);
//Köysi
if($vaarat >= 5) imageline($kuva, 80, 10, 80, 25, $musta);
//Pää, silmät, nenä ja suu
if($vaarat >= 6) {
	//Pää
	imageellipse($kuva, 80, 31, 12, 12, $musta);
	//Vasen silmä
	imageline($kuva, 78, 30, 78, 30, $musta);
	//Oikea silmä
	imageline($kuva, 82, 30, 82, 30, $musta);
	//Nenä
	imageline($kuva, 80, 32, 80, 32, $musta);
	//Suu
	imageline($kuva, 78, 34, 82, 34, $musta);
}
//Vartalo
if($vaarat >= 7) imageline($kuva, 80, 55, 80, 38, $musta);
//Vasen jalka
if($vaarat >= 8) imageline($kuva, 70, 70, 80, 56, $musta);
//Oikea jalka
if($vaarat >= 9) imageline($kuva, 90, 70, 80, 56, $musta);
//Kädet
if($vaarat >= 10) imageline($kuva, 70, 42, 90, 42, $musta);

//Lähetetään selaimelle tieto
header("Content-type: image/png");
imagepng($kuva);
?>

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta