Generátor básní v PHP

PHP Ostatní Generátor básní v PHP

Unicorn College ONEbit hosting Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Jsou to mé začátky v OOP, není to má výmluva, spíš nedostatek zkušeností. Tak když tam najdete nějaké chyby, napiště prosím do komentářů správné řešení. Díky

<?php
session_start();
header('Content-type: text/html; charset=utf-8');

/*
Velmi jednoduchý generátor básniček. Rozšíření je možné podle vašich potřeb.
Je to můj první větší script v OOP, tak to prosím berte velmi s rezervou.
*/

class Basen
{

public $obsah = ""; // záznam obsahu básně

private $pocet_slok = 1; // počet slok básně

private $vety = array("prid rod pod slov","pod prid rod slov","pod rod slov","rod priv pod slov");  // styl vět

private $styl = array("112211","221133","121233","332211","1122","1313","2332","11221122");  // styl básně

private $slova = array(
        "rod1" => array("muž","syn","dědeček","starosta","alkoholik","policista","saniták","svářeč","programátor","řezník","hrubián","hlídač krav","veterán"),
        "rod2" => array("sestra","matka","dcera","jeptiška","dojička","zpěvačka","básnířka","malířka","kurva","řidička","lazebnice","krakatice","večernice","polednice"),
        "rod3" => array("dítě","prase","struhadlo","švihadlo","strašidlo","mýdlo","jídlo","víno","leštidlo","lepidlo","sedadlo","lehátko","ořezávátko","na koberce klepadlo"),
        "pod1" => array("kredenc","počítač","stůl","parní válec","soustruh","olejový hever","boiler","traktor","klakson","katamarán","hoboj","router"),
        "pod2" => array("postel","kabelku","žehličku","ředkvičku","lampičku","tlamičku","lahvičku","stoličku","překližku","vydličku","hoblovku","vrtačku"),
        "pod3" => array("pivo","auto","letadlo","pyžamo","zrdcadlo","lepidlo","hovado","lákadlo","hekadlo","tričko","počítadlo","švihadlo"),
        "prid1" => array("velký","barevný","pevný","silný","jasný","přesný","krásný","starý","unavený","naštvaný","kouzelný","prolhaný","proradný","záhadný"),
        "prid2" => array("tlustá","šílená","ožralá","krásná","štíhlá","vláčná","drahá","levná","mladá","pihovatá","proradná","osamělou","odohodlanou","vyplašená"),
        "prid3" => array("skvělé","drahé","malé","silné","výkonné","bouřlivé","strnulé","rozbité","přiskříplé","zapomenuté","vážné","odhodlané","unavené","uplacené"),
        "slov1" => array("rozladil","hladil","radil","rozbil","zastřelil","zabalil","zapálil","polil","rozdrobil","opravil","opálil","chytil","odpálil","opustil","obrátil"),
        "slov2" => array("rozbila","štípala","vábila","hrozila","žárlila","shodila","zkrátila","mlátila","vypnula","předělala","přeřezala","osolila","omlátila","nabarvila"),
        "slov3" => array("letělo","hledělo","stávalo","načalo","bolelo","křupalo","chápalo","tápalo","skákalo","přestalo","řvalo","žvatlalo","zuřilo","schovalo","klepalo"),
        "priv1" => array("své","vlastní","kamarádův","otcův","drahý"),
        "priv2" => array("svou","cizí","novou","papírovou","zlevněnou"),
        "priv3" => array("své","jiné","zahraniční","levné","rozbité"),
); // pole slov

// upraví větu, první písmeno bude velké
private function uprav_vetu($s, $e ='utf-8')
{
        if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($s)) {
                $s = mb_strtolower($s, $e);
                $u = mb_strtoupper($s, $e);
                preg_match('/(.)/us', $u, $m);
                $s = $m[1] . mb_substr($s, 1, mb_strlen($s, $e), $e);
        }
        else
        {
                $s = ucfirst($s);
        }
        return $s;
}

