.
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see .
/**
* This files plays the game "Crossword".
*
* @package mod_game
* @copyright 2007 Vasilis Daloukas
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
require( "cross_class.php");
require( "crossdb_class.php");
/**
* Plays the game crossword.
*
* @param int $id
* @param stdClass $game
* @param stdClass $attempt
* @param stdClass $cross
* @param string $g
* @param boolean $endofgame
* param stdClass $context
*/
function game_cross_continue( $id, $game, $attempt, $cross, $g, $endofgame, $context) {
if ($endofgame) {
if ($g == '') {
game_updateattempts( $game, $attempt, -1, true);
$endofgame = false;
}
}
if ($attempt != false and $cross != false) {
return game_cross_play( $id, $game, $attempt, $cross, $g, false, false, $endofgame,
false, false, false, false, true, $context);
}
if ($attempt == false) {
$attempt = game_addattempt( $game);
}
game_cross_new( $game, $attempt->id, $crossm);
game_updateattempts( $game, $attempt, 0, 0);
return game_cross_play( $id, $game, $attempt, $crossm, '', false, false, false, false, false, false, false, true, $context);
}
/**
* Creates a new cross.
*
* @param stdClass $game
* @param int $attemptid
* @param stdClass $crossm
*/
function game_cross_new( $game, $attemptid, &$crossm) {
global $DB, $USER;
$cross = new CrossDB();
$questions = array();
$infos = array();
$answers = array();
$recs = game_questions_shortanswer( $game);
if ($recs == false) {
print_error( 'game_cross_continue: '.get_string( 'no_words', 'game'));
}
$infos = array();
$reps = array();
foreach ($recs as $rec) {
if ($game->param7 == false) {
if (game_strpos( $rec->answertext, ' ')) {
continue; // Spaces not allowed.
}
}
$rec->answertext = game_upper( $rec->answertext);
$answers[ $rec->answertext] = game_repairquestion( $rec->questiontext);
$infos[ $rec->answertext] = array( $game->sourcemodule, $rec->questionid, $rec->glossaryentryid, $rec->attachment);
$a = array( 'gameid' => $game->id, 'userid' => $USER->id,
'questionid' => $rec->questionid, 'glossaryentryid' => $rec->glossaryentryid);
if (($rec2 = $DB->get_record('game_repetitions', $a, 'id,repetitions AS r')) != false) {
$reps[ $rec->answertext] = $rec2->r;
}
}
$cross->setwords( $answers, $game->param1, $reps);
// The game->param4 is minimum words in crossword.
// The game->param2 is maximum words in crossword.
if ($cross->computedata( $crossm, $crossd, $lettets, $game->param4, $game->param2, $game->param8)) {
$newcrossd = array();
foreach ($crossd as $rec) {
$info = $infos[ $rec->answertext];
if ($info != false) {
$rec->sourcemodule = $info[ 0];
$rec->questionid = $info[ 1];
$rec->glossaryentryid = $info[ 2];
$rec->attachment = $info[ 3];
}
$newcrossd[] = $rec;
}
$cross->savecross( $game, $crossm, $newcrossd, $attemptid);
}
if (count( $crossd) == 0) {
print_error( 'game_cross_continue: '.get_string( 'no_words', 'game').$game->id);
}
}
/**
* Shows the legend.
*
* @param array $legend
* @param string $title
*/
function showlegend( $legend, $title) {
if (count( $legend) == 0) {
return;
}
echo "$title ";
foreach ($legend as $key => $line) {
$line = game_repairquestion( $line);
echo game_filtertext( "$key: $line ", 0);
}
}
/**
* Plays the game crossword.
*
* @param int $id
* @param stdClass $game
* @param stdClass $attempt
* @param stdClass $crossrec
* @param string $g
* @param boolean $onlyshow
* @param boolean $showsolution
* @param boolean $endofgame
* @param boolean $print
* @param boolean $checkbutton
* @param boolean $showhtmlsolutions
* @param boolean $showhtmlprintbutton
* @param boolean $showstudentguess
* @param stdClass $context
*/
function game_cross_play( $id, $game, $attempt, $crossrec, $g, $onlyshow, $showsolution,
$endofgame, $print, $checkbutton, $showhtmlsolutions, $showhtmlprintbutton, $showstudentguess, $context) {
global $CFG, $DB;
$cross = new CrossDB();
$language = $attempt->language;
$info = $cross->loadcross( $g, $done, $html, $game, $attempt, $crossrec, $onlyshow,
$showsolution, $endofgame, $showhtmlsolutions, $attempt->language,
$showstudentguess, $context);
if ($language != $attempt->language) {
if (!$DB->set_field( 'game_attempts', 'language', $attempt->language, array( 'id' => $attempt->id))) {
print_error( "game_cross_play: Can't set language");
}
}
if ($done or $endofgame) {
if (! $cm = $DB->get_record( 'course_modules', array( 'id' => $id))) {
print_error("Course Module ID was incorrect id=$id");
}
if ($endofgame == false) {
echo ''.get_string( 'win', 'game').' ';
}
if (game_can_start_new_attempt( $game)) {
echo ' ';
echo "wwwroot}/mod/game/attempt.php?id=$id&forcenew=1\">".
get_string( 'nextgame', 'game').' ';
}
} else if ($info != '') {
if ($print === false) {
echo " $info ";
}
}
if ($attempt->language != '') {
$wordrtl = game_right_to_left( $attempt->language);
} else {
$wordrtl = right_to_left();
}
$reverseprint = ($wordrtl != right_to_left());
if ($reverseprint) {
$textdir = 'dir="'.($wordrtl ? 'rtl' : 'ltr').'"';
} else {
$textdir = '';
}
?>
';
} else {
echo '
';
}
if ($game->toptext != '') {
echo $game->toptext.' ';
}
?>
This interactive crossword puzzle requires JavaScript and a reasonably recent web browser, such as Internet Explorer 5.5
or later, Netscape 7, Mozilla, Firefox, or Safari. If you have disabled web page scripting, please re-enable it and refresh
the page.
param3 == 2) {
echo "\r\n";
game_cross_show_welcome( $game);
echo " \r\n";
echo "  \r\n";
}
?>
param3 == 2) {
echo '      ';
game_cross_show_legends( $cross);
} else {
game_cross_show_welcome( $game);
}
?>
';
echo ''.
get_string( 'cross_checkbutton', 'game');
echo ' ';
echo ' '.
get_string( 'cross_endofgamebutton', 'game');
echo ' ';
if ($game->param5 == 1 or $game->param5 == null) {
echo ' '.get_string( 'print', 'game');
echo ' ';
}
echo "\r\n";
}
if ($showhtmlsolutions or $showhtmlprintbutton) {
echo ' ';
}
if ($showhtmlsolutions) {
echo ''.get_string( 'cross_checkbutton', 'game');
echo ' ';
}
if ($showhtmlprintbutton) {
if ($showhtmlsolutions) {
echo " ";
}
echo ''.get_string( 'print', 'game');
echo ' ';
}
if ($game->param3 == 2) {
echo '      ';
game_cross_show_welcome( $game);
} else {
game_cross_show_legends( $cross);
}
if ($game->bottomtext != '') {
echo ' '.$game->bottomtext;
}
if ($attempt != false) {
if ($attempt->timefinish == 0 and $endofgame == 0) {
?>
param3 <> 2) {
game_cross_show_welcome0( $game);
} else {
game_cross_show_welcome1();
}
}
/**
* Shows welcome message0.
*
* @param stdClass $game
*/
function game_cross_show_welcome0( $game) {
?>
param6 == 0) {
echo 'text-transform:uppercase;';
}
echo '"';
?>
onkeypress="WordEntryKeyPress(event)" onchange="WordEntryKeyPress(event)" autocomplete="off">
param3 == 2) {
game_cross_show_welcome( $game);
}
?>
 
mlegendh, get_string( 'cross_across', 'game'));
ShowLegend( $cross->mlegendv, get_string( 'cross_down', 'game'));
}