Autor Zpráva
uestla
Profil
www.mjzv.ic.cz

Dobrý den přeji všem!
Včera jsem se vcelku nudil, tak jsem tvořil takového pomocníka pro hru Město, jméno, zvíře, věc (jistě znáte) a celkem jsem si s tím vyhrál. Nechal jsem to přes noc uležet a dnes ještě něco dopracoval. Jedná se o jednoduchou javascriptovou aplikaci, která generuje náhodná písmena české abecedy vhodná ke hraní zmíněné hry (tedy bez Ď, Ň, Q, apod.) a použitá písmenka ukládá do paměti, aby se zabránilo jejich opakování a zajistila se tak plynulost hry. Klíčové je, že se použitá písmenka ukládají jak do cookies (pro udržení v paměti při reloadu stránky), tak do globálního pole, tudíž pro aktualizaci seznamu použitých písmen není potřeba reload (jako při obyčejné práci s cookies)!

Během hry je možno kdykoli zobrazit seznam použitých písmen (pomocí menu Možnosti vpravo nahoře). Při vyčerpání všech písmen se vyhodí hláška a nabídne možnost pro novou hru - promazání paměti (čímž se v praxi vymaže nejen cookie, ale také globální pole - čili opět není třeba refresh!).

// EDIT - začátek
Seznam použitých písmen se řadí podle anglické abecedy, čili CH je hned za C a písmena s diakritikou jsou na konci seznamu. Plánuji napsat nějaký algoritmus řazení, který by oba nedostatky odstranil.
// EDIT - konec

Nápad napsat tuhle aplikaci jsem dostal po hře předevčírem, kdy jsme hráli klasicky - jeden vždy říkal v duchu abecedu a jiný stopnul - mnohokrát se stalo, že na písmenu, které již padlo, nebo na některém nevhodném. A když už máte k dispozici přístup k internetu, může vám tahle aplikace pomoci tyto dva zádrhely pohodlně odstranit :-).

Požadavky:
- zapnutý JavaScript
- zapnuté styly

Pro lepší zážitek doporučuji přepnout stránku na celou obrazovku (většinou pomocí F11). Za IC lištu se omlouvám, ale jsem klasický chudý student, který nemá prostředky pro utrácení za vlastní doménu - díky za pochopení :-)

Aplikaci je možno ovládat i pomocí mezerníku - testováno v IE, FF, Opeře a Chromu, v IE ale nefunguje (možná byste mohli pomoci s řešením).

A co po vás vlastně chci? Abyste aplikaci vyzkoušeli, prohlédli si kód, napsali případné náměty, připomínky k vylepšení, apod. Předem díky!
A jinak ať vám slouží!
RockFire
Profil
Parádní a jednoduchý, ale nelíbí se mi ten alert(). Nešlo by to řešit nějak etičtěji?
uestla
Profil
RockFire
Jasně, že šlo, ale alert() je pro líné pisatele kódu jasná volba :-)
Co bys řekl na další zobrazovaný <div> uprostřed obrazovky s textem hlášky?
tomas657
Profil
mne sa to zdá byť tak trochu zbytočnosť...
RockFire
Profil
tomas: Nekaž mu to, v praxi to asi fakt nikdo nevyužije, ledaže by udělal opravdu hru.

uestla: Jo, nad generátorem písmen :-)
Hitman
Profil
uestla

Není to špatné, jen to asi nikdo nebude využívat :-).
oogi
Profil
uestla
Zajímavé, nicméně pro neznalce oné hry je to dost matoucí... Doporučuju tam dát nějakou vstupní obrazovku s detailním vysvětlením o co vlastně jde.
Chamurappi
Profil
Reaguji na tomase657:
Bylo by hezké, kdyby se písmeno rovnou i vyslovilo.

když už máte k dispozici přístup k internetu, může vám tahle aplikace pomoci tyto dva zádrhely pohodlně odstranit
Třetí zádrhel může být, že někdo vymyslí město, jméno, zvíře či věc, která neexistuje, respektive o které nikdo nikdy neslyšel. I takovou situaci jde s pomocí internetu (a vyhledávačů) vyřešit — nechceš tam přidat parazitní formulář (mířený do nového okna) vedoucí na vyhledávač?

Seznam použitých písmen se řadí podle anglické abecedy, čili CH je hned za C a písmena s diakritikou jsou na konci seznamu.
Můžeš každému písmenu přiřadit číslo a pak tu vyzobnutou podmnožinu seřadit sortem.
for(var i = 0; i < pismena.length; i++) pismena[i] = { znak: pismena[i], poradi: i };
// ...
vybranaPismena.sort(function(a, b)
{
  return a.poradi - b.poradi;
});

Aplikaci je možno ovládat i pomocí mezerníku […] v IE ale nefunguje (možná byste mohli pomoci s řešením).
Koukám na to už potřetí a žádnou chybu nevidím. To bude nějaká triviální záludnost.