// vytvoří větu, vybere styl a doplní slova
private function vrat_vetu($x,$veta)
{
        $veta = preg_replace("/(prid)/i",($this->slova["prid$x"][array_rand($this->slova["prid$x"])]),$veta);
        $veta = preg_replace("/(rod)/i",($this->slova["rod$x"][array_rand($this->slova["rod$x"])]),$veta);
        $veta = preg_replace("/(pod)/i",($this->slova["pod$x"][array_rand($this->slova["pod$x"])]),$veta);
        $veta = preg_replace("/(slov)/i",($this->slova["slov$x"][array_rand($this->slova["slov$x"])]),$veta);
        $veta = preg_replace("/(priv)/i",($this->slova["priv$x"][array_rand($this->slova["priv$x"])]),$veta);
        return $this->uprav_vetu($veta).".";
}

// vytvoří tituloek básně
private function titulek()
{
        return "<h1>".($this->vrat_vetu(rand(1,3),"prid rod"))."</h1>\n\n";
}

// vytvoří obsah básně, vegeneruje věty a pošle je ke zpracování do vrat_vetu
private function vytvor_obsah()
{
        $obsah = "";
        for($b=0;$b<$this->pocet_slok;$b++)
        {
                $obsah .= "<p>";
                $x = rand(0,7);
                for($a=0;$a<(strlen($this->styl[$x]));$a++)
                {
                        $veta = $this->vety[array_rand($this->vety)];
                        $obsah .= $this->vrat_vetu($this->styl[$x][$a],$veta)."<br />\n";
                }
                $obsah .= "</p>\n";
        }
        return $obsah;
}

public function __construct($n)
{
        if($n < 1) $n = rand(2,5);
        $this->pocet_slok = $n;
}

public function __toString()
{
        $this->obsah .= $this->titulek();
        $this->obsah .= $this->vytvor_obsah();
        return $this->obsah;
}

}


// použití třídy Basen
// 0 = použije se náhodné číslo mezi 1 - 5, jinak se vrtátí tolik slok kolik budete potřebovat

$basen = new Basen(20);
echo $basen;

?>

Galerie

Program byl vytvořen v roce 2013.

 

Stáhnout

Staženo 241x (39.07 kB)
Aplikace je včetně zdrojových kódů v jazyce php

 

 

Program pro vás napsal David Hynek
Avatar
Jak se ti líbí článek?
1 hlasů
já jsem redaktor?
Aktivity (1)

 

 

Komentáře
Zobrazit starší komentáře (4)

Avatar
mjezek
Člen
Avatar
mjezek:26.5.2017 11:54

Nefungují háčky a čárky, mění se na otazníky.

 
Odpovědět 26.5.2017 11:54
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na mjezek
David Čápka:26.5.2017 12:09

Ale to přeci není tím skriptem :) Musíš ho vložit do HTML stránky, kde je nastavené UTF-8 kódování, to jsou úplné základy, viz zdejší kurzy.

Odpovědět  +1 26.5.2017 12:09
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
mjezek
Člen
Avatar
mjezek:26.5.2017 15:29

No to mě napadlo... :-D
Ale přišlo mi to divné u hotového scriptu...

 
Odpovědět 26.5.2017 15:29
Avatar
mkub
Redaktor
Avatar
Odpovídá na mjezek
mkub:26.5.2017 18:19

ten problem mas v kodovani toho suboru...
nastav si IDE, v ktorom to pises na utf-8, nasledne si nastav aj ten script na utf-8 a vyvaruj sa Windowsovemu notepadu - ten uklada iba vo Windows kodovani (napr. pre strednu Europu: cp-1250), co je uplne ine kodovanie, nez utf-8

 
Odpovědět 26.5.2017 18:19
Avatar
mjezek
Člen
Avatar
Odpovídá na mkub
mjezek:26.5.2017 19:18

Používám Notepad++

 
Odpovědět 26.5.2017 19:18
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na mjezek
David Hynek:27.5.2017 11:43

Uf, to je už let.

Michale, když budeš psát program třebas v Notepadu, tak musíš soubor ukládat v nějakém kódování. Používám UTF8, totéž doporučuji tobě. Tak jak ten program je, vygeneruje část HTML, ale jen tu, která by měla být vložená mezi tagy Body. Tedy hlavičku stránky v HTML musíš napsat sám a také tam dát kodování znakové sady. Tedy opět UTF8.

