Вот код обработчика:
Спойлер (Отобразить)
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <!DOCTYPE html>
- <html>
- <head>
- <title>Word Find</title>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- </head>
- <body>
- <?
- //поиск слов
- //Генерирует головоломку для поиска слов на основе списка слов
- //введенных пользователем
- //пользователь также может задать размер головоломки
- $wordList = $_POST['wordList'];
- $width = $_POST['width'];
- $height = $_POST['height'];
- $name = $_POST['name'];
- //create
- //пытаемся получить список слов из полученных данных
- if (parseList($word, $wordList, $boardData)==TRUE){
- $legalBoard = FALSE;
- //продолжаем пытаться построить поле до удачного результата
- while ($legalBoard == FALSE){
- clearBoard($boardData, $board);
- $legalBoard = fillBoard();
- }//end while
- //создаем решение
- $key = $board;
- $keyPuzzle = makeboard($key);
- //создаем окончательную головоломку
- addFoils();
- $puzzle=makeBoard($board);
- //выводит страницу результатов
- printPuzzle();
- }//if для проанализированного списка
- }//if для проверки существоввания списка
- function parseList(){
- global $word, $wordList, $boardData;
- //получает список слов, создает из него массив или возвращает false если это невозможно
- $itWorked = TRUE;
- //переведем весь список слов
- //разделим список слов на массив
- foreach ($word as $currentWord){
- //уберем хвостовые символы новой строки
- //остановимся если какое то из слов слишком длинное для головоломки
- print "$currentWord is too long for puzzle";
- $itWorked = FALSE;
- }//if
- }//foreach
- return $itWorked;
- }//parseList
- function clearBoard(){
- //создадим поле с точкой (.) в каждой ячейке
- global $boardData,$board;
- for ($row=0;$row<$boardData['height'];$row++){
- for ($col=0;$col<$boardData['width'];$col++){
- $board[$row][$col] = ".";
- }
- }
- }
- function fillBoard(){
- //заполнить поле вызывая функцию аддворд для каждого слова списка или вернуть фолс в случе неудачи
- global $word;
- $itWorked = TRUE;
- $counter = 0;
- $keepGoing = TRUE;
- while($keepGoing){
- $result = addWord($word[$counter],$direction[$dir]);
- if ($result==FALSE){
- //print "failed top place $word[$counter]";
- $keepGoing=FALSE;
- $itWorked=FALSE;
- }//end if
- $counter++;
- $keepGoing=FALSE;
- }//end if
- }
- }//fillBoard
- function addWord($theWord,$dir){
- //попытаемся добавить слово на поле или вернем false если попытка неудалась
- global $board, $boardData;
- //удалим замыкающиеся символы
- $itWorked=TRUE;
- switch ($dir){
- case "E":
- //колонки от 0 до ширины поля-ширина слова
- //строки от 0 до высоты поля
- for ($i=0;$i<strlen($theWord);$i++){
- $boardLetter=$board[$newRow][$newCol+$i];
- //проверяем свободно ли значение текущей ячейки поля
- if (($boardLetter==$wordLetter)||($boardLetter==".")){
- $board[$newRow][$newCol+$i]=$wordLetter;
- } else {
- $itWorked = FALSE;
- }//if
- }//for
- break;
- case "W":
- //колонка от ширины слова до ширины поля
- //строка от 0 до высоты поля
- //print "west \tRow $newRow\tCol: $newCol<br>\n";
- for ($i=0;$i<strlen($theWord);$i++){
- //проверим можно ли продвинуться //-i пием справа налево
- $boardLetter = $board[$newRow][$newCol-$i];
- if (($boardLetter == $wordLetter)|| ($boardLetter==".")){
- $board[$newRow][$newCol-$i]=$wordLetter;
- } else {
- $itWorked=FALSE;
- }//if
- }//for
- break;
- case "S":
- //колонка от 0 до ширины поля
- //строка от 0 до высоты поля-длина слова
- //print "south \tRow.$newRow\tCol $newCol<br>\n;
- for ($i=0;$i<strlen($theWord);$i++){
- //проверим можно ли продвинуться
- $boardLetter = $board[$newRow+$i][$newCol];
- if (($boardLetter == $wordLetter)||($boardLetter=".")){
- $board[$newRow+$i][$newCol]=$wordLetter;
- } else {
- $itWorked = FALSE;
- }//завершение if
- }//for
- break;
- case "N":
- //колонка от 0 до ширины поля
- //строка от длины слова до высоты поля
- for ($i=0;$i<strlen($theWord);$i++){
- $boardLetter=$board[$newRow-$i][$newCol];
- if (($boardLetter==$wordLetter)||($boardLetter == ".")) {
- $board[$newRow-$i][$newCol]=$wordLetter;
- } else {
- $itWorked=FALSE;
- }//if
- }//for
- break;
- }//switch
- return $itWorked;
- }//addWord
- function makeBoard($theBoard){
- global $boardData;
- $puzzle="";
- $puzzle .= "<table border=0>\n";
- for ($row=0;$row<$boardData['height'];$row++){
- $puzzle .= "<tr>\n";
- for ($row=0;$row<$boardData['height'];$row++){
- $puzzle .= " <td width = 15>{$theBoard[$row][$col]}</td>\n";
- }//end col for loop
- $puzzle .= "</tr>\n";
- }//for row
- $puzzle .= "</table>\n";
- return $puzzle;
- }//end printBoard
- function addFoils(){
- //добавить случайные символы на доску
- global $board, $boardData;
- for ($row=0;$row<$boardData['height'];$row++){
- for ($col=0;$col<$boardData['width'];$col++){
- if ($board[$row][$col]== "."){
- }//if
- }//col
- }//row if
- }//addFoils
- function printPuzzle(){
- //отобразить страницу содержащую головоломку пользоваетелю
- global $puzzle, $word, $keyPuzzle, $boardData;
- //отобразить головоломку
- print <<<HERE
- <center>
- <h1>{$boardData['name']}</h1>
- $puzzle
- <h3>WordList</h3>
- <table border=0>
- HERE;
- //отобразить список слов
- foreach ($word as $theWord){
- print "<tr><td>$theWord</td></tr>\n";
- }//end foreach
- print "</table>\n";
- $puzzleName = $boardData["name"];
- //отобразить форму ключа ответа
- //послать ключ ответа по этой форме
- print <<<HERE
- <br><br><br><br><br><br><br><br>
- <form action = "wordFindKey.php" method="post">
- <input type="hidden" name="key" value="$keyPuzzle">
- <input type="hidden" name="puzzleName" value="$puzzleName">
- <input type"submit value="show answer key">
- </form>
- </center>
- HERE;
- }//printPuzzle
- ?>
- </body>
- </html>