Reaguji na RockFira:
Nešlo by to řešit nějak etičtěji?
Etičtěji? Alert je snad morálně pochybný? :-)
uestla
Profil
oogi
Doporučuju tam dát nějakou vstupní obrazovku s detailním vysvětlením o co vlastně jde.
Info o tom, k čemu stránka slouží, je v menu Možnosti -> O aplikaci, nicméně pravidla hry se mi tam dávat nechce. Myslím, že když už bude aplikaci někdo používat, tak ten, kdo si chce hru zahrát a ne ten, kdo chce vědět, jak se hraje.

Chamurappi
Reaguji na tomase657:
Bylo by hezké, kdyby se písmeno rovnou i vyslovilo.

A rovnou se přehrála i slavností famfára.

nechceš tam přidat parazitní formulář (mířený do nového okna) vedoucí na vyhledávač?
Super nápad! Přidal jsem do menu položku "Ověřit termín" - vyskočí prompt pro zadání termínu a po potvrzení se v novém okně vyhledá. V souvislosti s tím jsem se tedy rozhodl alert pro hlášky nechat - omlouvám se RockFireovi, halt nikdo není dokonalý :-)

Ohledně řazení - použil jsem trochu jiné řešení, ale s podobnou myšlenkou. Vytvořil jsem řadicí funkci, která projde pole se všemi písmenky (které už je seřazené) a kontroluje existenci písmenka v poli použitých písmenek.
uestla
Profil
Další úpravy:
- při zobrazení použitých písmen se v závorce zobrazuje, kolik jich ještě zbývá (včetně správného skloňování)
- zavedl jsem dvě proměnné uchovávající počet prvků v poli se všemi písmeny a v poli s použitými písmeny, a díky tomu:
- - je kontrola vyčerpání písmen rychlejší - porovnávají se obě proměnné
- - jsem mohl zcela odstranit žravou funkci je_podmnozina()

Nicméně stále jsem nevyřešil nefunkčnost ovládání mezerníkem v IE... Testoval jsem ve verzích 6, 7 i 8 a všude bezúspěšně :-(
joe
Profil
Možná je to pěkné, ale vážně zbytečné, navíc v Opeře 10 nefunkční. Po několikátém kliknutí to nefunguje a napíše, že byly použité všechny písmena, ale zobrazilo to celkem jen 3, zajímavé.

Nevím proč to odpočítává, vybrat náhodné písmenko z množiny abecedy (která se navíc každým kliknutím snižuje) určitě netrvá cca. 3 vteřiny.

Aby to mělo alespoň nějaký účel, bylo by dobré umožnit hrát hru přímo v prohlížeči (počítač by ale nesměl být připojen k internetu).

EDIT: a nelíbí se mi název, hru znám pod názvem "země, město" :-) ale to je detail
keeehi
Profil
joe:
A to hraní v prohlížeči by sis představoval jak? Jak mohou dva lidé zároveň psát na jedné klávesnici a jak udělat aby si navzájem z monitoru neopisovali? (pokud není počítač připojený k internetu, tak musí být oba u jednoho počítače, nebo hrát po síti.) Jestli myslíš hru proti počítači, potom nemá člověk šanci. Pokud by jsi počítači nastavil nějakou čekací dobu, pak si můžeš skoro házet kostkou.
uestla
Profil
joe
Opeře 10 nefunkční
V Opeře 9.64 (poslední stabilní verze) to nefunguje pokud tlačítka ovládáš Enterem. Když myší klikneš na tlačítko "další písmeno" ale neodklikneš a přejedeš myší mimo ně a upustíš, tlačítko se označí, čili jej lze pomocí Enteru zmáčknout. Když tak učiníš, tlačítko se sice skryje, ale pouze v Opeře (co jsem tak testoval v IE, FF, Opeře a Chromu) je i skryté tlačítko možné (pokud je aktivní) Enterem ovládat. Čili můžeš držet Enter a za chvíli máš vyčerpáno, dokonce se ve zmíněné verzi generátor zblázní a chrlí vybraná písmenka dokola - je to ale zbytečný problém; kdo chce aplikaci používat, bude ji používat tak, aby tento problém nevznikl.

vážně zbytečné
Co se týče zbytečnosti, primárně jsem aplikaci napsal pro sebe, aby se při příštích hrách ušetřil čas při stopnutí odříkávače na písmeni, které už padlo. Prostě je to takový pomocník, nikoho to používat nenutím.

Nevím proč to odpočítává
To je prosté, inu proto, aby se mohli hráči připravit a soustředit, a aby i ten, kdo ovládá aplikaci, mohl hrát s ostatními. Možná, že oplýváš nadlidskými reflexy a hbitostí ruky, že ti stačí kliknout a hned začít psát termíny na okamžitě zobrazené písmeno, já ovšem nikoli. Proto se odpočítává.

vybrat náhodné písmenko ... určitě netrvá cca. 3 vteřiny
Opravdu netrvá. Při ohledání kódu zjistíš, že písmenko se vybírá dokonce před startem odpočítávání.

nelíbí se mi název
Názvů pro tuhle hru znám více, někdy se přidává stát, rostlina, apod. Já ji halt znám klasicky pod použitým názvem :-)