Stránka by pak vypadala asi takto. Musíš ji samozřejmě uložit jako soubor PHP:

<?php
session_start();
header('Content-type: text/html; charset=utf-8');

/*
Velmi jednoduchý generátor básniček. Rozšíření je možné podle vašich potřeb.
Je to můj první větší script v OOP, tak to prosím berte velmi s rezervou.
*/

class Basen
{

public $obsah = ""; // záznam obsahu básně

private $pocet_slok = 1; // počet slok básně

private $vety = array("prid rod pod slov","pod prid rod slov","pod rod slov","rod priv pod slov");  // styl vět

private $styl = array("112211","221133","121233","332211","1122","1313","2332","11221122");  // styl básně

private $slova = array(
        "rod1" => array("muž","syn","dědeček","starosta","alkoholik","policista","saniták","svářeč","programátor","řezník","hrubián","hlídač krav","veterán"),
        "rod2" => array("sestra","matka","dcera","jeptiška","dojička","zpěvačka","básnířka","malířka","kurva","řidička","lazebnice","krakatice","večernice","polednice"),
        "rod3" => array("dítě","prase","struhadlo","švihadlo","strašidlo","mýdlo","jídlo","víno","leštidlo","lepidlo","sedadlo","lehátko","ořezávátko","na koberce klepadlo"),
        "pod1" => array("kredenc","počítač","stůl","parní válec","soustruh","olejový hever","boiler","traktor","klakson","katamarán","hoboj","router"),
        "pod2" => array("postel","kabelku","žehličku","ředkvičku","lampičku","tlamičku","lahvičku","stoličku","překližku","vydličku","hoblovku","vrtačku"),
        "pod3" => array("pivo","auto","letadlo","pyžamo","zrdcadlo","lepidlo","hovado","lákadlo","hekadlo","tričko","počítadlo","švihadlo"),
        "prid1" => array("velký","barevný","pevný","silný","jasný","přesný","krásný","starý","unavený","naštvaný","kouzelný","prolhaný","proradný","záhadný"),
        "prid2" => array("tlustá","šílená","ožralá","krásná","štíhlá","vláčná","drahá","levná","mladá","pihovatá","proradná","osamělou","odohodlanou","vyplašená"),
        "prid3" => array("skvělé","drahé","malé","silné","výkonné","bouřlivé","strnulé","rozbité","přiskříplé","zapomenuté","vážné","odhodlané","unavené","uplacené"),
        "slov1" => array("rozladil","hladil","radil","rozbil","zastřelil","zabalil","zapálil","polil","rozdrobil","opravil","opálil","chytil","odpálil","opustil","obrátil"),
        "slov2" => array("rozbila","štípala","vábila","hrozila","žárlila","shodila","zkrátila","mlátila","vypnula","předělala","přeřezala","osolila","omlátila","nabarvila"),
        "slov3" => array("letělo","hledělo","stávalo","načalo","bolelo","křupalo","chápalo","tápalo","skákalo","přestalo","řvalo","žvatlalo","zuřilo","schovalo","klepalo"),
        "priv1" => array("své","vlastní","kamarádův","otcův","drahý"),
        "priv2" => array("svou","cizí","novou","papírovou","zlevněnou"),
        "priv3" => array("své","jiné","zahraniční","levné","rozbité"),
); // pole slov

// upraví větu, první písmeno bude velké
private function uprav_vetu($s, $e ='utf-8')
{
        if (function_exists('mb_strtoupper') && function_exists('mb_substr') && !empty($s)) {
                $s = mb_strtolower($s, $e);
                $u = mb_strtoupper($s, $e);
                preg_match('/(.)/us', $u, $m);
                $s = $m[1] . mb_substr($s, 1, mb_strlen($s, $e), $e);
        }
        else
        {
                $s = ucfirst($s);
        }
        return $s;
}

// vytvoří větu, vybere styl a doplní slova
private function vrat_vetu($x,$veta)
{
        $veta = preg_replace("/(prid)/i",($this->slova["prid$x"][array_rand($this->slova["prid$x"])]),$veta);
        $veta = preg_replace("/(rod)/i",($this->slova["rod$x"][array_rand($this->slova["rod$x"])]),$veta);
        $veta = preg_replace("/(pod)/i",($this->slova["pod$x"][array_rand($this->slova["pod$x"])]),$veta);
        $veta = preg_replace("/(slov)/i",($this->slova["slov$x"][array_rand($this->slova["slov$x"])]),$veta);
        $veta = preg_replace("/(priv)/i",($this->slova["priv$x"][array_rand($this->slova["priv$x"])]),$veta);
        return $this->uprav_vetu($veta).".";
}

// vytvoří tituloek básně
private function titulek()
{
        return "<h1>".($this->vrat_vetu(rand(1,3),"prid rod"))."</h1>\n\n";
}

// vytvoří obsah básně, vegeneruje věty a pošle je ke zpracování do vrat_vetu
private function vytvor_obsah()
{
        $obsah = "";
        for($b=0;$b<$this->pocet_slok;$b++)
        {
                $obsah .= "<p>";
                $x = rand(0,7);
                for($a=0;$a<(strlen($this->styl[$x]));$a++)
                {
                        $veta = $this->vety[array_rand($this->vety)];
                        $obsah .= $this->vrat_vetu($this->styl[$x][$a],$veta)."<br />\n";
                }
                $obsah .= "</p>\n";
        }
        return $obsah;
}

public function __construct($n)
{
        if($n < 1) $n = rand(2,5);
        $this->pocet_slok = $n;
}

public function __toString()
{
        $this->obsah .= $this->titulek();
        $this->obsah .= $this->vytvor_obsah();
        return $this->obsah;
}

}


// použití třídy Basen
// 0 = použije se náhodné číslo mezi 1 - 5, jinak se vrtátí tolik slok kolik budete potřebovat

?>
<!DOCTYPE html>
<html lang="cs-cz">
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title>Báseň</title>
  </head>
  <body>
<?php
   $basen = new Basen(5);
   echo $basen;
?>
  </body>
</html>

Nepočítej s nějakým zázrakem, který bys mohl recitovat nějaké holce, je to jen zkouška funkčnosti.

Ať se daří.

Odpovědět 27.5.2017 11:43
Čím víc vím, tím víc věcí nevím.
Avatar
mjezek
Člen
Avatar
Odpovídá na David Hynek
mjezek:27.5.2017 11:49

Většinou to funguje i když tam vůbec kódovaní nenapíšu, ale když tam je tak by mělo být správně no...
Nicméně vím, že ta báseň není žádný zázrak, PHP nemá umělou inteligenci... :-D

 
Odpovědět 27.5.2017 11:49
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na mjezek
David Hynek:27.5.2017 11:55

Na to se nesmíš spoléhat. Protože prohlížeč se zeptá stránky, v jakém kódování ji má přečíst. A když tam nic není, použije standardní nastavení. A to bude vždy jako na potvoru jiné než v kterém je stránka uložena. Pak stačí mít v Notepadu nastaveno jedno kodování a když do něj vložíš kód ze stránek v jiném kodování a uložíš, tak ti to diakritiku úplně rozhodí. Naschvál se koukni co máš v tom Notepadu nastaveno.

Odpovědět  +1 27.5.2017 11:55
Čím víc vím, tím víc věcí nevím.
Avatar
mjezek
Člen
Avatar
mjezek:27.5.2017 12:42

Je tam kódování "UTF-8 (bez BOM)"

 
Odpovědět 27.5.2017 12:42
Avatar
mkub
Redaktor
Avatar
Odpovídá na mjezek
mkub:27.5.2017 22:24

najjistejsie bude, ked budes uvadzat v hlavicke kodovanie, v ktorom je dany dokument ulozeny a ho dodrzovat vo vsetkych prisluchajucich suborov a zaroven ak aplikacia pouziva databazu, tak aj uviest pri definovani tabuliek a databazy, v akom kodovani su ulozene udaje a navyse je to aj odporucany postup (sice trosku narastie velkost zdrojoveho kody, ale tych par bajtov navyse nehra ziadnu rolu, skor naopak, pomoze browseru vybrat vhodne kodovanie)

 
Odpovědět  +1 27.5.2017 22:24
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 14. Zobrazit vše