Kde bydlí tygr?

Tygr ve hře PísmenaInspirován Pixym, rozhodl jsem se vytvořit vlastní jednoduchou hru – po zmáčknutí klávesy na klávesnici se zobrazí obrázek zvířete, které tam „bydlí“ (např. v T bydlí tygr), a počítač řekne jeho jméno.

Nejprve jsem zvažoval, že hru naprogramuji v JavaScriptu, ale když jsem si vzpomněl, jaké problémy jsem měl s programově řízeným přehráváním zvuků v prohlížeči, tak jsem tuto myšlenku zase opustil. Zvažoval jsem Flash, ten ale neovládám a navíc mám za to, že jeho vývojové prostředí je placené. Vzpomněl jsem si na přednášku Tomáše Petříčka o tom, jak se dá pomocí Phalangeru vytvářet Silverlight aplikace v PHP a rozhodl jsem se to vyzkoušet.

Stáhnul jsem si tedy zdarma dostupné Visual Studio Shell, do něj integraci PHP a Phalanger a mohl jsem začít tvořit. Ukázalo se, že to je překvapivě jednoduché, celá aplikace má pár řádek kódu (pominu-li zhruba stránku kódu vygenerovanou návrhářem).

<?php
// šestitečka slouží v Phalangeru před příchodem PHP 5.3 jako oddělovač jmenných prostorů
private function Form1_KeyUp(System:::Object $sender, System:::Windows:::Forms:::KeyEventArgs $e) {
    static $last = "";
    $ch = chr($e->KeyCode);
    $pics = glob("pic/$ch*");
    if (!$pics) {
        return false;
    }
    $pos = array_search($last, $pics);
    $last = $pics[$pos !== false ? ($pos + 1) % count($pics) : 0];
    $this->pictureBox1->ImageLocation = $last;
    $sound = preg_replace('~^pic/(.+)\\..*~', 'sound/\\1.wav', $last);
    if (file_exists($sound)) {
        $soundPlayer = new System:::Media:::SoundPlayer($sound);
        $soundPlayer->Play();
    }
}
?>

Z Visual Studia mi zatím vypadla klasická desktopová aplikace, ale předpokládám, že změna na Silverlight aplikaci bude spíše otázkou konfigurace než nějaké dramatické změny kódu. Ke spuštění programu budou jistě potřeba nějaké knihovny, ale velikost výsledného souboru 20 kB je rozhodně sympatická.

Vývojové prostředí Visual Studio

Vývojové prostředí Visual Studia je poměrně příjemné, některé věci mi ale nefungovaly. Kupříkladu se dá ladit, ale kukátka je potřeba psát v jiné syntaxi (místo $this->image je potřeba psát this.image) a nedají se v nich volat funkce. Vizuální návrhář formulářů hlásí cosi o tom, že u komponenty s obrázkem nejsou k dispozici metody BeginInit a EndInit, při přidání panelu nástrojů se z něj ztrácí komponenty a při složitější úpravě kódu přestane návrhář fungovat úplně.

Teprve když jsem měl hru hotovou, tak mě napadlo, že by se asi dala naprogramovat i v PHP-GTK, které konečně doputovalo do verze 2 (po roce a půl od zveřejnění „zeta“ verze naznačující, že finální verze už je na spadnutí). Možná to ještě zkusím, abych porovnal, jak to bude ve srovnání s Phalangerem pracné nebo snadné, zatím jsem ale nenašel komponentu na přehrání zvuku.

Jakub Vrána, Seznámení s oblastí, 11.4.2008, on-line

Diskuse

ikona marek:

stránka nenalezena - pismanka.zip Krom toho, hází to úmyslně chybovou stránku bez stylování?
11.4.2008 05:39:54

ikona Jakub Vrána:

Soubor jsem na server bohužel opravdu zapomněl nahrát, dám ho tam večer. Chybové stránce jsem stylování doplnil. Díky za upozornění.
11.4.2008 13:51:02

ikona v6ak:

