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.