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> ";
}
//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 " ";
continue;
}
//Tulostetaan merkki
echo "<u>" . $sana[$i] . "</u> ";
continue;
}
//Jos kirjain löytyi
if($strpos !== false) {
//Tulostetaan alleviivattuna kirjain
echo "<u>" . $sana[$i] . "</u> ";
} else {
//Muutoin tulostetaan tyhjä viiva
echo "<u> </u> ";
}
}
//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> ";
} else {
//Jos kirjain on arvattu, niin tulostetaan se yliviivattuna.
echo "<u><strike>" . $aakkoset[$a] . "</strike></u> ";
}
}
//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); ?>
Aihe on jo aika vanha, joten et voi enää vastata siihen.