| 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: 9 let
|
|||
0