// EDIT: Hru jsem do prohlížeče přenášet nechtěl, preferuji tužku a papír a hraní v okruhu přátel, aplikace má být pouze pomocníkem...
joe
Profil
keeehi
Asi tak, že na nějakém PC by se vybralo písmeno a pak každém na svém by psal ta slova na vybrané písmeno, ale když už, tak taky preferuju tužku a papír.

uestla
Jako pomocník to chápu, hodnotil jsem to prostě jako celek.

Opravdu netrvá.
Já vím, že ne :-)

Vím, názvů je hodně, každý to zná pod nějakým tím "svým".

„Opeře 10 nefunkční“
Zkusil jsem to znovu a stane se tak, pokud se omylem klikne na tlačítko dvakrát (holt když umí někdo rychle klikat).
uestla
Profil
joe
Původně jsem to (vlastně jen kvůli Opeře) chtěl vyřešit tak, že bych v úvodu vytvořil pomocí JS všechny skrývané a zobrazované elementy a pak je (místo nynějšího skrývání a zobrazování přes styly) připínal a odebíral do stromu dokumentu - tím pádem by už ani Opera neměla co potvrzovat Enterem. Neskutečně by se mi tím ale zhnusil kód a přidělaly další potíže, a to není záměrem :-)
joe
Profil
uestla
Já nikde nepsal, že jsem to testoval s Entrem ;)
uestla
Profil
joe
Já nikde nepsal, že jsem to testoval v Opeře 10 ;)

// EDIT:
Ano, uznávám, že reakce na tvůj komentář ([#15]) nebyla vhodná, doplním ji tedy:
Problém vícenásobně spuštěného odpočítávání jsem zkoušel řešit, leč neúspěšně. Idea byla taková, že by se vytvořila globální boolean proměnná s hodnotou true při spuštění odpočítávání - nechci to tu rozebírat slovně, zde je (zjednodušený) onen nefunkční kód:

// proměnná vně všech funkcí
var spusteno = false;

function odpocitavani()
{
    if (spusteno) return;
    spusteno = true;
    
    // telo funkce
    
    spusteno = false;
}


Možná byste mohli pomoci, jak problém vícerého spouštění řešit, nebo poradit s výše uvedeným kódem :-)
Předem díky!
uestla
Profil
Konečně se mi díky http://www.w3.org/2002/09/tests/keys-cancel2.html podařilo vyřešit problém s nefunkčním ovládáním pomocí mezerníku v Exploreru. Problém byl ten, že jsem událost onkeydown vázal na window, což asi Explorer nerozdýchá, nicméně document.onkeydown už zvládá :-) Mám radost!
uestla
Profil
Ku spokojenosti uživatelů Opery (především pak joeho) i ku spokojenosti mojí jsem upravil skrývání a odkrývání elementů. Elementy se zobrazují připsáním do .innerHTML těla stránky a skrývají se odepnutím ze stromu. Hra je také hratelná s vypnutými styly (ovšem velikost textu není hře nakloněna), neboť dříve skryté elementy nyní nejsou vůbec vidět - neexistují.

Tímto všem děkuji za konstruktivní kritiku a přeji hezký den!
JonyJouJouJunior
Profil *
A na konec dej Všechna písmena již byla použita. Ne Již byla použita všechna písmena.
Chamurappi
Profil
Reaguji na JonyJouJouJuniora:
Obě věty říkají totéž, ne?
Keeehi
Profil
JonyJouJouJunior:
Myslíš že se bude sem ještě po roce vracet a číst si tvůj příspěvek?
uestla
Profil
Keeehi:
Teď na to zírám jako zjara :-)

JonyJouJouJunior:
Navrhovaná věta má lepší slovosled, díky.

Ještě jsem mírně poupravil zobrazování použitých písmen - po více než roce! Huff :-)
linbor
Profil *
Ty alerty jsou fakt hrozné. Také by to chtělo více grafického cítění.
Ostatně, nějaký krásný nadpis se tam určitě vejde.
A vysvětlivka (alespoň kratičká) jakbysmet.
Ověřování termínu - lepší by bylo napsat slovo někam na stránku
do políčka, a tamtéž pod ním si přečíst i výsledek.
Ale řádně parsovaný. Např. Ajax + PHP.
A nabídnout skrytí webhostingové reklamy? Jen ji tam nechej, alespoň
trochu obsahu tam je..
TomášK
Profil
Počítání zbývajících písmen se mi nezdá. Po použítí 2 písmen mi bylo sděleno, že zbývá 24, což odpovídá anglické abecedě, přitom program pracuje s českou abecedou, která má 42 znaků.
jackob
Profil *
Pokud ještě žiješ, uestla, nechtěl bys přidat tlačítko pro smazání již použitých písmen? My hrajeme hru vesměs dokud nám nedojde papír, pak sečteme body a určíme vítěze, poté vymýšlíme nové kategorie a hrajeme od znovu.
Plus když už je tu téma s touto hrou, nemáte nějaké tipy na kategorie hledaných slov? My hrajeme např: Stát, město, moře, řeka, spisovatel, chem. prvek, automobilka, zelenina, ovoce, savec (pták, ryba...), film.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: