Kde bydlí tygr?

Školení, která pořádám

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, diskuse: 16 (nové: 0)

Diskuse

ikona marek:

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

ikona Jakub Vrána OpenID:

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í.

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

ikona v6ak:

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

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.

ikona flag:

A lze ti pod Vistami alespoň prográmek "Tygr" spustit?

ikona marek:

Na vistách mi to spustit nejde...   

Tomik:

Mě taky ne... :(

ikona Jakub Vrána OpenID:

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.

ikona Jakub Vrána OpenID:

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

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.

Aslan:

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

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.

ikona Jakub Vrána OpenID:

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

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

ikona Jakub Vrána OpenID:

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>

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 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.