Задали нам сделать кроссворд на дельфи...есть вопросы (или для простоты - слова), ответы(слова) надо ввести в определенное место в стринггриде и потом проверить правильно ли введено, если где то не правильно (пересечение слов не совпало или вообще слово не то), то как то это показать.... вот... вопросы: 1) Как выделить определенную ячейку в стринггриде? 2) Может у кого либо есть алгоритм проверки ввода слов... 3) Как выделить ошибку? Буду благодарна за любую помощь ))
Бродяжник
24.05.2005 12:14
Corazon, идеи следующие. Наиболее простой выглядит идея, когда у нас есть правильно заполненный кроссворд, который мы храним в виде матрицы символов. Например:
Код
СТОЛ --К- --Н- --О-
(Загаданы слова СТОЛ и ОКНО, неиспользуемые клетки заполнены символом "-"). Наши попытки решить кроссоворд мы храним либо прямо в гриде, либо (для унификации) в еще одной матрице. Есть кнопочка "проверить", по нажатию на нее мы в цикле ёпробегаемся по эталонной матрице и по нашему решению и поэлементно сверяем. И если обнаруживаем разногласия, то соответствующие элементы в гриде подкрашиваем каким-то цветом. Поэтому решение задачи я бы начал с создания "редактора эталонных матриц". На форме есть грид, кнопочки "очистить", "сохранить" и "загрузить". Пользователь побуквенно заполняет кроссоворд и сохраняет его в каком-либо виде в файл. Когда Вы сможете редактировать кроссворд, по аналогии можно будет написать и процедуру ввода решений. А процедура проверки - это уже дело техники. С этим мы поможем. А что Вы придумали? На каком этапе остановились?
corazon
24.05.2005 19:30
то что я делала до этого заключалось немного в другом, там были эдиты (можно лист бокс) в них были слова, по нажатии на кнопочку должен был составляться кроссворд.... но потом задачу слегка измени так что вот.... начала делать по вашему варианту.... забила в стринггрид кроссворд, сохраняю как типизированный файл f:file of string[100];(записывает нормально) и при попытке чтения read(f,s);(s:string[100]; ) он ругается... чего то здесь я не понимаю... и еще появились новые вопросы )) как сделать : 1) переход по ячейкам в стринггриде с помощью стрелочек вниз, вверх, вправо и влево 2) так чтобы когда я нажимаю на ячейку содержимое ее выделялось?
Бродяжник
25.05.2005 8:27
Corazon, я через пару часов набросаю кой-чего. Может быть это вдохновит Вас на подвиг...
corazon
25.05.2005 8:54
ok )) а еще я не против пообщаться on-line...
Бродяжник
25.05.2005 9:23
Для начала держите это. Это просто набросок, но когда Вы скажете, что улучшить, будем искать решение. По поводу on-line ничего сказать не могу. С аськами и т.д. я как-то не дружу, а брожу сейчас в Киеве.
Бродяжник
25.05.2005 10:15
Вот еще. 1 архив - подправленная версия того, что выше (редактор кроссвордов), 2 архив - типа решалка.
corazon
25.05.2005 21:23
обидно что с асей не дружите ... можно было бы задавать вопросы..
по поводу архивов, я так поняла что в Editor я создаю кроссворд, а потом с помощью Solve его загружаем и там закрашивается где должны быть слова... так вот если я правильно поняла то все здорово работает!!! ( тока зачем такие бешенные цвета???) я думаю что можно сделать еще openDialog и в нем сделать выбор схемы кроссворда ведь у нас будет не только один ... думаю смогу это сделать (не совсем, там при открытии другого кроссворда стринггрид почистить нада, как?) , а вот что с проверкой??? я файл прикрепила где openDialog делать пыталась...
Бродяжник
26.05.2005 9:17
Corazon, я чуток подправил процедуру чтения из файла. Правки отмечены комментариями. Теперь грид очищается. За цвета прошу простить, виноват, поленился подбирать... По поводу проверки: сейчас проверка идет "в режиме ран-тайм", то есть как только вы ввели букву, она тут же проверяется, и в зависимости от правильности отображается разным цветом. Конечно, это не есть гут. Лучше было бы сделать так, как я уже думал: чтобы проверка производилась по нажатию какой-то кнопочки. Заодно можно было бы вести подсчет несовпадений, и если таких не окажется, то выводить радостное окшко с поздравлениями. Кроме того, стоило бы ограничить число разрешенных нажатий на кнопку "Проверить". Это можно сделать, но я еще не решил, хочу я этого, или нет... вредный я. ...посмотрим...
corazon
26.05.2005 14:05
спасиба )) мне нравится как это работает ))тока я не нашла как сделан переход с помощью стрелочек.... мне вот еще что интересно... а как сделать так, чтобы в зависимости от того какой кроссворд открыт, загружались вопросы, например в листбокс..... и по поводу кнопочки "проверка" может стоит? ...
Бродяжник
26.05.2005 14:54
По поводу вопросов к кроссворду - предлагаю следующее решение (оно не блестящее, но работающее). Смотрите: вот у нас есть файл с кроссвордом: 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
26.05.2005 20:29
А мне приятно что Вы мне помогаете и огромное Вам за это спасибо!!!! до вторника я смогу подождать, у меня среда - день программирования... с вопросиками разобралась - здорово придумано )), но... там есть циферки... а в стринггриде нет..., т.е. куда вводить то эти слова непонятно...что с этим можно сделать? и еще здесь 10*10, а если будет больше? я попробовала поменять на 15 не очень то хорошо получилось(потом вернула снова 10 )... а можно размер читать из файла, и устанавливать размер стринггриду что бы не было прокруток? что бы было все красиво и аккуратненько )) а в файле CROSWORD1 это 15*15
Бродяжник
27.05.2005 8:05
Ладно... будет Вам счастье. (Лишь бы с инетом ничего не случилось). Последние новости проекта: Готовность 85%.
corazon
27.05.2005 13:27
Бродяжник
30.05.2005 9:03
Ну, держите! В архиве есть файл README.TXT - там краткое описание.
corazon
30.05.2005 18:08
Спасиба, пасиба, пасиба!!!! )) суперская прога получилась!!! тока вот мне интересно как я буду объяснять это нашей программистке ... явно заподозрит что то неладное )) пасиба еще раз, буду обращаться за помощью! ;)
Бродяжник
31.05.2005 8:54
Желаю удачи!
corazon
1.06.2005 18:38
Спасиба
Dark
13.06.2005 10:14
расскажи как ты ее сдала =))))
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.