Помощь - Поиск - Пользователи - Календарь
Полная версия: Кроссворд...
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
corazon
Задали нам сделать кроссворд на дельфи...есть вопросы (или для простоты - слова), ответы(слова) надо ввести в определенное место в стринггриде и потом проверить правильно ли введено, если где то не правильно (пересечение слов не совпало или вообще слово не то), то как то это показать.... вот... вопросы:
1) Как выделить определенную ячейку в стринггриде?
2) Может у кого либо есть алгоритм проверки ввода слов...
3) Как выделить ошибку?
Буду благодарна за любую помощь ))
Бродяжник
Corazon, идеи следующие.
Наиболее простой выглядит идея, когда у нас есть правильно заполненный кроссворд, который мы храним в виде матрицы символов. Например:
Код

СТОЛ
--К-
--Н-
--О-

(Загаданы слова СТОЛ и ОКНО, неиспользуемые клетки заполнены символом "-").
Наши попытки решить кроссоворд мы храним либо прямо в гриде, либо (для унификации) в еще одной матрице. Есть кнопочка "проверить", по нажатию на нее мы в цикле ёпробегаемся по эталонной матрице и по нашему решению и поэлементно сверяем. И если обнаруживаем разногласия, то соответствующие элементы в гриде подкрашиваем каким-то цветом. Поэтому решение задачи я бы начал с создания "редактора эталонных матриц". На форме есть грид, кнопочки "очистить", "сохранить" и "загрузить". Пользователь побуквенно заполняет кроссоворд и сохраняет его в каком-либо виде в файл. Когда Вы сможете редактировать кроссворд, по аналогии можно будет написать и процедуру ввода решений. А процедура проверки - это уже дело техники. С этим мы поможем. А что Вы придумали? На каком этапе остановились?
corazon
то что я делала до этого заключалось немного в другом, там были эдиты (можно лист бокс) в них были слова, по нажатии на кнопочку должен был составляться кроссворд.... но потом задачу слегка измени так что вот.... начала делать по вашему варианту.... забила в стринггрид кроссворд, сохраняю как типизированный файл f:file of string[100];(записывает нормально) и при попытке чтения read(f,s);(s:string[100]; ) он ругается... чего то здесь я не понимаю...
и еще появились новые вопросы )) как сделать :
1) переход по ячейкам в стринггриде с помощью стрелочек вниз, вверх, вправо и влево
2) так чтобы когда я нажимаю на ячейку содержимое ее выделялось?
Бродяжник
Corazon, я через пару часов набросаю кой-чего. Может быть это вдохновит Вас на подвиг... smile.gif
corazon
ok ))
а еще я не против пообщаться on-line...
Бродяжник
Для начала держите это. Это просто набросок, но когда Вы скажете, что улучшить, будем искать решение.
По поводу on-line ничего сказать не могу. С аськами и т.д. я как-то не дружу, а брожу сейчас в Киеве.
Бродяжник
Вот еще. 1 архив - подправленная версия того, что выше (редактор кроссвордов), 2 архив - типа решалка.
corazon
обидно что с асей не дружите ... можно было бы задавать вопросы..

по поводу архивов, я так поняла что в Editor я создаю кроссворд, а потом с помощью Solve его загружаем и там закрашивается где должны быть слова...
так вот если я правильно поняла то все здорово работает!!! smile.gif ( тока зачем такие бешенные цвета???)
я думаю что можно сделать еще openDialog и в нем сделать выбор схемы кроссворда ведь у нас будет не только один ... думаю смогу это сделать (не совсем, там при открытии другого кроссворда стринггрид почистить нада, как?) , а вот что с проверкой???
я файл прикрепила где openDialog делать пыталась...
Бродяжник
Corazon,
я чуток подправил процедуру чтения из файла. Правки отмечены комментариями. Теперь грид очищается. За цвета прошу простить, виноват, поленился подбирать... По поводу проверки: сейчас проверка идет "в режиме ран-тайм", то есть как только вы ввели букву, она тут же проверяется, и в зависимости от правильности отображается разным цветом. Конечно, это не есть гут. Лучше было бы сделать так, как я уже думал: чтобы проверка производилась по нажатию какой-то кнопочки. Заодно можно было бы вести подсчет несовпадений, и если таких не окажется, то выводить радостное окшко с поздравлениями. Кроме того, стоило бы ограничить число разрешенных нажатий на кнопку "Проверить". Это можно сделать, но я еще не решил, хочу я этого, или нет... вредный я. rolleyes.gif ...посмотрим...
corazon
спасиба )) мне нравится как это работает ))тока я не нашла как сделан переход с помощью стрелочек.... мне вот еще что интересно... а как сделать так, чтобы в зависимости от того какой кроссворд открыт, загружались вопросы, например в листбокс..... и по поводу кнопочки "проверка" может стоит? rolleyes.gif ...
Бродяжник
По поводу вопросов к кроссворду - предлагаю следующее решение (оно не блестящее, но работающее). Смотрите: вот у нас есть файл с кроссвордом: CROSWORD.DAT. Хорошо; создаем в "Блокноте" текстовый файл с вопросами и обзываем его тоже CROSWORD, но расширение даем VPR: CROSWORD.VPR. После загрузки кроссворда из файла CROSWORD.DAT меняем расширение, и читаем вопросы из CROSWORD.VPR. Подробности смотрите в коде.
По поводу стрелочек - хи-хи... сделано было так. Когда мы просто поставили на форму грид, то по нему уже и так можно ходить. Проблемы начинаются, когда мы беремся его редактировать. Отключаются клавиши "влево" и "вправо" - они переключаются на редактирования текста в ячейке. И перейти в соседнюю ячейку можно только после нажатия на ЭНТЕР. Поэтому я сделал что: я заставил программу после каждой нажатой буквы-цифры имитировать нажатие на ЭНТЕР. Это сделано здесь:

procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if key <> #13 then
begin
StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row] := Key;
Key := #13;
StringGrid1.OnKeyPress(Sender,key); // имитируем нажатие
end;
end;

По поводу проверки... это зависит от того, как срочно это Вам нужно. Сегодня мне уже лень, завтра я могу не управиться, в выходные я этим заниматься не буду... если до вторника потерпите, то так и быть. В общем-то, помочь Вам было бы приятно.
corazon
А мне приятно что Вы мне помогаете smile.gif и огромное Вам за это спасибо!!!!
до вторника я смогу подождать, у меня среда - день программирования...
с вопросиками разобралась - здорово придумано )), но... там есть циферки... а в стринггриде нет..., т.е. куда вводить то эти слова непонятно...что с этим можно сделать?
и еще здесь 10*10, а если будет больше? я попробовала поменять на 15 не очень то хорошо получилось(потом вернула снова 10 )... а можно размер читать из файла, и устанавливать размер стринггриду что бы не было прокруток? что бы было все красиво и аккуратненько ))
а в файле CROSWORD1 это 15*15
Бродяжник
Ладно... будет Вам счастье. (Лишь бы с инетом ничего не случилось). smile.gif
Последние новости проекта: Готовность 85%.
corazon
smile.gif
Бродяжник
Ну, держите!
В архиве есть файл README.TXT - там краткое описание.
corazon
smile.gif Спасиба, пасиба, пасиба!!!! )) суперская прога получилась!!! тока вот мне интересно как я буду объяснять это нашей программистке ... явно заподозрит что то неладное ))
пасиба еще раз, буду обращаться за помощью! ;)
Бродяжник
smile.gif
Желаю удачи!
corazon
Спасиба smile.gif
Dark
расскажи как ты ее сдала =))))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.