Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Клавиатурный тренажер  (Прочитано 7339 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Клавиатурный тренажер
« : 01 Апреля 2013, 23:55:17 »
Привет!

Я пишу консольный (по крайней мере, пока что) клавиатурный тренажер на питоне. Пока что работает только английский, но, надеюсь, русский тоже будет. Кроме того, пока что только буквы, причем только маленькие. Хочу добавить заглавные в будущем, как другой уровень сложности, так же, как и другие символы. Кроме того, добавлю при выходе какую-то статистику, типа средней скорости ответа, рейтинга проблемности букв и т.п.
Что есть. Собственно, запрос буквы, получение ответа с выводом на экран, принятие без нажатия энтера. Есть при достижении определенного числа очков добавление по одной букве (есть очки, рассчитывающиеся по скорости набора и длине "слова"). В любой момент можно поставить на паузу, посмотреть свои очки (и поставить на паузу), или выйти, увидев все свои попытки ответа и финальные очки.

Файл (одновременно исходник и исполняемый, т. к. это питон) лежит тут: http://ubuntuone.com/2zuUkV0MTOJ1kmmVYKcDeK http://bazaar.launchpad.net/~flyamer/keytrain/trunk/files/1Запускать обязательно в терминале, в средах разработки всяких работать не будет из-за необходимости наличия именно стандартного инпута/аутпута, чтобы не надо было нажимать энтер при ответах.

Готов выслушать критику, пожелания и предложения.
И вопрос, нужен ли ГУИ? Пока что я не тороплюсь с ним, потому как лень, но если кто-то желает - это опен-сорс! Аналогично с проблемой с русским языком...

Вот принтскрин:



Пользователь решил продолжить мысль 02 Апреля 2013, 01:45:49:
Программа работает по Linuxом и виндой (последнюю мне самому проверять сложно, буду благодарен за тесты).
« Последнее редактирование: 04 Апреля 2013, 21:25:00 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн oermolaev

  • Старожил
  • *
  • Сообщений: 1479
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #1 : 02 Апреля 2013, 08:10:07 »
с запуском какие то проблемы:
Цитировать
keyboard train.py: строка 6: $'\nCreated on Thu Mar 28 21:14:48 2013\n\n@author: ilya\n': команда не найдена

разобрался

Пользователь решил продолжить мысль 02 Апреля 2013, 11:43:22:
вопросы:
1. Как "поставить на паузу, посмотреть свои очки", или как корректно выходить из программы?
2. Как исправлять неверно введенные символы (f.e. backspace)
3. Как выбрать нужный уровень сложности (или как продолжить с того места где остановились?
4. Планируются ли слова из словаря, или тексты, или только случайный набор символов?
« Последнее редактирование: 02 Апреля 2013, 11:43:22 от oermolaev »

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #2 : 02 Апреля 2013, 21:47:51 »
вопросы:
1. Как "поставить на паузу, посмотреть свои очки", или как корректно выходить из программы?
2. Как исправлять неверно введенные символы (f.e. backspace)
3. Как выбрать нужный уровень сложности (или как продолжить с того места где остановились?
4. Планируются ли слова из словаря, или тексты, или только случайный набор символов?

1) При работе в начале программа пишет. Для паузы нажать ~, для просмотра очков (с одновременной паузой) @. Для выхода !
2) Да, про backspace я совершенное забыл, постараюсь исправить в ближайшее время... Но могут возникнуть сложности...
3) Пока никак.
4) Да, планируются, но не прямо сейчас.

С бэкспейсом нужно только одно - как проверить, что он был нажат? Я что-то не могу разобраться со всякими CSI-кодами, может, кто-то подскажет? А то это важно, думаю. Приходится использовать stdin, низкоуровневая штука, столько мороки, оказывается.
Как это получится, его легко будет добавить.

Пользователь решил продолжить мысль 03 Апреля 2013, 00:25:12:
С помощью StackOverflow справился с backspace'ом (http://stackoverflow.com/questions/15772580/get-backspace-in-python-from-stdin?noredirect=1#comment22422127_15772580)
При нажатии переходит на новую строчку, на старой все остается по-прежнему, а на новой нет последнего символа. В общем, с точки зрения печати, все нормально, но выглядит немного необычно:


Можно сделать, чтобы все происходило на той же строчке, но тогда удаляемый символ не исчезнет, а просто курсор будет на нем. Что лучше?

Пользователь решил продолжить мысль 03 Апреля 2013, 00:27:53:
http://ubuntuone.com/5AjvY2L959A1B8RY8Bgv0y - это сделано тут, нестабильная версия.
« Последнее редактирование: 03 Апреля 2013, 00:27:54 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #3 : 03 Апреля 2013, 01:34:40 »
Backspace эмулируем так:

1: курсор назад, 2: печатаем пробел, 3: курсор назад.

0:    F_
1:    F
2:     _
3:    _
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #4 : 03 Апреля 2013, 08:37:19 »
К сожалению, так сделать невозможно, насколько я знаю, мне приходится делать возврат каретки и заново печатать все, кроме последнего символа. И почему-то печать пробела поверх символов их не удаляет!
Нет, получилось сделать! Все, Backspace ведет себя абсолютно стандартным образом, ура!
« Последнее редактирование: 03 Апреля 2013, 09:11:52 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #5 : 03 Апреля 2013, 09:33:48 »
Помню был клавиатурный тренажер стамина для слепого
десятипальцевого метода под винду.
Там хорошо сделана наработка комбинаций букв.
Попробуйте подобный подход в вашем тренажере.

