You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
361 lines
8.8 KiB
361 lines
8.8 KiB
12 years ago
|
<?php // $Id: exporthtml_hangman.php,v 1.10 2012/07/25 11:16:03 bdaloukas Exp $
|
||
|
/**
|
||
|
* This page export the game hangman to html
|
||
|
*
|
||
|
* @author bdaloukas
|
||
|
* @version $Id: exporthtml_hangman.php,v 1.10 2012/07/25 11:16:03 bdaloukas Exp $
|
||
|
* @package game
|
||
|
**/
|
||
|
|
||
|
?>
|
||
|
<script type="text/javascript">
|
||
|
|
||
|
// Hangman for Moodle by Vasilis Daloukas
|
||
|
// The script is based on HangMan II script- By Chris Fortey (http://www.c-g-f.net/)
|
||
|
|
||
|
var can_play = true;
|
||
|
<?php
|
||
|
$destdir = game_export_createtempdir();
|
||
|
|
||
|
$export_attachment = ( $html->type == 'hangmanp');
|
||
|
$map = game_exmportjavame_getanswers( $game, $context, $export_attachment, $destdir, $files);
|
||
|
if( $map == false){
|
||
|
print_error( 'No Questions');
|
||
|
}
|
||
|
|
||
|
$questions = '';
|
||
|
$words = '';
|
||
|
$lang = '';
|
||
|
$allletters = '';
|
||
|
$images = '';
|
||
|
foreach( $map as $line)
|
||
|
{
|
||
|
$answer = game_upper( $line->answer);
|
||
|
if( $game->param7){
|
||
|
//Have to delete space
|
||
|
$answer = str_replace(' ', '', $answer);
|
||
|
}
|
||
|
if( $game->param8){
|
||
|
//Have to delete -
|
||
|
$answer = str_replace('-', '', $answer);
|
||
|
}
|
||
|
|
||
|
if( $lang == ''){
|
||
|
$lang = $game->language;
|
||
|
|
||
|
if( $lang == '')
|
||
|
$lang = game_detectlanguage( $answer);
|
||
|
if( $lang == '')
|
||
|
$lang = current_language();
|
||
|
$allletters = game_getallletters( $answer, $lang);
|
||
|
}
|
||
|
|
||
|
if( game_getallletters( $answer, $lang) != $allletters)
|
||
|
continue;
|
||
|
|
||
|
if( $html->type == 'hangmanp'){
|
||
|
$file = $line->attachment;
|
||
|
$pos = strrpos( $file, '.');
|
||
|
if( $pos == false)
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if( $html->type == 'hangmanp'){
|
||
|
$src = $line->attachment;
|
||
|
$pos = strrpos( $file, '.');
|
||
|
if( $pos == false)
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if( $questions != '')
|
||
|
$questions .= ', ';
|
||
|
if( $words != '')
|
||
|
$words .= ', ';
|
||
|
$questions .= '"'.base64_encode( $line->question).'"';
|
||
|
$words .= '"'.base64_encode( $line->answer).'"';
|
||
|
|
||
|
if( $html->type == 'hangmanp'){
|
||
|
$file = $line->id.substr( $file, $pos);
|
||
|
game_export_javame_smartcopyimage( $src, $destdir.'/'.$file, $html->maxpicturewidth, $html->maxpictureheight);
|
||
|
|
||
|
if( $images != '')
|
||
|
$images .= ', ';
|
||
|
$images .= '"'.$file.'"';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if($game->param7){
|
||
|
$allletters .= '_';
|
||
|
}
|
||
|
if($game->param8){
|
||
|
$allletters .= '-';
|
||
|
}
|
||
|
|
||
|
echo "var questions = new Array($questions);\r";
|
||
|
echo "var words = new Array($words);\r";
|
||
|
if( $html->type == 'hangmanp')
|
||
|
echo "var images = new Array($images);\r";
|
||
|
?>
|
||
|
|
||
|
var to_guess = "";
|
||
|
var display_word = "";
|
||
|
var used_letters = "";
|
||
|
var wrong_guesses = 0;
|
||
|
var used_letters_all = "";
|
||
|
var all_letters = new Array(<?php
|
||
|
$len = textlib::strlen( $allletters);
|
||
|
for( $i=0; $i < $len; $i++)
|
||
|
{
|
||
|
if( $i > 0)
|
||
|
echo ',';
|
||
|
echo '"'.textlib::substr( $allletters, $i, 1).'"';
|
||
|
}
|
||
|
?>);
|
||
|
|
||
|
function selectLetter(l)
|
||
|
{
|
||
|
if (can_play == false)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
if (used_letters.indexOf(l) != -1)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
used_letters_all += l;
|
||
|
|
||
|
if( to_guess.indexOf(l) == -1)
|
||
|
{
|
||
|
used_letters += l;
|
||
|
document.getElementById('usedLetters').innerHTML = used_letters;
|
||
|
}
|
||
|
|
||
|
if (to_guess.indexOf(l) != -1)
|
||
|
{
|
||
|
// correct letter guess
|
||
|
pos = 0;
|
||
|
temp_mask = display_word;
|
||
|
|
||
|
while (to_guess.indexOf(l, pos) != -1)
|
||
|
{
|
||
|
pos = to_guess.indexOf(l, pos);
|
||
|
end = pos + 1;
|
||
|
|
||
|
start_text = temp_mask.substring(0, pos);
|
||
|
end_text = temp_mask.substring(end, temp_mask.length);
|
||
|
|
||
|
temp_mask = start_text + l + end_text;
|
||
|
pos = end;
|
||
|
}
|
||
|
|
||
|
display_word = temp_mask;
|
||
|
document.getElementById('displayWord').innerHTML=display_word;
|
||
|
|
||
|
if (display_word.indexOf("#") == -1)
|
||
|
{
|
||
|
// won
|
||
|
alert( "<?php echo game_get_string_lang( 'win', 'game', $lang); ?>");
|
||
|
can_play = false;
|
||
|
reset();
|
||
|
}
|
||
|
}else
|
||
|
{
|
||
|
wrong_guesses++;
|
||
|
<?php
|
||
|
if( $html->type != 'hangmanp'){
|
||
|
?>eval("document.hm.src=\"hangman_" + wrong_guesses + ".jpg\"");
|
||
|
// incortect letter guess
|
||
|
eval("document.hm.src=\"hangman_" + wrong_guesses + ".jpg\"");
|
||
|
<?php
|
||
|
}
|
||
|
?>
|
||
|
if (wrong_guesses == <?php echo $game->param10 + 1;?>)
|
||
|
{
|
||
|
// lost
|
||
|
alert( "<?php echo strip_tags( game_get_string_lang( 'hangman_loose', 'game', $lang)); ?>");
|
||
|
can_play = false;
|
||
|
reset();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
showallletters();
|
||
|
}
|
||
|
|
||
|
function stripHTML(oldString) {
|
||
|
|
||
|
return oldString.replace(/<[^>]*>/g, "");
|
||
|
|
||
|
}
|
||
|
|
||
|
function reset()
|
||
|
{
|
||
|
selectWord();
|
||
|
|
||
|
document.getElementById('usedLetters').innerHTML = " ";
|
||
|
used_letters = "";
|
||
|
used_letters_all = "";
|
||
|
wrong_guesses = 0;
|
||
|
showallletters();
|
||
|
<?php
|
||
|
if( $html->type != 'hangmanp'){
|
||
|
echo ' document.hm.src="hangman_0.jpg"'."\r";
|
||
|
}
|
||
|
?>
|
||
|
}
|
||
|
|
||
|
function showallletters()
|
||
|
{
|
||
|
var letters = "";
|
||
|
var next = all_letters.length / 4;
|
||
|
var letter = "";
|
||
|
|
||
|
for( i=0; i < all_letters.length; i++)
|
||
|
{
|
||
|
if( i > next)
|
||
|
{
|
||
|
next += all_letters.length / 4;
|
||
|
letters += " ";
|
||
|
}
|
||
|
|
||
|
letter = all_letters[ i];
|
||
|
if( used_letters_all.length > 0)
|
||
|
{
|
||
|
if( used_letters_all.indexOf( letter) > -1)
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
letters = letters + "<a href=\"javascript:selectLetter('" + letter + "');\">" + letter + "</a>"
|
||
|
}
|
||
|
document.getElementById( "letters").innerHTML = letters;
|
||
|
}
|
||
|
|
||
|
function selectWord()
|
||
|
{
|
||
|
can_play = true;
|
||
|
random_number = Math.round(Math.random() * (words.length - 1));
|
||
|
to_guess = Base64.decode( words[random_number]);
|
||
|
to_question = Base64.decode( questions[random_number]);
|
||
|
|
||
|
// display masked word
|
||
|
masked_word = createMask(to_guess);
|
||
|
document.getElementById('displayWord').innerHTML=masked_word;
|
||
|
|
||
|
display_word = masked_word;
|
||
|
|
||
|
<?php
|
||
|
if( $html->type == 'hangmanp')
|
||
|
echo " document.hm.src = images[ random_number];\r";
|
||
|
else
|
||
|
echo " document.getElementById('question').innerHTML=to_question;\r";
|
||
|
?>
|
||
|
}
|
||
|
|
||
|
function createMask(m)
|
||
|
{
|
||
|
mask = "";
|
||
|
word_lenght = m.length;
|
||
|
|
||
|
|
||
|
for (i = 0; i < word_lenght; i ++)
|
||
|
{
|
||
|
mask += "#";
|
||
|
}
|
||
|
|
||
|
return mask;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
* Base64 encode / decode
|
||
|
* http://www.webtoolkit.info/
|
||
|
*
|
||
|
**/
|
||
|
|
||
|
var Base64 = {
|
||
|
|
||
|
// private property
|
||
|
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||
|
|
||
|
// public method for decoding
|
||
|
decode : function (input) {
|
||
|
var output = "";
|
||
|
var chr1, chr2, chr3;
|
||
|
var enc1, enc2, enc3, enc4;
|
||
|
var i = 0;
|
||
|
|
||
|
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
||
|
|
||
|
while (i < input.length) {
|
||
|
|
||
|
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
||
|
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
||
|
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
||
|
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
||
|
|
||
|
chr1 = (enc1 << 2) | (enc2 >> 4);
|
||
|
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||
|
chr3 = ((enc3 & 3) << 6) | enc4;
|
||
|
|
||
|
output = output + String.fromCharCode(chr1);
|
||
|
|
||
|
if (enc3 != 64) {
|
||
|
output = output + String.fromCharCode(chr2);
|
||
|
}
|
||
|
if (enc4 != 64) {
|
||
|
output = output + String.fromCharCode(chr3);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
output = Base64._utf8_decode(output);
|
||
|
|
||
|
return output;
|
||
|
|
||
|
},
|
||
|
|
||
|
// private method for UTF-8 decoding
|
||
|
_utf8_decode : function (utftext) {
|
||
|
var string = "";
|
||
|
var i = 0;
|
||
|
var c = c1 = c2 = 0;
|
||
|
|
||
|
while ( i < utftext.length ) {
|
||
|
|
||
|
c = utftext.charCodeAt(i);
|
||
|
|
||
|
if (c < 128) {
|
||
|
string += String.fromCharCode(c);
|
||
|
i++;
|
||
|
}
|
||
|
else if((c > 191) && (c < 224)) {
|
||
|
c2 = utftext.charCodeAt(i+1);
|
||
|
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
||
|
i += 2;
|
||
|
}
|
||
|
else {
|
||
|
c2 = utftext.charCodeAt(i+1);
|
||
|
c3 = utftext.charCodeAt(i+2);
|
||
|
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
||
|
i += 3;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
return string;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
</script>
|
||
|
</head>
|
||
|
|
||
|
<div id="question"></div>
|
||
|
<img src="<?php echo ($html->type == 'hangmanp' ? '' : 'hangman_0.jpg');?>" name="hm"> <a href="javascript:reset();"><?php echo game_get_string_lang( 'html_hangman_new', 'game', $lang); ?></a>
|
||
|
<form name="game">
|
||
|
<div id="displayWord"> </div>
|
||
|
<div id="usedLetters"> </div>
|
||
|
</form>
|
||
|
<div id="letters"></div>
|
||
|
|
||
|
</body>
|
||
|
|