Autor | Zpráva | ||
---|---|---|---|
Mozkomor05 Profil |
Dobrý den, chtěl jsem naprogramovat hru šibenici s diakritikou, aby při kliknutí na písmeno A se ve slově tráva zobrazilo A i Á. Místo toho se mi v písmenech zobrazí Á zvlášť. Poradíte mi, jak mám udělat, aby se všechny tlačítka při kliknutí zobrazovaly i s diakritikou?
Kód zde: (Zatím jsem to zkoušel pouze s písmenem a) <?php $file_parole = 'slova.txt'; $alfabeto = array( 'A'=>'a', 'Á'=>'á', 'B'=>'b', 'C'=>'c', 'D'=>'d', 'E'=>'e', 'F'=>'f', 'G'=>'g', 'H'=>'h', 'I'=>'i', 'J'=>'j', 'K'=>'k', 'L'=>'l', 'M'=>'m', 'N'=>'n', 'O'=>'o', 'P'=>'p', 'Q'=>'q', 'R'=>'r', 'S'=>'s', 'T'=>'t', 'U'=>'u', 'V'=>'v', 'W'=>'w', 'X'=>'x', 'Y'=>'y', 'Z'=>'z'); session_start (); function ScegliParola ($file_parole) { $content = file ($file_parole); $numero_parole = (count ($content)-1); $posizione_parola = rand (0, ($numero_parole)); $linea = $content[$posizione_parola]; $parola = rtrim ($linea); return ($parola); } function CalcolaIndovinata ($parola, $escludi, $alfabeto) { $alfabeto = array_flip ($alfabeto); $escluse = strtr ($escludi, $alfabeto); $escluse = '['.$escluse.']'; $escluse = ereg_replace ($escluse, '', '[AÁBCDEFGHIJKLMNOPQRSTUVWXYZ]'); $indovinata = ereg_replace ($escluse, '_', $parola); return $indovinata; } function TrovaLettera ($lettera, $parola, $scelte, $alfabeto) { $alfabeto = array_flip ($alfabeto); $lettera = strtr ($lettera, $alfabeto); $scelte.= $lettera; if (ereg ($lettera, $parola)) { $controllo = true; } else { $controllo = false; } $risposta = array ($scelte, $controllo); return $risposta; } if (isset($_GET['letter']) and isset($_SESSION['gchangman'])) { $variab = explode ('/', $_SESSION['gchangman']); $indovina = $variab[0]; $scelte = $variab[1]; $tentativi = $variab[2]; $checklet = TrovaLettera ($_GET['letter'], $indovina, $scelte, $alfabeto); $scelte = $checklet[0]; if (!$checklet[1]) { $tentativi = $tentativi +1; } $indovinata = CalcolaIndovinata ($indovina, $scelte, $alfabeto); } else { $tentativi=0; $scelte = ('_'); $indovina = ScegliParola ($file_parole); $indovinata = CalcolaIndovinata ($indovina, $scelte, $alfabeto); } $_SESSION['gchangman'] = ($indovina.'/'.$scelte.'/'.$tentativi); ?> <!DOCTYPE> <html> <head> <title>Šibenice</title> </head> <body> <?php print ('<img src="images/sibenice/hang_'.($tentativi+1).'.gif" border="0" width="100" height="100" title="Špatně '.$tentativi.'/6"><br><br>'); $caratteri = preg_split('//', $indovinata, -1, PREG_SPLIT_NO_EMPTY); foreach ($caratteri as $lettalf) { $lettalf = strtr ($lettalf, $alfabeto); if ($lettalf==' ') { print (' '); } else { print ('<span style="font-size:30;text-transform:uppercase;">'.$lettalf.'</span>'); } print (' '); } print ('<br><br>'); if ($indovina!=$indovinata) { if ($tentativi>=6) { print ('<span style="color:red;">Bohužel jste vyplýtvali všechny pokusy. Správné slovo je: '.$indovina.'</span>'); } else { $scelt = preg_split('//', $scelte, -1, PREG_SPLIT_NO_EMPTY); print ('<br>'); foreach ($alfabeto as $lettalf) { $contrl = false; foreach ($scelt as $lett) { if (!strcasecmp ($lettalf, $lett)) { $contrl = true; } } if ($contrl) { print ('<span style="font-size:30;color:red;text-decoration:none;text-transform:uppercase;">'.$lettalf.' </span>'); } else { print ('<a HREF="sibenice.php?letter='.$lettalf.'"style="text-decoration:none;"><span style="font-size:30;text-transform:uppercase;color:black;">'.$lettalf.' </span></a>'); } if ($lettalf=='m') { print ('<br>'); } } } } else { print ('<span style="color:green;">Blahopřeji, našli jste správné slovo</style>'); } ?> <br> <p><?php print ('<A HREF="sibenice.php">'); ?>Nová hra</a></p> </body> </html> |
||
Keeehi Profil |
#2 · Zasláno: 27. 8. 2016, 09:35:49
Udělej prosím něco s tou obfuskací italštinou. Přelož to prosím buď do češtiny, nebo lépe do angličtiny.
|
||
Mozkomor05 Profil |
#3 · Zasláno: 27. 8. 2016, 10:09:14
<?php $soubor_slova = 'slova.txt'; $abeceda = array( 'A'=>'a', 'Á'=>'á', 'B'=>'b', 'C'=>'c', 'D'=>'d', 'E'=>'e', 'F'=>'f', 'G'=>'g', 'H'=>'h', 'I'=>'i', 'J'=>'j', 'K'=>'k', 'L'=>'l', 'M'=>'m', 'N'=>'n', 'O'=>'o', 'P'=>'p', 'Q'=>'q', 'R'=>'r', 'S'=>'s', 'T'=>'t', 'U'=>'u', 'V'=>'v', 'W'=>'w', 'X'=>'x', 'Y'=>'y', 'Z'=>'z'); session_start (); function VybratSlovo ($soubor_slova) { $obsah = file ($soubor_slova); $cislo_slova = (count ($obsah)-1); $umisteni_slova = rand (0, ($cislo_slova)); $radek = $obsah[$umisteni_slova]; $slovo = rtrim ($radek); return ($slovo); } function VypocetHadani ($slovo, $vyloucit, $abeceda) { $abeceda = array_flip ($abeceda); $vylouceno = strtr ($vyloucit, $abeceda); $vylouceno = '['.$vylouceno.']'; $vylouceno = ereg_replace ($vylouceno, '', '[AÁBCDEFGHIJKLMNOPQRSTUVWXYZ]'); $hadal = ereg_replace ($vylouceno, '_', $slovo); return $hadal; } function NajitPismeno ($pismeno, $slovo, $volba, $abeceda) { $abeceda = array_flip ($abeceda); $pismeno = strtr ($pismeno, $abeceda); $volba.= $pismeno; if (ereg ($pismeno, $slovo)) { $ovladani = true; } else { $ovladani = false; } $odpoved = array ($volba, $ovladani); return $odpoved; } if (isset($_GET['letter']) and isset($_SESSION['gchangman'])) { $variab = explode ('/', $_SESSION['gchangman']); $odhallit = $variab[0]; $volba = $variab[1]; $pokusy = $variab[2]; $kontrola = NajitPismeno ($_GET['letter'], $odhallit, $volba, $abeceda); $volba = $kontrola[0]; if (!$kontrola[1]) { $pokusy = $pokusy +1; } $hadal = VypocetHadani ($odhallit, $volba, $abeceda); } else { $pokusy=0; $volba = ('_'); $odhallit = VybratSlovo ($soubor_slova); $hadal = VypocetHadani ($odhallit, $volba, $abeceda); } $_SESSION['gchangman'] = ($odhallit.'/'.$volba.'/'.$pokusy); ?> <!DOCTYPE> <html> <head> <title>Šibenice</title> </head> <body> <?php print ('<img src="images/sibenice/hang_'.($pokusy+1).'.gif" border="0" width="100" height="100" title="Špatně '.$pokusy.'/6"><br><br>'); $znaky = preg_split('//', $hadal, -1, PREG_SPLIT_NO_EMPTY); foreach ($znaky as $pisvabc) { $pisvabc = strtr ($pisvabc, $abeceda); if ($pisvabc==' ') { print (' '); } else { print ('<span style="font-size:30;text-transform:uppercase;">'.$pisvabc.'</span>'); } print (' '); } print ('<br><br>'); if ($odhallit!=$hadal) { if ($pokusy>=6) { print ('<span style="color:red;">Bohužel jste vyplýtvali všechny pokusy. Správné slovo je: '.$odhallit.'</span>'); } else { $vyber = preg_split('//', $volba, -1, PREG_SPLIT_NO_EMPTY); print ('<br>'); foreach ($abeceda as $pisvabc) { $contrl = false; foreach ($vyber as $lett) { if (!strcasecmp ($pisvabc, $lett)) { $contrl = true; } } if ($contrl) { print ('<span style="font-size:30;color:red;text-decoration:none;text-transform:uppercase;">'.$pisvabc.' </span>'); } else { print ('<a HREF="sibenice.php?letter='.$pisvabc.'"style="text-decoration:none;"><span style="font-size:30;text-transform:uppercase;color:black;">'.$pisvabc.' </span></a>'); } if ($pisvabc=='m') { print ('<br>'); } } } } else { print ('<span style="color:green;">Blahopřeji, našli jste správné slovo</style>'); } ?> <br> <p><?php print ('<A HREF="sibenice.php">'); ?>Nová hra</a></p> </body> </html> |
||
Martin2 Profil * |
#4 · Zasláno: 27. 8. 2016, 11:11:35
Spolehlivá transliterace do ASCII je ošemetná věc, především nad celou hlavní UTF-8 abecedou. Určitě bych sáhl po hotovém řešení. Třeba v Nette\Utils\Strings
|
||
Mozkomor05 Profil |
#5 · Zasláno: 27. 8. 2016, 13:17:53
Nechápu jak to myslíš to co jsem potřeboval jsem tam nenašel
|
||
Keeehi Profil |
#6 · Zasláno: 27. 8. 2016, 15:07:17
Mozkomor05:
Tak jsem si to zkusil a zajímavé je, že třeba u e to na diakritiku nekouká. Jinak je to dost starý kód, funkce ereg_replace() je od PHP 5.3 označená za zastaralou a v PHP 7 je už odstaněná.
Takže jsem to vzal a rovnou to celé přepsal. <?php session_start (); $wordsFile = 'slova.txt'; $alphabet = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); function toAscii($s) { $transliterator = NULL; if (class_exists('Transliterator', FALSE)) { $transliterator = Transliterator::create('Any-Latin; Latin-ASCII'); } $s = preg_replace('#[^\x09\x0A\x0D\x20-\x7E\xA0-\x{2FF}\x{370}-\x{10FFFF}]#u', '', $s); $s = strtr($s, '`\'"^~?', "\x01\x02\x03\x04\x05\x06"); $s = str_replace( array("\xE2\x80\x9E", "\xE2\x80\x9C", "\xE2\x80\x9D", "\xE2\x80\x9A", "\xE2\x80\x98", "\xE2\x80\x99", "\xC2\xB0"), array("\x03", "\x03", "\x03", "\x02", "\x02", "\x02", "\x04"), $s ); if ($transliterator !== NULL) { $s = $transliterator->transliterate($s); } if (ICONV_IMPL === 'glibc') { $s = str_replace( array("\xC2\xBB", "\xC2\xAB", "\xE2\x80\xA6", "\xE2\x84\xA2", "\xC2\xA9", "\xC2\xAE"), array('>>', '<<', '...', 'TM', '(c)', '(R)'), $s ); $s = @iconv('UTF-8', 'WINDOWS-1250//TRANSLIT//IGNORE', $s); // intentionally @ $s = strtr($s, "\xa5\xa3\xbc\x8c\xa7\x8a\xaa\x8d\x8f\x8e\xaf\xb9\xb3\xbe\x9c\x9a\xba\x9d\x9f\x9e" . "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3" . "\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8" . "\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf8\xf9\xfa\xfb\xfc\xfd\xfe" . "\x96\xa0\x8b\x97\x9b\xa6\xad\xb7", 'ALLSSSSTZZZallssstzzzRAAAALCCCEEEEIIDDNNOOOOxRUUUUYTsraaaalccceeeeiiddnnooooruuuuyt- <->|-.'); $s = preg_replace('#[^\x00-\x7F]++#', '', $s); } else { $s = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $s); // intentionally @ } $s = str_replace(array('`', "'", '"', '^', '~', '?'), '', $s); return strtr($s, "\x01\x02\x03\x04\x05\x06", '`\'"^~?'); } function getRandomWord($file) { $words = file($file); $wordIndex = rand (0, count($words) - 1); return trim($words[$wordIndex]); } function hideUnknown($word, $known) { $known = strtolower($known); $wordAsLetters = preg_split('//u', $word, -1, PREG_SPLIT_NO_EMPTY); $wordLength = count($wordAsLetters); $result = ''; for ( $i = 0 ; $i < $wordLength ; $i++ ) { if (strpos($known, strtolower(toAscii($wordAsLetters[$i]))) === FALSE) { $result .= '_'; } else { $result .= $wordAsLetters[$i]; } } return $result; } function numberOfWrongGuesses($word, $known) { return strlen(preg_replace('/['.preg_quote(strtolower(toAscii($word)), '/').']/', '', strtolower($known))); } if (isset($_SESSION['gchangman'])) { $word = $_SESSION['gchangman']['word']; $guessedLetters = $_SESSION['gchangman']['guessedLetters']; } else { $word = $_SESSION['gchangman']['word'] = getRandomWord($wordsFile); $guessedLetters = $_SESSION['gchangman']['guessedLetters'] = ''; } if (isset($_GET['letter'])) { $guessedLetter = substr(strtolower(toAscii($_GET['letter'])), 0, 1); if (strpos($guessedLetters, $guessedLetter) === FALSE) { $_SESSION['gchangman']['guessedLetters'] = $guessedLetters .= $guessedLetter; } } else { $word = $_SESSION['gchangman']['word'] = getRandomWord($wordsFile); $guessedLetters = $_SESSION['gchangman']['guessedLetters'] = ''; } $wrongGuesses = numberOfWrongGuesses($word, $guessedLetters); $hiddenWord = hideUnknown($word, $guessedLetters); ?> <!DOCTYPE> <html> <head> <title>Šibenice</title> <style> .green { color: green; } .red { color: red; } .big { font-size: 30px; } .letters a { text-decoration: none; } .letters span { color: red; } a:visited { color: blue; } </style> </head> <body> <img src="images/sibenice/hang_<?php echo $wrongGuesses + 1; ?>.gif" border="0" width="100" height="100" title="Špatně <?php echo $wrongGuesses; ?>/6"><br> <br> <span class="big">Slovo: <?php echo $hiddenWord; ?></span><br> <span class="big">Hádané: <?php echo implode(' ', str_split(strtoupper($guessedLetters))); ?></span><br> <br> <?php if ($hiddenWord === $word) { echo "<span class=\"green\">Blahopřeji, našli jste správné slovo. ($word)</style>"; } elseif ( $wrongGuesses >= 6 ) { echo "<span class=\"red\">Bohužel jste vyplýtvali všechny pokusy. Hledané slovo bylo: $word</span>"; } else { echo "<span class=\"letters big\">\n"; foreach ($alphabet as $letter) { if (strpos($guessedLetters, $letter) === FALSE) { echo '<a href="sibenice.php?letter='.$letter.'">'.strtoupper($letter).'</a>'.($letter !== 'm' ? ' ' : '<br>')."\n"; } else { echo '<span>'.strtoupper($letter).'</span>'.($letter !== 'm' ? ' ' : '<br>')."\n"; } } echo '</span>'; } ?> <br> <p><a href="sibenice.php">Nová hra</a></p> </body> </html> |
||
Mozkomor05 Profil |
Díky a neporadil by jsi mi i v javascriptu? Odkaz na vlákno zde: Hra šibenice s diakritikou
|
||
Časová prodleva: 8 let
|
0