Co je ta 'šestitečka' (:::)? Vypdá to podobně jako namespaces, ale ty jsou IMHO s 'čtyřtečkou', ne? http://cz.php.net/manual/en/language.namespaces.using.php
11.4.2008 20:13:39

ikona v6ak:

:-D Tak teď jsem zaroloval nahoru... No jo, musím se naučit číst...
11.4.2008 20:15:11

Aslan:

Panove (a damy), jestli se nekomu podari nainstalovat zminene vyvojove prostredi na Vistach, byli byste te lasky a napsali jak jste poresili tuto chybu: "The installer has encountered an unexpected error installing the package.  This may indicate a problem with the package.  The error code is 2869.".

Diky predem.
11.4.2008 20:31:44

ikona flag:

A lze ti pod Vistami alespoň prográmek "Tygr" spustit?
12.4.2008 01:24:10

ikona marek:

Na vistách mi to spustit nejde...   
12.4.2008 06:56:26

Tomik:

Mě taky ne... :(
12.4.2008 17:41:35

ikona Jakub Vrána:

Mě to bohužel nejde spustit ani na XP :-(. Podařilo se mi to spustit jenom na stroji, kde jsem to vyvinul… Zkusím to překompilovat nebo zjistit závislosti knihoven a dal bych sem novou verzi.
14.4.2008 14:10:45

ikona Jakub Vrána:

Ze stránky http://www.codeplex.com/Phalanger/Release/ProjectReleases.aspx je potřeba nainstalovat Phalanger runtime binary.
15.4.2008 14:07:53

Tomas Petricek:

Ahoj,
co se instalace tyka, tak ta je odzkousena na Windows 2003, takze je mozne, ze na Viste je to slozitejsi.. Ktery instalator haze zminovanou chybu?

Jinak, samotna vysledna aplikace potrebuje jednak .NET Framework 2.0 a za druhe jeste dve knihovny Phalangeru, konkretne PhpNetCore.dll a PhpNetClassLibrary.dll (takze s tou vyslednou velikosti to nebude tak slavne, ale porad je to relativne male :-)). Obe dve knihovny jsou soucasti instalace a melo by stacit nakopirovat je do adresare k aplikaci.
15.4.2008 01:29:31

Aslan:

Nevim konkretne ktera verze instalatoru to je, ale stahl jsem ho pred par dny na http://www.codeplex.com/Phalanger/Release/…?ReleaseId=11564
16.4.2008 10:56:09

optik:

To hrani zvuku asi primo z PHP nejak univerzalne nepujde, na linuxu by to mozna slo pres exec volani nejakeho playeru, na win mozna nejak pres win api, nekde na peclu je nejaky binding. Kazdopadne psat desktop aplikace v PHP se asi nikdy moc nebude, proto jim asi taky trvalo tak dlouho, nez to jakz takz dodelali, ale proc si s tim nepohrat :-). Na win desktopu valcuje C# naprosto drtive vsechno a na Linuxu to asi bude stale stare dobre C/C++. Phalanger je zajimava alternativa, ale osobne mu moc neverim, aktivne ho dela v podstate jeden clovek a to stale jeste studujici T.Petricek.
11.4.2008 21:56:44

ikona Jakub Vrána:

Nechce se mi věřit, že by v GTK nebyla žádná komponenta na přehrání zvuku.
14.4.2008 13:58:58

Michal:

Jestli chceš Prokopa učit cizí jazyk tak tady to máš v angličtině (zvol si verzi Toddler):
http://www.fisher-price.com/us/fun/games/abczoo/default.asp
25.4.2008 15:33:18

ikona Jakub Vrána:

S příchodem HTML5 se to dá celé udělat i v prohlížeči (testováno ve Firefoxu 3.6):

<img id="img" src="" alt="">
<script type="text/javascript">
window.onkeyup = function (event) {
    var ch = String.fromCharCode(event.keyCode);
    var img = document.getElementById('img');
    img.src = ch + '.jpg';
    var audio = new Audio(ch + '.wav');
    audio.play();
};
</script>
23.3.2010 00:26:27
avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.