Сам десятипальцевый метод освоить не смог -
сила привычки победила - давно и быстро печатаю двумя
пальцами на rus\ing

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #6 : 03 Апреля 2013, 09:47:52 »
Что значит комбинация клавиш? Можете привести пример, что Вы хотите?
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн oermolaev

  • Старожил
  • *
  • Сообщений: 1479
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #7 : 03 Апреля 2013, 09:55:31 »
backspace работает отлично!
какова методика подсчета набранных очков?
хотелось бы иметь инфу по количеству набираемых знаков в минуту

Оффлайн Señor_Gaga

  • Забанен
  • Активист
  • *
  • Сообщений: 878
  • Ubuntu 12.04LTS & Linux Mint 13LTS "Maya"
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #8 : 03 Апреля 2013, 09:59:54 »
Phlya,

Каждый палец левой и правой руки привязан к своей комбинации
клавиш.
Начальное положение пальцев для
левой руки:
мизинец - Ф
безымянный -Ы
средний - В
указательный - А

для правой руки:
мизинец - Ж
безымянный - Д
средний - Л
указательный - О

Большие пальцы работают с ПРОБЕЛОМ в основном.

Сначала отрабатывается средний ряд клавиш - ВА ВА ДА ДА и тд в том же духе.
Затем подключаются верхний и нижний ряд.
Так для мизинца левой руки это будут буквы Й Я
Остальные пальцы по аналогии.

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #9 : 03 Апреля 2013, 10:06:06 »
backspace работает отлично!
какова методика подсчета набранных очков?
хотелось бы иметь инфу по количеству набираемых знаков в минуту
При каждом ответе подсчитывается отношение: длина "слова" / время его набора (в секундах). Если ответ правильный, то это дело прибавляется, если неправильный - вычитается. Так что умножаете очки на 60 и получаете символы в минуту (учтите, что ошибки ее уменьшают!). Могу добавить, что при показе очков и выходе это просто показывалось.
Методику подсчета очков я готов обсуждать, это взято от балды.

Phlya,
Это можно, но потом, тут надо много думать про эти клавиши)

Пользователь решил продолжить мысль 03 Апреля 2013, 10:28:46:
А, нет, про простое умножение на 60 я загнул, конечно... Вечером добавлю скорость печати.
« Последнее редактирование: 03 Апреля 2013, 10:29:50 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #10 : 03 Апреля 2013, 13:16:39 »
А может, покрасивее что-нибудь показывать?
Ну, как-то так:
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #11 : 03 Апреля 2013, 19:21:08 »
1) Как показанное работает?.. Для чего вся эта клавиатура?
2) Это можно нарисовать кроссплатформенно?
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #12 : 03 Апреля 2013, 20:27:26 »
1) Ну, я видел тренажер, где на подобной «клавиатуре» подсвечивается
клавиша, и её должен нажать пользователь.

Работает всё это дело вот так. Называется ANSI console codes
или ANSI escape sequences.

2) Кроссплатформенно — должно работать:

Ссылка.

А в Linuxе всё совсем просто:
Код: (python) [Выделить]
~$ python
Python 2.6.5 (r265:79063, Oct  1 2012, 22:07:21)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print '\033[H\033[2J\033[44m\n\n Hello \n\n\033[0m'
           ------|     ||      ||             ||     |
  Home cursor ^  |     ||      ||             ||     |
                 -------|      ||             ||     |
      Очистить экран ^  |      ||             ||     |
                        --------|             ||     |
          Задать цвет фона ^    |             ||     |
                                ---------------|     |
                       Ну, это понятно ^       |     |
                                               -------
         Восстановить значение цвета по умолчанию ^

Я уж не говорю про curses.

А вам, кстати, спасибо за наводку на getch() в Питоне. Попробую.
Делюсь знаниями, но их у меня мало!

Оффлайн Phlya

  • Автор темы
  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #13 : 03 Апреля 2013, 20:56:22 »

1) Да, понятно. Я думаю, что если так делать, то уже переходить на полноценный ГУИ, не будет ли это проще и логичнее? Пока что вот подумал что: выделять цветом ошибки в набранном. Стоит ли заморачиваться?
Да, с этими ANSI-кодами я как раз пытался разобраться, ничего не понял) Слава богу, без них пока получается.

2) Да, понятно. Все должно работать, если постараться. А curses только юниксовые, иначе все было бы значительно проще...

А getch() да, я долго мучился, все думал, что же не так, пока не понял, что в IDE не будет работать, только в терминале =) Но без него было бы странно как-то все это.

Пользователь решил продолжить мысль 03 Апреля 2013, 21:07:08:
Но лично меня значительно больше волнует не работающий русский режим... Как с этим бороться? Может, каким-то образом преобразовывать инпут в юникод? Как?
« Последнее редактирование: 03 Апреля 2013, 21:07:08 от Phlya »
Ubuntu 14.04 (Unity), MSI GE40

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Клавиатурный тренажер
« Ответ #14 : 03 Апреля 2013, 21:15:45 »
С русскими буквами несложно, найду.

А curses здесь конечно не нужны, мощности компа вполне хватает и на работу с ANSI.
Делюсь знаниями, но их у меня мало!

 

Страница сгенерирована за 0.023 секунд. Запросов: 19.